@rangertechnologies/ngnxt 2.1.239 → 2.1.241

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/esm2022/environments/version.mjs +2 -2
  2. package/esm2022/lib/components/button/nxt-button.component.mjs +4 -7
  3. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +1 -1
  4. package/esm2022/lib/components/datatable/datatable.component.mjs +3 -3
  5. package/esm2022/lib/components/file-upload/file-upload.component.mjs +5 -2
  6. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +10 -4
  7. package/esm2022/lib/components/pick-location/pick-location.component.mjs +1 -1
  8. package/esm2022/lib/components/search-box/search-box.component.mjs +294 -158
  9. package/esm2022/lib/pages/booklet/booklet.component.mjs +6 -8
  10. package/esm2022/lib/pages/builder/properties/properties.component.mjs +1 -1
  11. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +9 -3
  12. package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +2 -2
  13. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +4 -4
  14. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +2 -2
  15. package/esm2022/lib/services/translation.service.mjs +2 -1
  16. package/fesm2022/rangertechnologies-ngnxt.mjs +333 -186
  17. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  18. package/lib/components/nxt-input/nxt-input.component.d.ts +3 -1
  19. package/lib/components/search-box/search-box.component.d.ts +26 -10
  20. package/lib/pages/booklet/booklet.component.d.ts +1 -1
  21. package/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.d.ts +3 -1
  22. package/package.json +1 -1
  23. package/rangertechnologies-ngnxt-2.1.241.tgz +0 -0
  24. package/rangertechnologies-ngnxt-2.1.239.tgz +0 -0
@@ -2371,7 +2371,7 @@ export class QuestionnaireComponent {
2371
2371
  return updatedText;
2372
2372
  }
2373
2373
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.SharedService }, { token: i5.ActivatedRoute }, { token: i6.DomSanitizer }, { token: i7.UntypedFormBuilder }, { token: i8.DeviceDetectorService }, { token: i0.ElementRef }, { token: i9.I18nService }], target: i0.ɵɵFactoryTarget.Component });
2374
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionnaireComponent, isStandalone: true, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api", isEdit: "isEdit" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion", handleBook: "handleBook", handleSubmit: "handleSubmit" }, usesOnChanges: true, ngImport: i0, template: "<!-- custom loader -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText && questionItem.style?.showLabel !== false\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n <div class=\"info-alert ques-alert1\">\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n 'custom-select': !qbItem?.progressBar\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.errorMessage }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.progressBar\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.type === 'File' &&\n !qbItem?.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.progressBar\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" *ngIf=\" questionItem?.style?.showLabel !== false\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span *ngIf=\"ques?.style?.showLabel !== false\">{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- SKS11JUN25 Text, Email, label, number, DateTime-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n (inputValue)=\"childEventCapture($event,ques)\"\n >\n </nxt-input>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.type === 'File' &&\n !qbItem.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.question }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <!-- SKS13MAR25 nxt table change -->\n <nxt-datatable isEditRow isDeleteRow actionButton isButtons\n [question]=\"ques\"\n from = \"formBuilder\"\n (valueChange)=\"childEventCapture($event.data, ques); clearSQError(ques.id)\"\n [tableConfig]=\"ques.tableConfig\"\n tableId = \"\"\n direction = \"ltr\"\n tableWidth = \"auto\"\n >\n </nxt-datatable>\n </div>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n <img [src]=\"ques.imageData\" [style.border]=\"ques.imageData ? '1px solid black' : 'none'\" />\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\">{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.next\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p *ngIf=\"val.style?.showLabel !== false\">{{ val.questionText }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book' && qa.style?.showLabel !== false\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#f8f8f8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.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: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode", "languageCode"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "NxtTableEmit"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "mode", "apiKey"], outputs: ["locationSelected"] }], encapsulation: i0.ViewEncapsulation.None });
2374
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionnaireComponent, isStandalone: true, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api", isEdit: "isEdit" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion", handleBook: "handleBook", handleSubmit: "handleSubmit" }, usesOnChanges: true, ngImport: i0, template: "<!-- custom loader -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText && questionItem.style?.showLabel !== false\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n <div class=\"info-alert ques-alert1\">\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n 'custom-select': !qbItem?.progressBar\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.errorMessage }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.progressBar\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.type === 'File' &&\n !qbItem?.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.progressBar\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" *ngIf=\" questionItem?.style?.showLabel !== false\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span *ngIf=\"ques?.style?.showLabel !== false\">{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- SKS11JUN25 Text, Email, label, number, DateTime-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n (inputValue)=\"childEventCapture($event,ques)\"\n >\n </nxt-input>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.type === 'File' &&\n !qbItem.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.question }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <!-- SKS13MAR25 nxt table change -->\n <nxt-datatable isEditRow isDeleteRow actionButton isButtons\n [question]=\"ques\"\n from = \"formBuilder\"\n (valueChange)=\"childEventCapture($event.data, ques); clearSQError(ques.id)\"\n [tableConfig]=\"ques.tableConfig\"\n tableId = \"\"\n direction = \"ltr\"\n tableWidth = \"auto\"\n >\n </nxt-datatable>\n </div>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n <img [src]=\"ques.imageData\" [style.border]=\"ques.imageData ? '1px solid black' : 'none'\" />\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\">{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.next\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p *ngIf=\"val.style?.showLabel !== false\">{{ val.questionText }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book' && qa.style?.showLabel !== false\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#f8f8f8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef", "removeValueEmit"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.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: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode", "languageCode"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "NxtTableEmit"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "mode", "apiKey"], outputs: ["locationSelected"] }], encapsulation: i0.ViewEncapsulation.None });
2375
2375
  }
2376
2376
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, decorators: [{
2377
2377
  type: Component,
@@ -2402,4 +2402,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2402
2402
  }], handleSubmit: [{
2403
2403
  type: Output
2404
2404
  }] } });
2405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQU1qRSxPQUFPLEVBQ0wsUUFBUSxFQUdSLGFBQWEsRUFFYixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFFTCxVQUFVLEVBTVYsTUFBTSxFQUVQLE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWTFFLE1BQU0sT0FBTyxzQkFBc0I7SUEy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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0Qsb0RBQW9EO0lBQ25ELGdCQUFnQixDQUFDLFlBQW9CO1FBQ25DLElBQUksV0FBVyxHQUFHLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7d0dBdjhFVSxzQkFBc0I7NEZBQXRCLHNCQUFzQiwyWENoRW5DLHltakNBa3NCTSwyOGhCRHhvQkYsWUFBWSxpV0FBQyxRQUFRLCt3QkFDckIsUUFBUSw0Q0FBRSxXQUFXLDZsREFBRSx1QkFBdUIsa1JBQUUsWUFBWSx1NEJBQUUscUJBQXFCOzs0RkFLMUUsc0JBQXNCO2tCQVhsQyxTQUFTOytCQUNFLG1CQUFtQixjQUVqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWSxFQUFDLFFBQVE7d0JBQ3JCLFFBQVEsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLHFCQUFxQjtxQkFDcEYsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTt3VkFJNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG4vL2ltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UsIEluZGV4RGV0YWlsc30gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb24sXG4gIFF1ZXN0aW9uQm9vayxcbiAgQW5zd2VyQm9vayxcbiAgQW5zd2VyV3JhcHBlcixcbiAgT3B0aW9uLFxuICBPcHRpb25WYWx1ZSxcbiAgQXR0YWNobWVudFdyYXBwZXIsXG4gIEF0dGFjaG1lbnQsXG4gIExvY2FsUXVlc3Rpb25cbn0gZnJvbSBcIi4uLy4uL3dyYXBwZXJcIjtcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXJcIjtcbmltcG9ydCB7XG4gIFRFU1RRVUVTVElPTixcbiAgRFRRVUVTVElPTixcbiAgRklMRVFVRVNUSU9OLFxuICBUQVFVRVNUSU9OLFxuICBSQURJT1FVRVNUSU9OLFxuICBDSEVDS1FVRVNUSU9OLFxuICBCT09LUVVFU1RJT04sXG4gIFRFU1RRQixcbiAgUlRBUVVFU1RJT04gLy9SUyAwNkpBTjI1XG59IGZyb20gXCIuLi8uLi9zYW1wbGVcIjtcbmltcG9ydCB7IGZyb20gfSBmcm9tIFwicnhqc1wiO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEkxOG5QaXBlIH0gZnJvbSBcIi4uLy4uL2kxOG4ucGlwZVwiO1xuaW1wb3J0IHsgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9jdXN0b20tZHJvcGRvd24vY3VzdG9tLWRyb3Bkb3duLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTnh0RGF0YXRhYmxlIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFBpY2tMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3BpY2stbG9jYXRpb24vcGljay1sb2NhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbnh0LWlucHV0L254dC1pbnB1dC5jb21wb25lbnRcIjtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJsaWItcXVlc3Rpb25uYWlyZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxOeHRJbnB1dCxcbiAgICBJMThuUGlwZSwgRm9ybXNNb2R1bGUsIEN1c3RvbURyb3Bkb3duQ29tcG9uZW50LCBOeHREYXRhdGFibGUsIFBpY2tMb2NhdGlvbkNvbXBvbmVudFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFtcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJZDogc3RyaW5nO1xuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xuICBASW5wdXQoKSB0a246IHN0cmluZztcbiAgQElucHV0KCkgYXBpOiBzdHJpbmc7IC8vIFZEIGdldHRpbmcgdGhlIGFwaSBhcyBpbnB1dFxuICBASW5wdXQoKSBpc0VkaXQ6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBoYW5kbGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlQm9vazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVTdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHBhcmFtczogUGFyYW1zO1xuICBwdWJsaWMgZGV2aWNlSW5mbyA9IG51bGw7XG4gIHB1YmxpYyBhYkl0ZW06IEFuc3dlckJvb2s7XG4gIHB1YmxpYyBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgcHVibGljIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIHB1YmxpYyBhbnN3ZXJXcmFwOiBBbnN3ZXJXcmFwcGVyO1xuIFxuICAvLyBDT05ESVRJT05BTCBUWVBFU1xuICBwdWJsaWMgcmFkaW9GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuIFxuICAvLyBPUFRJT05PTkxZIFRZUEVTXG4gIHB1YmxpYyBkcm9wZG93bkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrYm94RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuIFxuICAvLyBVTkNPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyB0ZXh0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBydGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkdEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRpbWVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZmlsZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGVtYWlsRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbnVtYmVyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYWxwaGFudW1lcmljRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYm9va0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxpc3RGbGFnOiBib29sZWFuPSBmYWxzZTtcbiAgLy9CYWNrIGJ1dHRvblxuICBwdWJsaWMgYmFja0J1dHRvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gVkQgZGlzYWJsZWRcbiAgcHVibGljIGlzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9wdGlvblZhbHVlczogT3B0aW9uVmFsdWVbXSA9IFtdO1xuICBwdWJsaWMgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBpbnBWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgYW5zd2VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgZGF0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkaG91ck1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkbWludXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgYXR0YWNobWVudHNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzcU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBsb2NhbFN1YlF1ZXN0aW9uczogTG9jYWxRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBxdWVzdGlvblN0YWNrID0gW107XG4gIHB1YmxpYyBxdWVzdGlvbk5hbWUgPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkTGlzdDogYW55W10gPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRJZDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGF0dGFjaG1lbnQ6IGFueTtcbiAgcHVibGljIGFsbG93ZWRGaWxlRXh0ZW5zaW9uOiBzdHJpbmdbXTtcbiAgcHVibGljIGZpbGVFeGNlZWRlZExpbWl0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlVHlwZUluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFjazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFja2ljb246IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgY2hlY2s6IGJvb2xlYW47XG4gIHB1YmxpYyBwb3A6IGJvb2xlYW47XG4gIHB1YmxpYyBsb2NhbERhdGU6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXRocXVlc3Rpb246IG51bWJlcjtcbiAgcHVibGljIHBlcmNlbnQ6IG51bWJlcjtcbiAgcHVibGljIGNvdW50OiBudW1iZXI7XG4gIHB1YmxpYyB0YUZvY3VzT3V0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBub3RWYWxpZEFjY051bTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3BsQ0NCYWNrQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN1bW1hcnkgPSBbXTtcbiAgcHVibGljIGxvY2FsU3ViUU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGtleUluZGV4OiBudW1iZXIgPSAwO1xuICAvL3B1YmxpYyBzcXVlczogc3RyaW5nO1xuICBwdWJsaWMgc2VsRGF0ZTogYW55ID0ge307XG4gIHB1YmxpYyBzZWxlY3REYXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcbiAgcHVibGljIGlubmVyaHRtbDogYW55O1xuICBwdWJsaWMgcG9zc2liaWxpdGllczogYW55O1xuICBwdWJsaWMgaW5uZXJodG1sMTogYW55O1xuICBwdWJsaWMgc3VtbWFyeURhdGEgPVtdO1xuIFxuICBwdWJsaWMgaG91cnM6IGFueVtdID0gW1xuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICBdO1xuIFxuICBwdWJsaWMgbWludXRlczogc3RyaW5nW10gPSBbXG4gICAgXCIwMFwiLFxuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICAgIFwiMTNcIixcbiAgICBcIjE0XCIsXG4gICAgXCIxNVwiLFxuICAgIFwiMTZcIixcbiAgICBcIjE3XCIsXG4gICAgXCIxOFwiLFxuICAgIFwiMTlcIixcbiAgICBcIjIwXCIsXG4gICAgXCIyMVwiLFxuICAgIFwiMjJcIixcbiAgICBcIjIzXCIsXG4gICAgXCIyNFwiLFxuICAgIFwiMjVcIixcbiAgICBcIjI2XCIsXG4gICAgXCIyN1wiLFxuICAgIFwiMjhcIixcbiAgICBcIjI5XCIsXG4gICAgXCIzMFwiLFxuICAgIFwiMzFcIixcbiAgICBcIjMyXCIsXG4gICAgXCIzM1wiLFxuICAgIFwiMzRcIixcbiAgICBcIjM1XCIsXG4gICAgXCIzNlwiLFxuICAgIFwiMzdcIixcbiAgICBcIjM4XCIsXG4gICAgXCIzOVwiLFxuICAgIFwiNDBcIixcbiAgICBcIjQxXCIsXG4gICAgXCI0MlwiLFxuICAgIFwiNDNcIixcbiAgICBcIjQ0XCIsXG4gICAgXCI0NVwiLFxuICAgIFwiNDZcIixcbiAgICBcIjQ3XCIsXG4gICAgXCI0OFwiLFxuICAgIFwiNDlcIixcbiAgICBcIjUwXCIsXG4gICAgXCI1MVwiLFxuICAgIFwiNTJcIixcbiAgICBcIjUzXCIsXG4gICAgXCI1NFwiLFxuICAgIFwiNTVcIixcbiAgICBcIjU2XCIsXG4gICAgXCI1N1wiLFxuICAgIFwiNThcIixcbiAgICBcIjU5XCIsXG4gIF07XG4gXG4gIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzZWxlY3RlZE1pbnV0ZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNlbGVjdGVkTWVyaWRpZW06IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWUxOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYm9va0ZsYWdBY2NlcHQ6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVjb3JkSWQ6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWVzdGlvbklkOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyVHlwZTogc3RyaW5nO1xuIFxuICBzdGFydF9kYXRlPzogYW55O1xuIFxuICAvL3NlYXJjaCBjb21wb25lbnRcbiAgcHVibGljIHRlbXBvQWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkUG9zdGFsY29kZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQcm92aW5jZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRDaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZEFyZWE6IHN0cmluZztcbiAgcHVibGljIGxvY2FsYWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIGFsbEFkZHJlc3MgOmFueSBbXSA9IFtdO1xuICBwdWJsaWMgUG9zdGFsQ29kZTpzdHJpbmc7XG4gIHB1YmxpYyBwbGFjZXM6IGFueVtdID0gW107XG4gIHB1YmxpYyBwcm92aW5jZTphbnlbXT1bXTtcbiBcbiAgLy8gUkVRLTAxIFBST0dSRVNTIEJBUlxuICBwdWJsaWMgcHJvZ3Jlc3NTdHlsZTogc3RyaW5nID0gXCIwJVwiO1xuICBwdWJsaWMgYW5zd2VyQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBpbmRleENvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgYWRkRmxhZzogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBteURhdGVQaWNrZXJPcHRpb25zOiBhbnkgPSB7fTtcbiAgaW5kaXZpZHVhbEJvb2tCdXR0b246IGJvb2xlYW47XG4gXG4gIHB1YmxpYyBhbGxJbnB1dFZhbHVlcyA9IFtdOyAvLyBIQSAwMkZFQjI0IFRvIHN0b3JlIGFsbCB0aGUgaW5wdXQgdmFsdWVzXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICAvL3ByaXZhdGUgZGJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcbiAgKSB7XG4gICAgLy8gVkQgMTBBdWcyNC1zcGlubmVyIGNoYW5nZXNcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlLWZhZGVcIjtcbiAgfVxuIFxuICAvLyBIQSAwMkZFQjI0IE9uIGRhdGUgY2hhbmdlIG5lZWQgdG8gc3RvcmUgdGhlIGNoYW5nZWQgdmFsdWUgc28gcGFzc2luZyB0aGUgcXVlc3Rpb25cbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgb25EYXRlQ2hhbmdlZChldmVudDogYW55LCBxdWVzOiBhbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG9uRGF0ZUNoYW5nZWQnKTtcbiAgICAvL3RvIGNoYW5nZSB0aGUgYm9yZGVyIGNvbG9yXG4gICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCIvXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCIvXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRUxTRSBvZiBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS50eXBlID09XCJCb29rXCIpe1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xuICAgIH1cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBodG1sRWxlbWVudFxuICAgICAgLml0ZW0oMClcbiAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlci1jb2xvcjojODdiZTFjO3dpZHRoOjEwMCVcIik7XG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgZXZlbnQpO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmRhdGUuZGF5ID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLnllYXIgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICAgdGhpcy5hbnN3ZXJNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5zZWxlY3REYXRlID0gJyt0aGlzLnNlbGVjdERhdGUpO1xuICAgIC8vIEhBIDAyRkVCMjQgQXNzaWduaW5nIGlucHV0IHZhbHVlIHRvIHF1ZXMgaW5wdXRcbiAgICBxdWVzLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGV2aWNlSW5mbyA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XG4gICAgICBpZiAocGFyYW1zWydpZCddKSB7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSB0cnVlO1xuICAgICAgfWVsc2UgaWYocGFyYW1zWydib29rbGV0SWQnXSl7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSBcIkFNXCI7XG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICAvL2NvbnNvbGUubG9nKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhZGRyZXNzJykpO1xuICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSl7XG4gICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ0xlbmd0aD0nK3RoaXMubG9jYWxhZGRyZXNzLmxlbmd0aCk7XG4gICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XG4gICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZih0aGlzLmRldmljZUluZm8ub3MgPT09ICdpT1MnKXtcbiAgICAgICAgbGV0IG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oXCJhZGRyZXNzREJcIik7XG4gICAgICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5ldyA9IGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0O1xuICAgICAgICAgIGxldCBkYk5ldyA9IHRhcmdldE5ldy5yZXN1bHQ7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdE5ldyA9IGRiTmV3LnRyYW5zYWN0aW9uKCdhZGRyZXNzVGFibGUnKVxuICAgICAgICAgICAgICAgIC5vYmplY3RTdG9yZSgnYWRkcmVzc1RhYmxlJylcbiAgICAgICAgICAgICAgICAuZ2V0KDEpO1xuICAgICAgICAgIHJlcXVlc3ROZXcub25zdWNjZXNzID0gKCk9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBWYXIgPSByZXF1ZXN0TmV3LnJlc3VsdDtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKHRlbXBWYXIud2hvbGVBZGRyZXNzU3RyaW5nKTtcbiAgICAgICAgICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFNLUzIwTUFSMjUgRW5zdXJlIHRoZSBjaGlsZCBjb21wb25lbnQgaXMgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2RcbiAgICAgLy8gQVAtMjVNQVIyNSBFbXB0eSBzdHJpbmcgcmVwbGFjZSBudWxsXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgICBsZXQgaW5wdXQ6IGFueTtcbiAgICAgICAgaWYocXVlcy50eXBlID09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09ICdSYWRpbycgfHwgcXVlcy50eXBlID09ICdMb2NhdGlvbicpe1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dFsndmFsdWVPYmonXSA9IHF1ZXMuaW5wdXQgfHwgbnVsbFxuICAgICAgICAgIGlucHV0WydyZWZlcmVuY2VGaWVsZCddID0gcXVlcy5yZWZlcmVuY2VGaWVsZCB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ2Zyb21RdWVzdGlvbklkJ10gPSBxdWVzLmlkIHx8IG51bGxcbiAgICAgICAgfSBlbHNlIGlmKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpe1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dFsndmFsdWUnXSA9IHF1ZXMuaW5wdXQgfHwgbnVsbFxuICAgICAgICB9IGVsc2UgaWYocXVlcy50eXBlID09ICdMaXN0Jyl7XG4gICAgICAgICAgaW5wdXQgPSB7fVxuICAgICAgICAgIHF1ZXNbJ3N1YlRleHQnXSA9IHR5cGVvZiBxdWVzPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IHF1ZXM/LnN1YlRleHQgOiBKU09OLnBhcnNlKHF1ZXNbJ3N1YlRleHQnXSk7XG4gICAgICAgICAgbGV0IGFwaU9iajogYW55ID0gcXVlcy5zdWJUZXh0O1xuICAgICAgICAgIGlucHV0Wyd2YWx1ZU9iaiddID0gcXVlcy5pbnB1dCB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ2ZpZWxkJ10gPSBhcGlPYmouZGVmYXVsdEZpZWxkIHx8IGFwaU9iai5maWVsZFswXSB8fCBhcGlPYmouZmllbGQgfHwgbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0ID0gcXVlcy5pbnB1dCB8fCBudWxsXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShpbnB1dCwgcXVlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuLy8gY2FsbCB3aGVuIGJvb2tJZCBjaGFuZ2VzXG4gIG5nT25DaGFuZ2VzKHNpbXBsZWNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZihzaW1wbGVjaGFuZ2VzWydxYklkJ10pe1xuICAgICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICB9XG4gIH1cbiAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIGRhdGVfVGltZU1hcCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkaG91ck1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICB0aGlzLnNlbGVjdGVkbWludXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gIH1cbiBcbiAgZGF5KCkge1xuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGRhdGVGb3JtYXQ6IFwiZGQubW0ueXl5eVwiLFxuICAgICAgc3VuSGlnaGxpZ2h0OiBmYWxzZSxcbiAgICAgIGRpc2FibGVEYXRlUmFuZ2VzOiBbXSxcbiAgICAgIHNob3dDbGVhckRhdGVCdG46IGZhbHNlLFxuICAgICAgZGlzYWJsZVNpbmNlOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVVudGlsOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgc2hvd1RvZGF5QnRuOiBmYWxzZSxcbiAgICAgIGRheUxhYmVsczoge1xuICAgICAgICBzdTogXCJEb21cIixcbiAgICAgICAgbW86IFwiTHVuXCIsXG4gICAgICAgIHR1OiBcIk1hclwiLFxuICAgICAgICB3ZTogXCJNacOpXCIsXG4gICAgICAgIHRoOiBcIkp1ZVwiLFxuICAgICAgICBmcjogXCJWaWVcIixcbiAgICAgICAgc2E6IFwiU8OhYlwiLFxuICAgICAgfSxcbiAgICAgIG1vbnRoTGFiZWxzOiB7XG4gICAgICAgIDE6IFwiRW5lXCIsXG4gICAgICAgIDI6IFwiRmViXCIsXG4gICAgICAgIDM6IFwiTWFyXCIsXG4gICAgICAgIDQ6IFwiQWJyXCIsXG4gICAgICAgIDU6IFwiTWF5b1wiLFxuICAgICAgICA2OiBcIkp1blwiLFxuICAgICAgICA3OiBcIkp1bFwiLFxuICAgICAgICA4OiBcIkFnb1wiLFxuICAgICAgICA5OiBcIlNlcFwiLFxuICAgICAgICAxMDogXCJPY3RcIixcbiAgICAgICAgMTE6IFwiTm92XCIsXG4gICAgICAgIDEyOiBcIkRpY1wiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gXG4gIGNoYW5nZSgpIHtcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8IHRoaXMuaW5wVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBodG1sRWxlbWVudFxuICAgICAgICAuaXRlbSgwKVxuICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlcjogMXB4IHNvbGlkIHJlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgLml0ZW0oMClcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiAxcHggc29saWQgIzg3YmUxYyA7d2lkdGg6MTAwJVwiKTtcbiAgICB9XG4gIH1cbiBcbiAgcHJvY2Vzc1FCKCkge1xuICAgIFxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcbiAgICAvL3RoaXMucWJJdGVtXG4gICAgY29uc29sZS5sb2codGhpcy5xYklkKTtcbiAgICAvL2NvbnNvbGUubG9nKCdWZXJzaW9uIGluIHByb2Nlc3MgaXMgOGJmMTFlZmE3ZjkxYTM5MWQ5NTdiZjZiNTA3OGVkYzdlNjU2YjY3YycpO1xuICAgIGlmICh0aGlzLnFiSWQpIHtcbiAgICAgIGlmICh0aGlzLnFiSWQubGVuZ3RoID09IDE4KSB7XG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uQm9vayh0aGlzLnFiSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBlbHNlIHBhcnQnKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgUXVlc3Rpb24gRGlyZWN0bHkgZm9yIHRlc3RpbmcnKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBEVFFVRVNUSU9OO1xuICAgICAgICB0aGlzLnFiSXRlbSA9IFRFU1RRQjtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiBcbiAgdHJpbUxhc3REdW1teShpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpbnB1dCA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5sZW5ndGggLSA2KSk7XG4gIH1cbiBcbiAgZ2V0UHJvcGVyVGltZShkZWY6IHN0cmluZywgaW5wdXQ6IHN0cmluZykge1xuICAgIHJldHVybiBpbnB1dCA9PT0gXCJcIiA/IGRlZiA6IGlucHV0O1xuICB9XG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAvL1N1bW1hcnkgUXVlc3Rpb24gQ2xpY2thYmxlIExvZ2ljXG4gIGhhbmRsZUVkaXRDbGljayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNraWNvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmFiSXRlbT8uc3RhdHVzID09IFwiUGVuZGluZ1wiKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih2YWx1ZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCcgaW4gc2lkZSBzdW1tYXJ5b3BlbicrIHRoaXMuc3VtbWFyeS5sZW5ndGgpO1xuIFxuICAgICAgLy9Bc3NpZ24gcXVlc3Rpb24gc3RhY2sgbGVuZ3RoIGZyb20gc3VtbWFyeSBwYXJ0XG4gICAgICB2YXIgYXJyYXlMZW5ndGggPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgdmFyIGxlbmd0aFZhbHVlID0gdGhpcy5xdWVzdGlvblN0YWNrLmluZGV4T2YodmFsdWUpO1xuIFxuICAgICAgZm9yIChsZXQgaSA9IGFycmF5TGVuZ3RoOyBpID4gbGVuZ3RoVmFsdWU7IGktLSkge1xuICAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgICAgdmFyIGFycmF5TGVuZ3RoMSA9IHRoaXMucXVlc3Rpb25OYW1lLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGFycmF5TGVuZ3RoMTsgaiA+IGxlbmd0aFZhbHVlOyBqLS0pIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICB0aGlzLnN1bW1hcnlEYXRhID0gW107XG4gICAgfVxuICB9XG4gXG4gIGhhbmRsZU5leHRDbGljaygpIHtcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmJhY2tCdXR0b25GbGFnID0gZmFsc2U7XG4gICAgdGhpcy5BbnN3ZXJTYXZlKCk7XG4gIH1cbiBcbiAgQW5zd2VyU2F2ZSgpe1xuICAgIC8vdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbklkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBxdWVzdGlvblR4dD0nJztcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0ubmV4dFRyYWNraW5nSWQpO1xuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgLy8gTVIgMzBKQU4yNCAtIEFkZGVkIENvbmRpdGlvbiBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yIChCb29rIFF1ZXN0aW9uIGFuZCBOb24tQm9vaylcbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9iamVjdHMgdG8gc3RvcmUgdGhlIHZhbHVlc1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0KXtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpOyAvLyBSZW1vdmUgSFRNTCB0YWdzIGZyb20gdGhlIHF1ZXN0aW9uVGV4dCB2YWx1ZVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcXVlc3Rpb25UZXh0ID0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xuICAgICAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgIH1cbiBcbiAgICAgICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcbiAgICAvLyB0aGlzLnNxdWVzICs9IGNRdWVzdGlvbi5xdWVzdGlvbiArICdAQCMjJCQnO1xuICAgIHZhciBxdWVzVmFsdWUgPSBjUXVlc3Rpb24ucXVlc3Rpb25UZXh0O1xuICAgIHZhciBtYWlsZm9ybWF0ID1cbiAgICAgIFwiXlteLl1bYS16QS1aMC05ISMkJSYnKistLz0/Xl9ge3x9fl0rW14uXUBbXi1dW2EtekEtWjAtOS4tXStbXi1dLlthLXpBLVpdezIsfSRcIjtcbiBcbiAgICAvLyBQcm9jZXNzIElucHV0c1xuICAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICAvLyBTYXZlIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpbiB0aGUgaW5wVmFsdWVcbiAgICAgIGZvciAodmFyIG92IG9mIHRoaXMub3B0aW9uVmFsdWVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jaGVja2VkKSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IG92LnZhbHVlICsgXCJAQCMjJCRcIjtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG92Lm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVtYWlsRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxwaGFudW1lcmljRmxhZykge1xuICAgICAgdmFyIGlzTm90VmFsaWRBY2NOdW0gPSB0aGlzLmlzTm90VmFsaWRBY2NOdW1iZXIodGhpcy5pbnBWYWx1ZSk7XG4gICAgICBpZiAoaXNOb3RWYWxpZEFjY051bSkge1xuICAgICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLm5leHRRdWVzdGlvbjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJGbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaXRlbSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcbiBcbiAgICAgICAgaWYoaXRlbS50eXBlID09IFwiRGF0ZVwiIHx8IGl0ZW0udHlwZSA9PSBcIlRpbWVcIikge1xuICAgICAgICAgIC8vdGhpcyBvbmVcbiAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgICAgICAgaWYoaXRlbS50eXBlID09IFwiRGF0ZVwiKXtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIHR5cGUgY29uZCA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKVxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0RGF0ZSlcbiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgaWYoaXRlbS50eXBlID09IFwiVGltZVwiKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRIb3VyK3RoaXMuc2VsZWN0ZWRNZXJpZGllbSt0aGlzLnNlbGVjdGVkTWludXRlKVxuIFxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBQTVwiO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfVxuIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSBzZWxlY3RIb3VyIGFuZCBzZWxlY3RNaW51dGUgY29uZGl0aW9uXG4gICAgICAgICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLnNlbERhdGUgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbnBWYWx1ZSB8fCAhdGhpcy5zZWxlY3REYXRlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG51bGwgY29uZGl0aW9uIG9mIGlucHV0Jyk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgICAgICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgICAgICAgLml0ZW0oMClcbiAgICAgICAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXItYm90dG9tOiAxcHggc29saWQgcmVkICFpbXBvcnRhbnQ7XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgfVxuICAgICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIHRleHQgZXJyb3IgY29uZGl0aW9uXG4gICAgICBpZihpdGVtLnR5cGU9PSBcIlRleHRcIil7XG4gICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmlucFZhbHVlID0gaXRlbS5pbnB1dDsgNjM0XG4gICAgICB9XG4gXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXRlbS5pc09wdGlvbmFsICYmXG4gICAgICAgIC8vICAoKGl0ZW0udHlwZSAhPSBcIkZpbGVcIiAmJiAhaXRlbS5pbnB1dCAmJiBpdGVtLnR5cGUgIT0gJ0RhdGUnICYmIGl0ZW0udHlwZSAhPSAnVGltZScpIHx8XG4gICAgICAgICAvLyAgIChpdGVtLnR5cGUgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMCkpXG4gICAgICAgICAoaXRlbS50eXBlID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiUmFkaW9cIikge1xuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJEcm9wZG93blwiKSB7XG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgICBpdGVtLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiRW1haWxcIikge1xuICAgICAgICAgIGlmIChpdGVtLmlucHV0ICYmIGl0ZW0uaW5wdXQubWF0Y2gobWFpbGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlJyArIHJlY29yZElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgICAgICB9IC8vaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlO1xuIFxuICAgICAgICB0aGlzLmlucFZhbHVlICs9IChpdGVtLmlucHV0ICE9IHVuZGVmaW5lZCA/IGl0ZW0uaW5wdXQgOiBcIlwiKSArIFwiQEAjIyQkXCI7XG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0ucXVlc3Rpb24gKyBcIkBAIyMkJFwiO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgYm9vazEnICsgdGhpcy5pbnBWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIHF1ZXN0aW9uVHh0ID0gcXVlc3Rpb25UeHQgPyB0aGlzLnRyaW1MYXN0RHVtbXkocXVlc3Rpb25UeHQpIDogcXVlc3Rpb25UeHQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSAnJztcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcbiAgICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpe1xuICAgICAgICB0aGlzLnN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yICh2YXIgbG9jYWxRdWVzIG9mIHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICAgICAgIGlmKCFsb2NhbFF1ZXMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgbG9jYWxRdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGlmKCF0aGlzLnN1YkFuc01hcC5oYXMobG9jYWxRdWVzLmlkKSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5pZCxsb2NhbFF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAgZWxzZScpXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLmlkLHRoaXMuc3ViQW5zTWFwLmdldChsb2NhbFF1ZXMuaWQpICsgJyQkQEAjIycrbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiBcbiAgICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZpbGUgdHdvJylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJBbnNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9ICh2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnKSArICdAQCMjJCQnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kcm9wZG93bkZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcbiAgICAgIC8vdGhpcyBvbmVcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjEyXCIsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjAwXCIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUubGVuZ3RoKTtcbiBcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImFucyA9PiBcIiArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICAgIHZhciBkYXRlMTogYW55ID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTEgPSBkYXRlMVswXS5zcGxpdChcIi9cIik7XG4gICAgICAgICAgZGF0ZTEgPSBbZGF0ZTFbMl0sIGRhdGUxWzFdLCBkYXRlMVswXV0uam9pbihcIi1cIik7XG4gICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMSlcbiAgICAgICAgICB2YXIgZGF0ZTI6IGFueSA9IHRoaXMuaW5zdXJhbmNlU3RhcnREYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGRhdGUyWzBdKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUyKTtcbiAgICAgICAgICBpZiAoZGF0ZTEgPCBkYXRlMikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9XG4gICAgICAgICAgICAgIFwiTm8gZXMgcG9zaWJsZSBkYXIgZGUgYWx0YSBsYSByZWNsYW1hY2nDs24gZGViaWRvIGEgcXVlIGxhIGZlY2hhIGRlbCBpbmNpZGVudGUgZXMgYW50ZXJpb3IgYSBsYSBmZWNoYSBkZSBjb250cmF0YWNpw7NuIGRlIGxhIHDDs2xpemFcIjtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMuZGF0ZUZsYWcpIHtcbiAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA1KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLnRpbWVGbGFnKSB7XG4gICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNyB8fCB0aGlzLnNlbERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ2ZvdXInKVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xuICAgICAgICAgICAgXCJAIyRcIiArXG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICBcIixcIjtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmlsZXNzcycgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wVmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiBcbiAgICAvLyBDaGVjayBmb3IgdGhlIGFuc3dlciBiZWZvcmUgc2F2aW5nIHRvIHRoZSBEQlxuICAgIGlmICghdGhpcy5xdWVzdGlvbkl0ZW0uaXNPcHRpb25hbCAmJiAhdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgLy8gU2hvdyBlcnJvciB0aGF0IHRoZSBxdWVzdGlvbiBtdXN0IGJlIGFuc3dlcmVkXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTYXZlIHRoZSBBbnN3ZXIgaW4gdGhlIERCXG4gICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICB0aGlzLmFuc3dlcldyYXAuYWJJZCA9IHRoaXMuYWJJdGVtLmlkO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzSWQgPSBjUXVlc3Rpb24uaWQ7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNWYWx1ZSA9IHF1ZXNWYWx1ZTtcbiAgICB0aGlzLmFuc3dlcldyYXAucVR5cCA9IHR5cDtcbiAgICAvLyBIQSAwMkZFQjI0IFRvIGRpc3BsYXkgdGhlIHZhbHVlcyBpbiBzdW1tYXJ5IHVzaW5nIHRoaXNcbiAgICB0aGlzLmFsbElucHV0VmFsdWVzID0gW107XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBpbnB1dFZhbHVlID0ge307XG4gICAgICBpbnB1dFZhbHVlWydJZCddID0gZWxlbWVudD8uaWQ7XG4gICAgICBpbnB1dFZhbHVlWyd0eXBlJ10gPSBlbGVtZW50Py50eXBlO1xuICAgICAgaW5wdXRWYWx1ZVsncmVmZXJlbmNlRmllbGQnXSA9IGVsZW1lbnQ/LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgaW5wdXRWYWx1ZVsncXVlc3Rpb25UZXh0J10gPSBlbGVtZW50Py5xdWVzdGlvblRleHQ7XG4gICAgICBpbnB1dFZhbHVlWydpbnB1dCddID0gZWxlbWVudD8uaW5wdXQ7XG4gICAgICBpbnB1dFZhbHVlID8gdGhpcy5hbGxJbnB1dFZhbHVlcy5wdXNoKGlucHV0VmFsdWUpIDogdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICB9KTtcbiAgICB0aGlzLmFuc3dlcldyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9IHRoaXMuaW5wVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5ncm91cE5hbWU7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuYW5zd2VyV3JhcC5xVHlwJyx0aGlzLmFuc3dlcldyYXAucVR5cCk7XG4gICBpZih0aGlzLmFuc3dlcldyYXAucVR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKXtcbiAgICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9ICdFUycrIHRoaXMuaW5wVmFsdWU7XG4gICAgICAvLyBjb25zb2xlLmxvZygnQmFuayBjb25kaXRpb24nKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSk7XG4gICAgfVxuICAgIC8qaWYgKGNRdWVzdGlvbi50eXBlID09ICdCb29rJyl7XG4gICAgZm9yICh2YXIgcWIgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKXtcbiAgICAgIC8vY29uc29sZS5sb2cocWIucXVlc3Rpb24rJyoqKionK1wiQEAjIyQkXCIpXG4gICAgfVxuICB9Ki9cbiAgICAvL3RoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLnF1ZXN0aW9uO1xuICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgICAvLyBlbWl0IHRoZSBjdXJyZW50IHF1ZXN0aW9uIHdpdGggaW5wdXQgdG8gcGFyZW50XG4gICAgbGV0IHF1ZXN0aW9uQW5zID0ge31cbiAgICBxdWVzdGlvbkFuc1sncXVlc3Rpb25EZXRhaWwnXSA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHF1ZXN0aW9uQW5zWydhbnN3ZXJCb29rRGV0YWlsJ10gPSB0aGlzLmFiSXRlbTtcbiAgICBjb25zb2xlLmxvZyhxdWVzdGlvbkFucyk7XG4gICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXN0aW9uQW5zKTtcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25JdGVtLS0+Jyk7XG4gICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gcXVlc3Rpb25UeHQgPyBxdWVzdGlvblR4dCA6IGNRdWVzdGlvbi5xdWVzdGlvbjtcbiAgICB0aGlzLnNhdmVBbnN3ZXIoKTtcbiAgfVxuICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgbmV4dCgpIHtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcbiAgICAvLyBJZiBubyBlcnJvciB0aGVuIG1vdmUgdG8gbmV4dCBzdGVwc1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiBcbiAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChjUXVlc3Rpb24uaWQpO1xuICAgIC8vICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKGNRdWVzdGlvbi5OYW1lKTtcbiBcbiAgICAvLyBDT05ESVRJT05BTCB2cyBPUFRJT05PTkxZICYgVU5DT05ESVRJT05BTFxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IGV2ZW4gaW4gZWxzZSBjb25kaXRpb25zIGJlbG93XG4gICAgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIGZvciAodmFyIGNPcHQgb2YgY1F1ZXN0aW9uLm9wdGlvbnMpIHtcbiAgICAgICAgLy8gUmFkaW8gLyBEYXRhXG4gICAgICAgIC8vY29uc29sZS5sb2coJ09wdGlvbiA9PiAnICsgY09wdC52YWx1ZSArICcgbWF0Y2hpbmcgd2l0aCAnICsgYW5zVmFsKTtcbiAgICAgICAgaWYgKGNPcHQudmFsdWUgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ01hdGNoIEZvdW5kIHVzaW5nICcgKyBjT3B0Lm5leHRRdWVzdGlvbik7XG4gICAgICAgICAgaWYoY09wdC5uZXh0UXVlc3Rpb24pe1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNPcHQubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb25kaXRpb25hbCByZWNvcmQgaWQnKyB0aGlzLnJlY29yZElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ291bGQgYmUgb2YgdHlwZSBEYXRhIGFuZCBleGlzdGluZyB2YWx1ZVxuICAgICAgaWYgKHRoaXMucmVjb3JkSWQgJiYgdHlwID09IFwiRGF0YVwiKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiT1BUSU9OT05MWVwiKSB7XG4gICAgICAvLyAgT1BUSU9OT05MWSBsb2dpY1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJVTkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIC8vVW5jb25kaXRpb25hbCAgbG9naWNcbiAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgdW5jb25kaXRpb25hbFwiKTtcbiAgICAgIC8vaW5zaWRlIEJvb2sgVHlwZVxuICAgICAgaWYgKGNRdWVzdGlvbi50eXBlID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5xdWVzdGlvbk51bWJlciAhPSc2Jykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGJvb2tcIik7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhvcHQudHlwZSk7XG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9b3B0MS5uZXh0UXVlc3Rpb24gfHwgY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdFbHNlJyt0aGlzLnJlY29yZElkKVxuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24udHlwZSA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPT0nNicgKSB7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpe1xuICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gb3B0MS5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiBcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIGVsc2UgdG8ga2VlcCB0aGUgYXNzaWdubWVudCBkZWZhdWx0XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgIH1cbiBcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICAvLyBDYWxsaW5nIHRoZSBwcm9ncmVzIGJhciB1cGRhdGUgZnVuY3Rpb25cbiAgICB0aGlzLmFuc3dlckNvdW50Kys7XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuIFxuIFxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuIFxuICAgIGlmICh0aGlzLnJlY29yZElkKSB7XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnJlY29yZElkKTtcbiAgICAgIHRoaXMucG9wID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3AgPSBmYWxzZTtcbiAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuIFxuICAgICAgdGhpcy5yZXNldEZsYWcodHlwKTtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gbnVsbDtcbiBcbiAgICAgIC8vIFNob3cgU3VtbWFyeVxuICAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uU3RhY2spIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgUXVlc3Rpb24gPT4gJyArIHEpO1xuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcbiAgICAgICAgaWYgKGFuc1dyYXApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdIYW5kbGluZyBBbnN3ZXIgZm9yICcgKyBhbnNXcmFwLnF1ZXNJZCArICcgb2YgdHlwZSAnICsgYW5zV3JhcC5xVHlwKTtcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xuICAgICAgICAgICAgdmFyIG5ld1N0ciA9ICcnO1xuICAgICAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIGFuc1dyYXAuYW5zVmFsdWUuc3BsaXQoJ0BAIyMkJCcpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xuICAgICAgICAgICAgICAvLyAgaWYoYW5zU3RyMS5pbmNsdWRlcygnYW5zd2VyU3RyaW5nJykpeyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgICAgICAgICAgLy8gICBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gYW5zU3RyMS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgLy8gIGFuc1N0cjEgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xuICAgICAgICAgICAgICAvLyAgfVxuICAgICAgICAgICAgICAgIGlmIChhbnNTdHIxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gYW5zU3RyMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSAnOyAnICsgYW5zU3RyMTsgIC8vY29tbWEoLCkgY2hhbmdlZCBhcyBzZW1pIGNvbG9uKDspIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSgsKVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyhhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgYXR0IG9mIHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KGFuc1dyYXAucXVlc0lkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5zdGFydHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDEsIG5ld1N0ci5sZW5ndGgpIDogKG5ld1N0ci5lbmRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygwLCBuZXdTdHIubGVuZ3RoIC0gMSkgOiBuZXdTdHIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5zV3JhcC5hbnNWYWx1ZSA9IG5ld1N0cjtcbiAgICAgICAgICAgIGFuc1dyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgQ2hlY2sgaWYgdGhlIHN1bW1hcnkgYWxyZWFkeSBjb250YWlucyBhbiBlbnRyeSBmb3IgdGhlIHNhbWUgcXVlc0lkXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdBbnNXcmFwID0gdGhpcy5zdW1tYXJ5LmZpbmQoaXRlbSA9PiBpdGVtLnF1ZXNJZCA9PT0gYW5zV3JhcC5xdWVzSWQpO1xuICAgICAgICAgIGlmIChleGlzdGluZ0Fuc1dyYXApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGV4aXN0cywgdXBkYXRlIHRoZSBhbnNWYWx1ZSBhbmQgbXlWYWxcbiAgICAgICAgICAgIGV4aXN0aW5nQW5zV3JhcC5hbnNWYWx1ZSA9IGFuc1dyYXAuYW5zVmFsdWU7XG4gICAgICAgICAgICBleGlzdGluZ0Fuc1dyYXAubXlWYWwgPSBhbnNXcmFwLm15VmFsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGV4aXN0LCBwdXNoIHRoZSBhbnNXcmFwIHRvIHRoZSBzdW1tYXJ5IGFycmF5XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnNXcmFwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5iYWNraWNvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiBcbiAgZ2V0VGV4dCh2YWx1ZSkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XG4gICAgKTtcbiAgfVxuIFxuICBoYW5kbGVCYWNrQ2xpY2soKSB7XG4gICAgdGhpcy5iYWNrID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5wb3AgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uYmFja1RyYWNraW5nSWQpO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgaWYoY1F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyID09JzEnKXtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5iYWNrKTtcbiAgICB9XG4gXG4gXG4gICAgdGhpcy5hbnN3ZXJDb3VudC0tO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICBpZiAodGhpcy5zdW1tYXJ5KSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdzdW1tYXJ5IHRydWUnKTtcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgIH1cbiAgICBpZih0aGlzLnN1bW1hcnlEYXRhKXtcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPVtdO1xuICAgIH1cbiBcbiAgICAvLyBSZWFkIHRoZSBwcmV2aW91cyBxdWVzdGlvbiBmcm9tIERCXG4gICAgLy8gVkQgZGlzYWJsZWRcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCkpO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgfVxuIFxuICBoYW5kbGVCYWNrQ2xpY2tOZXcoKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmVkaXQpO1xuICB9XG4gXG4gIC8vdXBkYXRpbmcgc3RhdHVzIG9uY2UgUSZBIGNvbXBsZXRlZC5cbiBcbiAgcHJpdmF0ZSB1cGRhdGVBbnN3ZXJCb29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJldXBkYXRlQUJcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXJCb29rJywnVXBkYXRlJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIGxldCBwYXJhID0ge1xuICAgICAgICBkYXRhVHlwZTogXCJBbnN3ZXJCb29rXCIsXG4gICAgICAgIG9wZXJhdGlvbjogXCJVcGRhdGVcIixcbiAgICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICAgIH1cbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEpXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIsXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXG4gICAgICApO1xuICAgIH1cbiAgfVxuIFxuICBwcml2YXRlIHN1Y2Nlc3N1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICBsZXQgZGF0YSA9IHJlc3BvbnNlO1xuICAgIGlmKGRhdGEpe1xuICAgICAgdGhpcy5oYW5kbGVTdWJtaXQuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuYWJJdGVtLnN0YXR1cyA9IFwiQ29tcGxldGVkXCI7XG4gICAgICB0aGlzLmRlbGV0ZUFuc3dlcnMoZGF0YS5BbnN3ZXJCb29rKVxuICAgIH1cbiAgfTtcbiBcbiAgLy8gVkQgZm9yIGRlbGV0ZSBhbnN3ZXJzXG4gIGRlbGV0ZUFuc3dlcnMoYW5zd2VyYm9vayl7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpe1xuICAgICAgaWYoYW5zd2VyYm9vayAmJiBhbnN3ZXJib29rLnN0YXR1cyA9PSAnQ29tcGxldGVkJyl7XG4gICAgICAgIGNvbnN0IGFuc0Jvb2tJZCA9IGFuc3dlcmJvb2suaWQ7XG4gICAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlckJvb2snLCdkZWxldGUnLGFuc0Jvb2tJZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGEpPT57XG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzRGVsZXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBWRCBmb3IgZGVsZXRlIGFuc3dlcnNcbiAgcHJpdmF0ZSBzdWNjZXNzRGVsZXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgaWYocmVzcG9uc2Uuc3RhdHVzID09ICdzdWNjZXNzJyl7XG4gICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UubWVzc2FnZSk7XG4gICAgfWVsc2Uge1xuICAgICBjb25zb2xlLmVycm9yKCdlcnJvcicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgIH1cbiB9XG5cbiBwcml2YXRlIGZhaWx1cmV1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnc3RhdHVzIGZhaWxlZCcpXG4gfTtcblxuIHByaXZhdGUgcmVhZFF1ZXN0aW9uQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXG4gICAgIC8vICk7XG4gICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uQm9vaycsJ3JlYWQnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAvLyBWRCBkaXNhYmxlZFxuICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayhKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBNUiAzMEpBTjI0IC0gUGFzc2luZyBmbGFnIGZyb20gTkdOWFRcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgbGV0IHBhcmExID0ge1xuICAgICAgZGF0YVR5cGU6IFwiUXVlc3Rpb25Cb29rXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgLy8gLCBKU09OLnN0cmluZ2lmeShwYXJhbU1hcClcbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTEpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcbiAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICApO1xuICAgfVxuIH1cbiBwcml2YXRlIHN1Y2Nlc3NSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWRCb29rJyk7XG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICBpZihyZXNwb25zZSAhPSBudWxsIHx8IHJlc3BvbnNlICE9IHVuZGVmaW5lZCl7XG4gICAgIHRoaXMucWJJdGVtID0gcmVzcG9uc2UucXVlc3Rpb25ib29rO1xuICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XG4gICAgIHRoaXMuaGFuZGxlQm9vay5lbWl0KHJlc3BvbnNlKTtcblxuICAgfVxuICAvLyBjb25zb2xlLmxvZygncmVhZGluZ1F1ZXN0aW9uIHVzaW5nICcgKyB0aGlzLnFiSXRlbSk7XG4gICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIlBlbmRpbmdcIikge1xuICAgICBpZiAoXG4gICAgICAgdGhpcy5hYkl0ZW0uYW5zd2VycyA9PSBudWxsIHx8XG4gICAgICAgdGhpcy5hYkl0ZW0uYW5zd2Vycy5sZW5ndGggPT0gMFxuICAgICApIHtcbiAgICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnFiSXRlbS5maXJzdFF1ZXN0aW9uKTtcbiAgICAgfSBlbHNlIHtcbiAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xuICAgICAgIHZhciBsYXN0UXVlc3Rpb25JZCA9IFwiXCI7XG5cbiAgICAgICBmb3IgKHZhciBhbnNPYmplY3Qgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgICAgbGFzdFF1ZXN0aW9uSWQgPSBhbnNPYmplY3QucXVlc0lkO1xuXG4gICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QucXVlc0lkKTtcblxuICAgICAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIHtcbiAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnNPYmplY3QucXVlc1ZhbHVlLFxuICAgICAgICAgICBhbnNWYWx1ZTogYW5zT2JqZWN0LmFuc1ZhbHVlLFxuICAgICAgICAgICBxdWVzSWQ6IGFuc09iamVjdC5xdWVzSWQsXG4gICAgICAgICAgIHFUeXA6IGFuc09iamVjdC5xVHlwLFxuICAgICAgICAgICBncm91cFRleHQ6YW5zT2JqZWN0Lmdyb3VwVGV4dCxcbiAgICAgICAgIH0pO1xuXG4gICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjaylcbiAgICAgICAgIGlmIChhbnNPYmplY3QucVR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICB2YXIgYXYxID0gYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAvLyAvL2NvbnNvbGUubG9nKFwiYm9vayBsb2dcIik7XG5cbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJib29raWRcIiArIGF2MVswXSk7XG4gICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIFtcbiAgICAgICAgICAgICB7IGF0dGFjaG1lbnROYW1lOiBhdjFbMV0sIGF0dGFjaG1lbnRJZDogYXYxWzBdIH0sXG4gICAgICAgICAgIF0pO1xuICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcbiAgICAgICAgIH0gZWxzZSBpZiAoYW5zT2JqZWN0LnFUeXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJpbnNpZGUgaWZcIik7XG4gICAgICAgICAgIHZhciBhdHRMaXN0O1xuICAgICAgICAgICB2YXIgYXR0O1xuICAgICAgICAgICBmb3IgKHZhciBhdHRWYXIgb2YgYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICAgICAgIHZhciBhdHRJZE5hbWUgPSBhdHRWYXIuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnROYW1lID0gYXR0SWROYW1lWzFdO1xuICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50SWQgPSBhdHRJZE5hbWVbMF07XG4gICAgICAgICAgICAgYXR0TGlzdC5wdXNoKGF0dCk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LnF1ZXNJZCwgYXR0TGlzdCk7XG4gICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgfVxuICAgICAgIH1cblxuICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcbiAgICAgICAvLyBSZWFkIHRoZSBsYXN0IGFuc3dlcmVkIHF1ZXN0aW9uXG4gICAgICAgdGhpcy5yZWFkUXVlc3Rpb24obGFzdFF1ZXN0aW9uSWQpO1xuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJDb21wbGV0ZWRcIikge1xuICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcbiAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXG4gICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XG4gICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xuICAgICBpZih0aGlzLnNlcnYgIT0gJ2FwaScpe1xuICAgICAgLy8gVkQgMzFOT1YyNCB3cmFwcGVyIGNoYW5nZXNcbiAgICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgICAgdmFyIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgIGlmIChhbnN3ZXIucVR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgICAgICB2YXIgZmlsZXMgPSBcIlwiO1xuICAgICAgICAgICB2YXIgZkluZGV4ID0gMDtcbiAgICAgICAgICAgdmFyIGZpbGVMaXN0ID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgZm9yICh2YXIgZmlsZUlkTmFtZSBvZiBmaWxlTGlzdCkge1xuICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVJZE5hbWUuc3BsaXQoXCJAIyRcIik7XG4gICAgICAgICAgICAgaWYgKGZJbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVOYW1lWzFdO1xuICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVzICsgXCIgLFwiICsgZmlsZU5hbWVbMV07XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgIGZJbmRleCsrO1xuICAgICAgICAgICB9XG5cbiAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICBncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgYW5zVmFsdWU6IGZpbGVzLFxuICAgICAgICAgICB9O1xuICAgICAgICAgLy8gIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIucVR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICAvKiAgdmFyIHF1ZXNObz0wO1xuICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnbGluZSAxMjIzJyk7XG4gICAgICAgICAgICAgZm9yICh2YXIgYnFBbnN3ZXJWYWx1ZSBvZiBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLnF1ZXN0aW9uVGV4dC5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAgIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgICAgLy8gZ3JvdXBUZXh0OmFuc3dlci5xdWVzdGlvblRleHQsXG4gICAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogIFwiJmx0O3AmZ3Q7XCIrIHF1ZXNWYWx1ZVtxdWVzTm9dK1wiJmx0O3AmZ3Q7XCIsXG4gICAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBicUFuc3dlclZhbHVlLFxuICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgIHF1ZXNObysrO1xuICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSovXG4gICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgdmFyIGFuc3dlcnZhbHVlcyA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd2YWx1ZScpXG4gICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLFxuICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VydmFsdWVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcbiAgICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXG4gICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLmFuc1ZhbHVlLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2YXIgYW5zMSA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0LFxuICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSxcbiAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLmFuc1ZhbHVlLFxuICAgICAgICAgICB9O1xuICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuXG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBmYWlsdXJlUmVhZEJvb2snKTtcbiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiB9O1xuXG4gcHJpdmF0ZSByZWFkQW5zd2VyYm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9IFwiYXBpXCIpIHtcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgIHRoaXMudGtuLFxuICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxuICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXG4gICAgICk7XG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgbGV0IHBhcmEyID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQW5zd2VyQm9va1wiLFxuICAgICAgb3BlcmF0aW9uOiBcInJlYWRcIixcbiAgICAgIHBhcmFtMTogdXVpZCxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4vLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEyKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgKTtcbiAgIH1cbiB9XG5cblxuIHByaXZhdGUgc3VjY2Vzc0Fuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIkNvbXBsZXRlZFwiKSB7XG4gICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5hbnN3ZXJzKSB7XG4gICAgICAgdmFyIGF2ID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgIHZhciBhbnN3ZXJzID0geyBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsIGFuc1ZhbHVlOiBhdiwgZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQgfTtcbiAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgIH1cbiAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUFuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcbiAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuIH07XG5cbiBwcml2YXRlIHJlYWRRdWVzdGlvbiA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkXG4gICAgIC8vICk7XG4gICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAoZGF0YSk9PntcbiAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgdGhpcy5zdWNjZXNzUmVhZChKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgfVxuICAgICAgIClcbiAgIH0gZWxzZSB7XG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgIC8vIC8vIFZEIDE1RkVCMjQgLSBtYWtlIGNyZWF0ZUFuc3dlckJvb2tGbGFnIGZhbHNlIG9ubHlcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMiA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIlF1ZXN0aW9uXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMildLFxuICAgICAgIHRoaXMuc3VjY2Vzc1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICApO1xuICAgfVxuIH1cblxuIHByaXZhdGUgc3VjY2Vzc1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgLy8gVkQgZGlzYWJsZWRcbiAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCcpO1xuICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgLy8gSEEgMDJGRUIyNCBGb3IgdGVzdGluZyBmb3IgdXNlZCB0aGlzIGFuZCBpbiBmdXR1cmUgaXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aXRoIHN0YXRpYyBkYXRhXG4gICAvLyB2YXIgYWIgPSBbJ2ZpcnN0JywnbGFzdCcsJzEyMycsJzEyLTEyLTIwMDAnLCcyMicsJ01hbGUnLCcxMiBjcm9zcyAxJywnRW1Db250YWN0JywnOTg3NjUnLCdBJywnU2luZ2xlJ107XG4gICAvLyBmb3IoY29uc3QgW2luZGV4LGl0ZW1dIG9mIHJlc3BvbnNlLnF1ZXN0aW9uLnN1YlF1ZXN0aW9ucy5lbnRyaWVzKCkpe1xuICAgLy8gICBpdGVtLmlucHV0ID0gYWJbaW5kZXhdO1xuICAgLy8gfVxuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xuXG4gICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0pIHtcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gICAgIHRoaXMucmVzZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xuICAgfVxuICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbjtcbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcblxuICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PT0gJ0FscGhhbnVtZXJpYycpe1xuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gdHJ1ZTtcbiAgIH1cblxuICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IHRoaXMucXVlc3Rpb25JdGVtLmlkO1xuICAgdGhpcy5oYW5kbGVQYWdlLmVtaXQodGhpcy5xdWVzdGlvbkl0ZW0udHJhY2tpbmdJZCk7XG4gICAvLyBIYW5kbGUgdGhlIHN1YlF1ZXN0aW9uIG9wdGlvbnNcbiAgIGlmIChyZXNwb25zZS5zcU9wdGlvbnMpIHtcbiAgICAgLy92YXIgbmV3UmVjb3JkcyA9IFtdO1xuICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucykge1xuICAgICAgIC8vY29uc29sZS5sb2cocS5OYW1lKTtcbiAgICAgICB2YXIgc3EgPSByZXNwb25zZS5zcU9wdGlvbnNbcS5pZF07XG4gICAgICAgaWYgKHNxKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdmb3VuZCBvcHRpb25zIGZvciBzdWJxdWVzdGlvbiAnICsgcS5OYW1lKTtcbiAgICAgICAgIGlmICghcS5vcHRpb25zKSB7XG4gICAgICAgICAgIHEub3B0aW9ucyA9IHNxLm9wdGlvbnM7XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9XG4gICB9XG4gICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xuICAgdGhpcy5pbm5lcmh0bWwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50XG4gICApO1xuICAgdGhpcy50cmFja0lkKCk7XG4gfTtcblxuIHRyYWNrSWQoKSB7XG4gICB2YXIgcXRyYWNrSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS50cmFja2luZ0lkO1xuICAgLy9jb25zb2xlLmxvZygndHJhY2tJZC1xdWVzdGlvbicrcXRyYWNrSWQpO1xuIH1cblxuIHByaXZhdGUgZmFpbHVyZVJlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgc2F2ZUFuc3dlciA9ICgpID0+IHtcbiAgIC8vIFNldCB0aGUgQW5zd2VyIE51bWJlciBiYXNlZCBvbiB0aGUgUXVlc3Rpb24gU3RhY2sgTGVuZ3RoXG4gICBpZiAodGhpcy5pbnBWYWx1ZSAhPSBcIi5cIikge1xuICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gbnVsbDtcbiAgIH1cbiAgIHRoaXMuYW5zd2VyV3JhcC5hbnNOdW1iZXIgPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoICsgMTtcblxuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkFuc3dlclwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyJywnY3JlYXRlJyxKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAoZGF0YSk9PntcbiAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzU2F2ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMyA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkFuc3dlclwiLFxuICAgICAgb3BlcmF0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTMpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgKTtcbiAgIH1cbiB9O1xuXG4gaHRtbERlY29kZShpbnB1dCkge1xuICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xuICAgcmV0dXJuIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XG4gfVxuXG4gcHJpdmF0ZSBzdWNjZXNzU2F2ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAvL3RoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KHJlc3BvbnNlLmFuc3dlci5xdWVzSWQsIHJlc3BvbnNlLmFuc3dlcik7XG4gICB9IGVsc2Uge1xuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPSByZXNwb25zZS5lcnJvci5lcnJvck1zZztcbiAgIH1cbiAgIGlmKCF0aGlzLmJhY2tCdXR0b25GbGFnKXtcbiAgICAgdGhpcy5uZXh0KCk7XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZVNhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlU2F2ZScpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgcHJvY2Vzc1F1ZXN0aW9uID0gKCkgPT4ge1xuICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvY2Vzc1F1ZXN0aW9uJyk7XG4gICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgdGhpcy5wb3AgPSB0cnVlO1xuXG4gICAvLyBpZighdGhpcy5iYWNrKXtcbiAgIC8vICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKVxuICAgLy8gfVxuXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgaWYgKCF0aGlzLmJhY2spIHtcbiAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpO1xuICAgICB9XG4gICAgIHRoaXMuYmFjayA9IGZhbHNlO1xuICAgICBpZiAodGhpcy5xdWVzdGlvbk5hbWVbMF0gPT09IHRoaXMucXVlc3Rpb25OYW1lWzFdKSB7XG4gICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgIH1cblxuICAgICB0aGlzLmN1cnJlbnROYW1lID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZTtcbiAgICAgdGhpcy5wYXRocXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uTmFtZS5pbmRleE9mKHRoaXMuY3VycmVudE5hbWUpO1xuICAgICB0aGlzLnBvc3NpYmlsaXRpZXMgPSB0aGlzLnFiSXRlbS5wb3NzaWJpbGl0aWVzO1xuICAgfVxuXG4gICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnM7XG4gICB0aGlzLmRheSgpO1xuICAgLy9jb25zb2xlLmxvZygncHJvY2Vzc2luZyBxdWVzdGlvbiAnICsgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSArICcgZXhpc3RpbmcgYW5zd2VycyBhcmUgJyArIHRoaXMuYW5zd2VyTWFwLnNpemUpOyAvLyA9PiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkl0ZW0pKTtcblxuICAgLy8gU2V0IHRoZSBGbGFncyB0byBzaG93IHJpZ2h0IGZpZWxkc1xuICAgdGhpcy5zZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xuICAgLy9jb25zb2xlLmxvZygnQWZ0ZXIgdGhlIHNldEZsYWcgbWV0aG9kIGR0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xuXG4gICAvLyBDaGVjayB0aGUgZXhpc3RpbmcgYW5zd2VyIGZyb20gYW5zd2VyTWFwXG4gICBpZiAodGhpcy5hbnN3ZXJNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImV4aXN0aW5nIGFuc3dlciBmb3VuZCBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZVwiKTtcbiAgICAgdmFyIGVBbnN3ZXIgPSB0aGlzLmFuc3dlck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIHRoZSBNYXBcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IGVBbnN3ZXIuYW5zVmFsdWU7XG4gICAgIC8vY29uc29sZS5sb2coJ2lucFZhbHVlIGhhcyBiZWVuIHNldCB0byAnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLmF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c01hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICB9XG4gICB9IGVsc2Uge1xuICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgcmVtb3ZpbmcgYXR0YWNobWVudCBhcnJheScpO1xuICAgICB0aGlzLmF0dGFjaG1lbnRzID0gW107XG4gICB9XG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcbiAgIGlmKHRoaXMuc3BsQ0NCYWNrQ2xpY2sgJiYgdGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLmluY2x1ZGVzKCdFUycpKXtcbiAgICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgaWYgY29uZCcpO1xuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gZmFsc2U7XG4gICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoJ0VTJywnJyk7XG4gICB9XG5cbiAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAvLyBTZXQgdGhlIE9wdGlvbnMgZm9yIENoZWNrYm94XG4gICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKTtcbiAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgZXhwZWN0ZWQgYm9va0ZsYWcgY29uZCcpO1xuICAgICAvL2NvbnNvbGUubG9nKCdkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcbi8vICBIQSAyMEZFQjI0IExhYmVsIEZpeFxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IGVsZW1lbnQucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICB9KTtcbiAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcbiAgIH0gZWxzZSBpZiAodGhpcy5saXN0RmxhZykge1xuICAgICAvLyBTZXQgdGhlIExvY2FsU3ViUXVlc3Rpb25zXG4gICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgbGlzdCBmbGFnJyk7XG4gICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgLy8gY29uc29sZS5sb2codGhpcy5hYkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICBpZighdGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSl7XG4gICAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcbiAgICAgfVxuICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZykge1xuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgdW5leHBlY3RlZCBkdEZsYWcgY29uZCcpO1xuICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IFwiXCI7XG4gICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBcIlwiO1xuICAgICB0aGlzLnNlbERhdGUgPSBcIlwiO1xuICAgICAvLyAyMDIxLTUtMTZUMDA6MDBcbiAgICAgaWYgKHRoaXMuZGF0ZU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgICAgdGhpcy5zZWxEYXRlID0gdGhpcy5kYXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRob3VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuc2VsZWN0ZWRob3VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnNlbGVjdGVkbWludXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgdGhpcy5ob3Vycy5wdXNoKFxuICAgICAgICAgXCIxM1wiLFxuICAgICAgICAgXCIxNFwiLFxuICAgICAgICAgXCIxNVwiLFxuICAgICAgICAgXCIxNlwiLFxuICAgICAgICAgXCIxN1wiLFxuICAgICAgICAgXCIxOFwiLFxuICAgICAgICAgXCIxOVwiLFxuICAgICAgICAgXCIyMFwiLFxuICAgICAgICAgXCIyMVwiLFxuICAgICAgICAgXCIyMlwiLFxuICAgICAgICAgXCIyM1wiLFxuICAgICAgICAgXCIwMFwiXG4gICAgICAgKTtcbiAgICAgfVxuICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgdGhpcy5ob3VycyA9IHRoaXMuaG91cnMuc2xpY2UoMCwgMTIpO1xuICAgICB9XG4gICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgdmFyIGR0VmFsID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIlRcIik7XG4gICAgICAgdmFyIGR0dmFsMCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdFZhbFswXTtcbiAgICAgICB0aGlzLmlucFZhbHVlID0gZHR2YWwwWzBdO1xuXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0dmFsMFsxXTtcbiAgICAgfVxuICAgICBpZiAoXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlQmFja3dhcmQgfHxcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVGb3J3YXJkXG4gICAgICkge1xuICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlRm9yd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgIH07XG4gICAgICAgfVxuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgdGhpcy5maWxlVUkoKTtcbiAgICAgLy8gbG9naWNcbiAgICAgdGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbiA9XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucz8uc3BsaXQoXCI7XCIpO1xuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24pO1xuICAgfVxuXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgfVxuIH07XG5cbiBzZXRGbGFnKHR5cCkge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHNldEZsYWcgZm9yICcgKyB0eXApO1xuXG4gICBpZiAodHlwKSB7XG4gICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xuICAgICAgIHRoaXMudGV4dEZsYWcgPSB0cnVlO1xuXG4gICAgICAgLy90aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XG4gICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYU51bWVyaWNcIikge1xuICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IHRydWU7XG4gICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICB0aGlzLmlucFZhbHVlPSdFUydcbiAgICAgICB9Ki9cbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgdGhpcy5lbWFpbEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcbiAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xuICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgdGhpcy5yYWRpb0ZsYWcgPSB0cnVlO1xuICAgICAgfSBcbiAgICAvLyAgIGVsc2UgaWYgKHR5cCA9PSBcIlJpY2hUZXh0QXJlYVwiKSB7XG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IHRydWU7XG4gICAgLy8gIH0gXG4gICAgIGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xuICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICB0aGlzLmJvb2tGbGFnID0gdHJ1ZTtcbiAgICAgfWVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgIHRoaXMubGlzdEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgVGltZSBjb25kJyk7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRGF0ZSBjb25kJyk7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICB9XG4gICB9XG4gfVxuXG4gcmVzZXRGbGFnKHR5cCkge1xuICAgaWYgKHR5cCkge1xuICAgICAvLyBTZXQgdGhlIEZsYWdzXG4gICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICB0aGlzLnRleHRGbGFnID0gZmFsc2U7XG4gICAgICAgLy90aGlzLm51bWJlckZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKSB7XG4gICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xuICAgICAgIHRoaXMuZW1haWxGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgdGhpcy5maWxlRmxhZyA9IGZhbHNlO1xuICAgICAgfSBcbiAgICAvLyAgIGVsc2UgaWYgKHR5cCA9PSBcIlJpY2hUZXh0QXJlYVwiKSB7XG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IGZhbHNlO1xuICAgIC8vICB9IFxuICAgICBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICB0aGlzLnRhRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICB0aGlzLnJhZGlvRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgIHRoaXMuYm9va0ZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICB0aGlzLmxpc3RGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgIH1cbiAgIH1cbiB9XG5cbiBzZXRPcHRpb25zKHJlY29yZHMpIHtcbiAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XG4gICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xuICAgICBvdi5pZCA9IG9wdC5pZDtcbiAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xuICAgICBvdi52YWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgb3YubmV4dFF1ZXN0aW9uID0gb3B0Lm5leHRRdWVzdGlvbjtcbiAgICAgb3YuY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgIGlmIChcbiAgICAgICB0aGlzLmlucFZhbHVlICYmXG4gICAgICAgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKS5pbmNsdWRlcyhvcHQudmFsdWUpXG4gICAgICkge1xuICAgICAgIG92LmNoZWNrZWQgPSB0cnVlO1xuICAgICB9XG5cbiAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XG4gICB9XG4gfVxuXG4gLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcbiAgIGNvbnNvbGUubG9nKCdpbnNpZGUgY2hpbGRFdmVudENhcHR1cmUgJyk7XG4gICBjb25zb2xlLmxvZyhldmVudCk7XG4gICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgLy8gSEEgMzEtSkFOLTI0IEFzc2lnbiB2YWx1ZXMgdG8gZHJvcGRvd24gcXVlc3Rpb25cbiAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmo7XG4gICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXG4gfVxuXG4vLyAgUlMgMDZKQU4yNVxuLy8gZm9yIHJpY2h0ZXh0XG4gaGFuZGxlUmljaFRleHRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAvLyB0aGlzLmlucFZhbHVlID0gdmFsdWU7XG4gIC8vIHRoaXMuY2xlYXJFcnJvcigpOyBcbiAgICBjb25zb2xlLmxvZygnUmljaCBUZXh0IENoYW5nZSBDYXB0dXJlZDonLCB2YWx1ZSk7XG59XG5cbiBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzZXRTdWJRdWVzdGlvbnMnKTtcbiAgIC8vIGNvbnNvbGUubG9nKHJlY29yZHMpO1xuICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XG4gICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICB2YXIgYUluZGV4ID0gMDtcbiAgICAgLy8gc2VhcmNoIGNoYW5nZWQgYXMgc2VtaSBjb2xvbiBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWFcbiAgICAgaWYgKCh0aGlzLmlucFZhbHVlLnNlYXJjaChcIjsgXCIpID09IC0xKSkge1xuICAgICAgLy8gY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpOyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyAnQEAjIyQkJyA7XG4gICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgcWFNYXAuc2V0KGFJbmRleCwgYW5zU3RyKTtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwIGZvciAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgIH1cbiAgICAgfSBlbHNlIHtcbiAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIjsgXCIpKSB7XG4gICAgICAgICBhSW5kZXgrKztcbiAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIHNldHRpbmcgdmFsdWVzIGZyb20gaW5wdmFsdWUgcWEgbWFwIGFyZScpO1xuICAgLy8gY29uc29sZS5sb2cocWFNYXApO1xuXG4gICBmb3IgKHZhciBxdWVzIG9mIHJlY29yZHMpIHtcbiAgICAgaWYgKHF1ZXMudHlwZSA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy52YWx1ZU5hbWUxKTtcbiAgICAgfVxuXG4gICAgIHZhciBhbnMgPSAnJztcbiAgICAgaWYgKHFhTWFwLmhhcyhxdWVzLnF1ZXN0aW9uTnVtYmVyKSkge1xuICAgICAgICAgcXVlcy5pbnB1dCA9IHFhTWFwLmdldChxdWVzLnF1ZXN0aW9uTnVtYmVyKTtcbiAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBmZXRjaGluZyBtYXAgdmFsdWVzJyk7XG4gICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgIGlmKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykgPiAwKXtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Fuc3dlciBzdXBwb3NlZCB0byBiZSB0cmltbWVkJyk7XG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgICBhbnMgPSBxdWVzLmlucHV0LnN1YnN0cmluZyhxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKzYscXVlcy5pbnB1dC5sZW5ndGgpO1xuICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhbnMpO1xuICAgICAgICAgICBxdWVzLmlucHV0ID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcoMCxxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKTtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICB9XG4gICAgICAgfVxuXG4gICAgIGlmICgocXVlcy50eXBlID09PSBcIkRhdGVcIikgJiYgKHF1ZXMuaXNEYXRlQmFja3dhcmQgfHwgcXVlcy5pc0RhdGVGb3J3YXJkKSkge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSBiYWNrd2FyZC9mb3J3YXJkIGNvbmQnKTtcbiAgICAgICBpZiAocXVlcy5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBpc0RhdGVCYWNrd2FyZCcpO1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBpZiAocXVlcy5pc0RhdGVGb3J3YXJkID09PSB0cnVlKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlzRGF0ZUZvcndhcmQnKTtcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XG4gICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyk7XG4gICAgIH1cblxuICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHF1ZXMpO1xuICAgICBmb3IodmFyIGk9MDsgaTx0aGlzLnN1YlF1ZXN0aW9ucy5sZW5ndGg7aSsrKXtcbiAgICAgICAvLyB0byBzaG93L2hpZGUgdGhlIGRlcGVuZGVudCBkcm9wZG93biBvbmx5IGZpZWxkIHVzaW5nIHRoZSBkcm9wRG93bk9ubHkgYm9vbGVhblxuICAgICAgIGlmKHRoaXMuc3ViUXVlc3Rpb25zW2ldLnNpemUgPT0gNCl7XG4gICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSB0cnVlO1xuICAgICAgIH1lbHNle1xuICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gZmFsc2U7XG4gICAgICAgfVxuICAgICB9XG4gICAgIGlmKGFucyAhPSAnJyl7XG4gICAgICAgZm9yKHZhciBhbiBvZiAoYW5zLnNwbGl0KCckJEBAIyMnKSkpe1xuICAgICAgICAgdmFyIHNRID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgICAgICBPYmplY3QuYXNzaWduKHNRLHF1ZXMpO1xuICAgICAgICAgc1EuaW5wdXQgPSBhbjtcbiAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2goc1EpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgaWYgKHRoaXMudmFsdWVOYW1lMSAhPSBudWxsICYmIHRoaXMudmFsdWVOYW1lMS5sZW5ndGggPiAwKSB7XG4gICAgIHRoaXMuYm9va0ZsYWdBY2NlcHQgPSB0aGlzLnZhbHVlTmFtZTEuc3BsaXQoXCI7XCIpO1xuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3ViUXVlc3Rpb25zKTtcbiAgIH1cbiAgIHRoaXMuc3RydWN0TG9jYWxTdWJRdWVzdGlvbihudWxsKTtcbiAgIC8vIEhBIDAyRkVCMjQgT24gRWRpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSB1c2lpbmcgdGhpc1xuICAgaWYodGhpcy5hbGxJbnB1dFZhbHVlcy5sZW5ndGggPiAwKXtcbiAgICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICBmb3IobGV0IHNpbmdsZUlucHV0IG9mIHRoaXMuYWxsSW5wdXRWYWx1ZXMpe1xuICAgICAgICAgaWYoZWxlbWVudC5pZCA9PSBzaW5nbGVJbnB1dC5pZCl7XG4gICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSBzaW5nbGVJbnB1dC5pbnB1dDtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH0pO1xuICAgfVxuIH1cblxuIG9wdGlvbkNoYW5nZShzZWxWYWx1ZSkge1xuICAgbGV0IHJhZGlvVHJhY2tpbmdJZDogc3RyaW5nID0gXCJcIjtcbiAgIGZvciAodmFyIG9wdCBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKSB7XG4gICAgIC8vY29uc29sZS5sb2coJ29wdGlvbkNoYW5nZSBUcmFja2luZ0lkJytvcHQudHJhY2tpbmdJZCk7XG4gICAgIGlmIChvcHQudmFsdWUgPT0gc2VsVmFsdWUpIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgaWYnK29wdC50cmFja2luZ0lkKVxuICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC50cmFja2luZ0lkO1xuICAgICB9XG4gICB9XG5cbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChyYWRpb1RyYWNraW5nSWQpO1xuICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XG5cbiAgIHRoaXMuaW5wVmFsdWUgPSBzZWxWYWx1ZTtcbiB9XG5cbiBjbGVhckVycm9yKCkge1xuICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbnVsbDtcbiAgIH1cbiB9XG5cbiBjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXNJZCkge1xuICAgcXVlc0lkLmVycm9yID0gbnVsbDtcbiB9XG5cbiBpbnB1dFZhbGlkYXRlKGUpIHtcbiAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7XG4gICAvLyBPbmx5IEFTQ0lJIGNoYXJhY3RlciBpbiB0aGF0IHJhbmdlIGFsbG93ZWRcbiAgIHZhciBBU0NJSUNvZGUgPSAoZS53aGljaCkgPyBlLndoaWNoIDogZS5rZXlDb2RlO1xuICAgaWYgKEFTQ0lJQ29kZSA+IDMxICYmIChBU0NJSUNvZGUgPCA0OCB8fCBBU0NJSUNvZGUgPiA1Nykpe1xuICAgICByZXR1cm4gZmFsc2U7XG4gICB9ZWxzZXtcbiAgICAgcmV0dXJuIHRydWU7XG4gICB9XG4gfVxuXG4gQ0NPbkNoYW5nZShpbnBWYWx1ZTogc3RyaW5nKSB7XG5cbiAgICAgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gNykge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cbiAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDEyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTcpIHtcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyMikge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cblxuIH1cblxuIGlzTm90VmFsaWRBY2NOdW1iZXIoczogc3RyaW5nKSB7XG4gICBzID0gcy5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xuICAgcyA9ICdFUycgKyBzO1xuICAgdmFyIGlzTm90VmFsaWRTdHIgPSBmYWxzZTtcbiAgIGlmIChzLmxlbmd0aCA9PSAyNCkge1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICBpZiAoaSA8PSAxICYmIC9bYS16QS1aXS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBjaGFyOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICB9IGVsc2UgaWYgKGkgPiAxICYmIC9bMC05XS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBudW1lcmljOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgY2hhclwiKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH0gZWxzZSB7XG4gICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgYWNjIG51bWJlclwiKTtcbiAgIH1cbiAgIHJldHVybiBpc05vdFZhbGlkU3RyO1xuIH1cblxuIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcbiAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKTtcbiAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICBzcS5lcnJvciA9IG51bGw7XG4gICB9XG4gfVxuXG4gdXBsb2FkRmlsZShldmVudCxxdWVzPzphbnkpIHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSB1cGxvYWQnKTtcbiAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgdGhpcy5maWxlVHlwZUluY29ycmVjdCA9IGZhbHNlO1xuICAgdmFyIGxvY2FsID0gdGhpcztcbiAgIGxvY2FsLmF0dGFjaG1lbnQgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAvLyBWYWxpZGF0ZSB0aGUgZmlsZSBleHRlbnNpb25cbiAgIC8vY29uc29sZS5sb2cobG9jYWwuYXR0YWNobWVudCk7XG4gICBsZXQgZmlsZU5hbWVXaXRoVHlwZTogc3RyaW5nID1cbiAgICAgbG9jYWwuYXR0YWNobWVudCAmJiBsb2NhbC5hdHRhY2htZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgIGlmIChcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBnXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBuZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wZGZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBlZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5oZWljXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBHXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBOR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QREZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBFR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5IRUlDXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUZcIilcbiAgICkge1xuICAgICBsb2NhbC5maWxlVHlwZUluY29ycmVjdCA9IHRydWU7XG4gICB9XG4gICAvLyBSZXR1cm4gd2hlbiB0aGUgZmlsZSB0eXBlIGlzIGluY29ycmVjdFxuICAgaWYgKGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0KSB7XG4gICAgIHJldHVybjtcbiAgIH1cbiAgIGxldCBmaWxlQ29udGVudDogYW55O1xuICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgIGZpbGVDb250ZW50ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQgPSBsb2NhbC5hdHRhY2htZW50LnNpemUgPiAzMjQyODgwOyAvL1ZhbGlkYXRpbmcgZmlsZSBzaXplXG4gICAgIC8vIFVwbG9hZCB0aGUgZmlsZSB0byBTYWxlc2ZvcmNlIHdoZW4gdGhlIGxpbWl0IGlzIHdpdGhpbiByYW5nZVxuICAgICBpZiAoIWxvY2FsLmZpbGVFeGNlZWRlZExpbWl0KSB7XG4gICAgICAgbGV0IGZpbGVXcmFwcGVyID0gbmV3IEF0dGFjaG1lbnRXcmFwcGVyKCk7XG4gICAgICAgZmlsZVdyYXBwZXIucGFyZW50SWQgPSBsb2NhbC5hYkl0ZW0uaWQ7XG4gICAgICAgZmlsZVdyYXBwZXIuZmlsZU5hbWUgPSBsb2NhbC5hdHRhY2htZW50Lm5hbWU7XG4gICAgICAgZmlsZVdyYXBwZXIuZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDtcbiAgICAgICBsb2NhbC5jcmVhdGVBdHRhY2htZW50KGZpbGVXcmFwcGVyKTtcbiAgICAgICBxdWVzLmlucHV0ID0gZmlsZVdyYXBwZXIuZmlsZU5hbWU7XG4gICAgIH1cbiAgIH07XG4gICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xuIH1cblxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGxldCBjcmVhdGVkQXR0YWNobWVudDogQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KFxuICAgICByZXNwb25zZS5hdHRhY2htZW50SWQsXG4gICAgIHJlc3BvbnNlLmF0dGFjaG1lbnROYW1lLFxuICAgICB0aGlzLmF0dGFjaG1lbnQubGFzdE1vZGlmaWVkRGF0ZVxuICAgKTtcbiAgIHRoaXMuYXR0YWNobWVudHMucHVzaChjcmVhdGVkQXR0YWNobWVudCk7XG4gICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5hdHRhY2htZW50cyk7XG4gfTtcblxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuICAgICBpZiAodGhpcy5hdHRhY2htZW50c1tpXS5hdHRhY2htZW50SWQgPT09IHRoaXMuYXR0YWNobWVudElkKSB7XG4gICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgIH1cbiAgIH1cbiB9O1xuXG4gcHJpdmF0ZSBmYWlsdXJlQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlJyk7XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZScpO1xuIH07XG5cbiBoYW5kbGVTdWJtaXRDbGljaygpIHtcbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5zdWJtaXRUcmFja2luZ0lkKTtcbiAgIHRoaXMudXBkYXRlQW5zd2VyQm9vayh0aGlzLmFiSXRlbS5pZCk7XG4gfVxuXG4gaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uY2FuY2VsVHJhY2tpbmdJZCk7XG4gfVxuXG4gcHJpdmF0ZSBjcmVhdGVBdHRhY2htZW50ID0gKGZpbGVXcmFwcGVyOiBhbnkpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJBdHRhY2htZW50XCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKV0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgIC8vICk7XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdjcmVhdGUnLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlKGVycm9yKTtcbiAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgIH1cbiAgICAgKVxuICAgfSBlbHNlIHtcbiAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgbGV0IHBhcmEzID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQXR0YWNobWVudFwiLFxuICAgICAgb3BlcmF0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEzKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgICk7XG4gICB9XG4gfVxuXG4gZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50SWQ6IHN0cmluZykge1xuICAgdGhpcy5hdHRhY2htZW50SWQgPSBhdHRhY2htZW50SWQ7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJkZWxldGVBdHRhY2htZW50XCIpO1xuICAgdGhpcy5kZWxldGVTRkF0dGFjaG1lbnQoYXR0YWNobWVudElkKTtcbiB9XG5cbiBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQXR0YWNobWVudCcsJ2RlbGV0ZScsZmlsZUlkICxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgKGRhdGEpPT57XG4gICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGUoZXJyb3IpO1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhNCA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkF0dGFjaG1lbnRcIixcbiAgICAgIG9wZXJhdGlvbjogXCJkZWxldGVcIixcbiAgICAgIHBhcmFtMTogZmlsZUlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtmaWxlSWQsSlNPTi5zdHJpbmdpZnkocGFyYTQpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgKTtcbiAgIH1cbiB9XG5cbiBnZXRGaWxlTmFtZShmaWxlTmFtZXdpdGhJZGFuZFR5cGUpIHtcbiAgIC8vdHJ1bmNhdGUgZmlsZSBwYXRoXG4gICB2YXIgZmlsZU5hbWVXaXRoVHlwZSA9IGZpbGVOYW1ld2l0aElkYW5kVHlwZS5zdWJzdHIoXG4gICAgIGZpbGVOYW1ld2l0aElkYW5kVHlwZS5pbmRleE9mKFwiOjo6OlwiKSArIDRcbiAgICk7XG4gICByZXR1cm4gZmlsZU5hbWVXaXRoVHlwZTsgLy9maWxlTmFtZVdpdGhUeXBlLnJlcGxhY2UoL14oLiooXFwvfFxcXFwpKSguKykkLywgJyQzJyk7XG4gfVxuIGZpbGVVSSgpIHtcbiAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgfVxuIH1cblxuIC8vVXBkYXRlIGZ1bmN0aW9uIGZvciBjYXRlZ29yaXphdGlvblxuIC8vIHN0ZXBwZXJDYXRlZygpIHtcbiAvLyAgIHRoaXMuZmlyc3RGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gLy8gICAgIGZpcnN0Q3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuIC8vICAgfSk7XG4gLy8gICB0aGlzLnNlY29uZEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcbiAvLyAgICAgc2Vjb25kQ3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuIC8vICAgfSk7XG5cbiAvLyB9XG5cbiAvLyBVcGRhdGUgRnVuY3Rpb24gZm9yIHRoZSBQcm9ncmVzcyBCYXJcbiB1cGRhdGVQcm9ncmVzcygpIHtcbiAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0JhciA9PT0gdHJ1ZSkge1xuICAgICBsZXQgaiA9IFtdO1xuICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zc2liaWxpdGllcy50b3RhbDsgaSsrKSB7XG4gICAgICAgdmFyIHBhdGhwb3NzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbaV0ucXVlc3Rpb25zKTtcbiAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XG4gICAgICAgICBqLnB1c2goaSk7XG4gICAgICAgICB0aGlzLmNoZWNrID0gdHJ1ZTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy5jaGVjayA9IGZhbHNlO1xuICAgICAgIH1cbiAgICAgfVxuICAgICBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICB0aGlzLmNvdW50ID0galswXTtcbiAgICAgfVxuICAgICBpZiAoai5sZW5ndGggPiAxKSB7XG4gICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcbiAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09PSAxKSB7XG4gICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgIDkwICpcbiAgICAgICAgICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC9cbiAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcbiAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICB9XG4gICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcbiAgIH1cbiB9XG5cbiB0b3duTmFtZShhcmVhKSB7XG4gICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBhcmVhLnRvd247XG4gICAvL2NvbnNvbGUubG9nKCd0aGlzIHZhbHVlPScrdGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiB9XG5cbiBnZXRUb3duTG9jYWwoKSB7XG4gICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmxvY2FsYWRkcmVzcykge1xuICAgICAgIGlmIChcbiAgICAgICAgIHZhbC50b3duLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICApIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxuICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuIH1cblxuIGNsZWFyTGlzdCgpIHtcbiAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgfSwgNTAwKTtcbiB9XG5cbiBzZXRTZWFyY2hMaXN0V2lkdGgoKSB7XG4gICAvL3RvIHJlc2l6ZSBzZWFyY2ggbGlzdCBiYXNlZCBvbiB0aGUgc2NyZWVuIHNpemVcbiAgIGNvbnN0IHNlYXJjaEJveFdpZHRoID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXV0b2NvbXBsZXRlLWlucHV0XCIpLm9mZnNldFdpZHRoO1xuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLndpZHRoID0gc2VhcmNoQm94V2lkdGggKyBcInB4XCI7XG4gfVxuXG4gICBnZXRDb2RlKCl7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMuYWxsQWRkcmVzcykge1xuICAgICAgICAgaWYgKHZhbC56aXBDb2RlLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGgpID09IHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKSB7XG4gICAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcbiAgICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcbiAgICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cbiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XG4gICB9XG4gICBnZXRQb3N0YWxjb2RlKHZhbHVlKXtcbiAgICB0aGlzLnBsYWNlcz1bXTtcbiAgICB0aGlzLnByb3ZpbmNlPVtdO1xuICAgICB2YXIgcHJvdmluY2U7XG4gICAgIHZhciB0b3duO1xuICAgICB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9IHZhbHVlLnppcENvZGU7XG4gICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlLmNvdW50cnk7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzPVtdO1xuXG5cbiAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xuICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID09IHZhbC56aXBDb2RlICl7XG4gICAgICAgICB0aGlzLnBsYWNlcy5wdXNoKHZhbCk7XG4gICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbC5jb3VudHJ5O1xuICAgICAgICAgcHJvdmluY2UgPSB2YWwucHJvdmluY2VcbiAgICAgICAgIHRvd24gPSB2YWwudG93bjtcbiAgICAgICB9XG4gICAgIH1cbiAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xuXG4gICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlID1wcm92aW5jZTtcbiAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9IHRvd247XG4gICAgIH1lbHNlIGlmKHRoaXMucGxhY2VzLmxlbmd0aCA+MSB8fCB0aGlzLnBsYWNlcy5sZW5ndGggPT0wKXtcblxuICAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPScnO1xuICAgICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlPScnO1xuICAgICB9XG4gICB9XG4gICBjbG9zZURyb3Bkb3duKCkge1xuICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPT0gNSl7XG4gICAgICAgdGhpcy5nZXRQb3N0YWxjb2RlKHt6aXBDb2RlOnRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlfSk7XG4gICAgIH1cblxuICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0TGlzdCcpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgIH0sIDUwMCk7XG4gIH1cblxuXG4gIC8vUGx1cyBidXR0b24gaW1wbGVtZW50YXRpb24uXG4gIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24ocXVlczogTG9jYWxRdWVzdGlvbil7XG4gICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24nKTtcbiAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDsgaSsrKXtcbiAgICAgICB2YXIgbG9jYWxTdWJRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlkID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaWQ7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5hbWUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OYW1lO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvbiA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvblRleHQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvblRleHQ7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnR5cGUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS50eXBlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi50aXRsZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnRpdGxlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5zdWJUaXRsZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnN1YlRpdGxlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pc09wdGlvbmFsID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaXNPcHRpb25hbDtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uZXJyb3JNZXNzYWdlID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uZXJyb3JNZXNzYWdlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5uZXh0UXVlc3Rpb24gPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5uZXh0UXVlc3Rpb247XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmdyb3VwTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmdyb3VwTmFtZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvbk51bWJlcjtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uYWxsb3dlZEZpbGVFeHRlbnNpb25zID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pZCArIGk7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlucHV0ID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaW5wdXQ7XG4gICAgICAgICB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zLnB1c2gobG9jYWxTdWJRdWVzdGlvbik7XG4gICAgIH1cbiAvLyBjb25zb2xlLmxvZygnZmluYWwgbG9jYWwgc3ViIHF1ZXN0aW9ucycpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyk7XG4gdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyA9IFtdO1xuIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBrZXkgbG9jYWxTdWJRTWFwIG1hcCcpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcbiB9XG5cbiBhZGRJbnB1dEJveChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbiwgaW5kZXg6IG51bWJlcil7XG4gICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb24pO1xuICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xuICAgaWYodGhpcy5rZXlJbmRleCA9PSBpbmRleCl7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcoaW5kZXgrMSkpO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICB9ZWxzZXtcbiAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuaWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcbiAgIH1cbiAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcblxuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgLy9jb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XG4gfVxuXG4gcmVtb3ZlQWRkcmVzcyhxdWVzVW5pcXVlSWQ6IHN0cmluZywgcU5hbWU6IHN0cmluZykge1xuICAgLy9jb25zb2xlLmxvZyhxdWVzVW5pcXVlSWQpXG4gICB2YXIgdmFsID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgIHZhciBrZXlpbmRleCA9IDA7XG5cbiAgIGZvcihsZXQgaT0wOyBpPHZhbC5sZW5ndGg7IGkrKyl7XG4gICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcbiAgICAgICBrZXlpbmRleCsrO1xuICAgICB9XG4gICB9XG5cbiAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkgJiYga2V5aW5kZXggPjEpe1xuICAgICB2YXIgcmVvcmRlciA9IHZhbC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udW5pcXVlU3ViUUlkICE9PSBxdWVzVW5pcXVlSWQpXG4gICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCxyZW9yZGVyKTtcbiAgICAga2V5aW5kZXgtLTtcbiAgIH1cbiB9XG5cbiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhpZDogU3RyaW5nKXtcbiAgIHJldHVybiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQoaWQpO1xuIH1cblxuIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXG5BZGQocXVlc3Rpb246IExvY2FsUXVlc3Rpb24pe1xuICAgdGhpcy5hZGRGbGFnID0gIGZhbHNlO1xuICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgdmFyIGluZGV4ICA9IGFycmEubGVuZ3RoO1xuICAgdmFyIGEgPSBhcnJhLnNsaWNlKC0xKS5wb3AoKTtcbiAgIHRoaXMuaW5kZXhDb3VudCAgPSBhLnF1ZXN0aW9uTnVtYmVyO1xuXG4gICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5kZXhDb3VudCA7IGkrKykge1xuICAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb25baV0pO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgIGFycmEuc3BsaWNlKGluZGV4Kyh0aGlzLmluZGV4Q291bnQtMSksIDAsIHF1ZXMpO1xuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgfVxuICAgdGhpcy5hZGRGbGFnID0gdHJ1ZTtcbiB9XG5cbiBoYW5kbGVMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uOiBhbnkscXVlczphbnkpIHtcbiAgIHF1ZXMuaW5wdXQgPSBsb2NhdGlvbjtcbiB9XG5cbiBzZWxlY3RlZElucHV0KGlucHV0OmFueSAscXVlczphbnkpe1xuICAgcXVlcy5pbnB1dCA9IGlucHV0O1xuIH1cblxuIGhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UodmFsdWUgOnN0cmluZyl7XG4gICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGV4dC1hcmVhIHRleHQ6JywgdmFsdWUpO1xuIH1cbiBnZXREYXRhKGRhdGE6YW55KXtcbiAgY29uc29sZS5sb2coJ3RhYmxlIGRhdGEnLGRhdGEpO1xuIH1cblxuIGRpc3BsYXlEYXRlKGRhdGVTZWxlY3RlZDogYW55LHF1ZXM6YW55KXtcbiAgIC8vIFNLUzE0SlVOMjUgUGFyc2UgdGhlIGRhdGUgc3RyaW5nIHVzaW5nIG5hdGl2ZSBKYXZhU2NyaXAgYW5kIGFzc2lnbiBpdCB0byB0aGlzLnNlbGVjdGVkRGF0ZVxuICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTZWxlY3RlZC52YWx1ZSk7XG4gICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7cGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpfS0ke3BhZChkYXRlLmdldERhdGUoKSl9IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhZChkYXRlLmdldEhvdXJzKCkpfToke3BhZChkYXRlLmdldE1pbnV0ZXMoKSl9OiR7cGFkKGRhdGUuZ2V0U2Vjb25kcygpKX1gO1xuICAgcXVlcy5pbnB1dCA9IGZvcm1hdHRlZERhdGU7XG4gICAgfVxuXG4gZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XG4gICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gfVxuXG4gZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuIH1cbiAvLyBTS1MxMUpVTjI1cmVtb3ZlIHRoZSBzcGVjaWFsIGNoYXJlY3RlcnMgYW5kIHRhZ3MgXG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OiBzdHJpbmcpIHtcbiAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xuICAgIHJldHVybiB1cGRhdGVkVGV4dDtcbiAgfVxufSIsIjwhLS0gY3VzdG9tIGxvYWRlciAtLT5cbjwhLS0gQmFjayBQcm9jZXNzaW5nIC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiYmFja2ljb24gPT0gZmFsc2VcIiA+XG4gIDxkaXYgY2xhc3M9XCJiYWNraWNvblwiID5cbiAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiIFtjbGFzc109XCIgYWJJdGVtPy5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcgPyAnc3VtbWFyeS12b2x2ZXInOidhcHAtYmFjazEnXCI+XG4gICAgPGltZyBjbGFzcz1cImljb24tYXJyb3ctYmFja1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1hcnJvdy1iYWNrLnBuZ1wiIGFsdD1cIlNjcm9sbCBkb3duXCI+IHt7IHFiSXRlbT8uYmFjayB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiAtLT5cblxuPCEtLSBRdWVzdGlvbiBIYW5sZGluZyAtLT5cbjwhLS0gVkQgcmVtb3ZlZCB1bndhbnRlZCBjb25kaXRpb24gLS0+XG48IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG48ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtXCIgY2xhc3M9XCJxdWVzdGlvbmRpdjEgcGFkZC1ib3R0b21cIj5cbiAgPCEtLSBQcm9ncmVzcyBCYXIgJiBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50aXRsZVwiPlxuICAgIDxoMT57eyBxdWVzdGlvbkl0ZW0/LnRpdGxlIH19PC9oMT5cbiAgICA8ZGl2Pnt7IHF1ZXN0aW9uSXRlbT8uc3ViVGl0bGUgfX08L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQcm9ncmVzcyAmIEdyb3VwaW5nIC0tPlxuICA8ZGl2PlxuICAgIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgICA8IS0tIFNob3cgdGhlIEdyb3VwL01vZHVsZSByZWxhdGVkIHRvIHRoZSBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmdyb3VwTmFtZSAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHF1ZXN0aW9uYWxpZ246ICFxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHQtbGFyZ2VUaXRsZVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtZm9udDYgbXl0LXRleHQzXCI+XG4gICAgICAgICAge3sgcXVlc3Rpb25JdGVtPy5ncm91cE5hbWUgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5zdWJUZXh0ICE9ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQ1IG15dC10ZXh0MVwiPnt7cXVlc3Rpb25JdGVtPy5zdWJUZXh0fX08L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5zdWJUZXh0ID09PSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250MTAgbXl0LXRleHQyXCI+e3txdWVzdGlvbkl0ZW0/LnN1YlRleHR9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDwhLS0gUXVlc3Rpb24gSGFuZGxpbmcgLS0+XG4gICAgPCEtLSBWRCAxMEF1ZzI0LSBxdWVzdGlvbiBubyAtLT5cbiAgPGRpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnF1ZXN0aW9uVGV4dCAmJiBxdWVzdGlvbkl0ZW0uc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2VcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgICA8c3Bhbj57e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25OdW1iZXJ9fS48L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cIm54dC1sYWJlbFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFRpdGxlIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5pc1RpdGxlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgIT0gJ0Jvb2snICYmIHF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlciE9JzYnICYmIHF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlciE9JzknXCI+IFxuICAgICAgICA8aDMgY2xhc3M9XCJxdWVzdGlvbmFsaWduICBteXQtZm9udDMgbXl0LWFsaWduIG15dC10ZXh0NFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSB1bndhbnRlZCBzdHlsaW5nIGNsYXNzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxdWVzdGlvbkl0ZW0uaXNUaXRsZVwiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2hlYWRlci1zdHlsZScgOiAncXVlc3Rpb24tZi1zaXplJ1wiPlxuICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCIgPlxuICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgPT0gJ0Jvb2snXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyPT0nNidcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTMyMVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIFxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50eXBlID09ICdGaWxlJyBcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25OdW1iZXI9PSc5J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzQ1XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cblxuICA8IS0tIEFkZGl0aW9uYWwgSW5mbyAtLT5cbiAgPCEtLSBUaGUgYmVsb3cgY29kZSBjYW4gYmUgd3JpdHRlbiBlZmZlY3RpdmVseSBuZXN0ZWQgbmdJZiBmb3IgUmljaCBUZXh0ICYgT3RoZXIgb253IGZvciBQcm9ncmVzcyBCYXIgLS0+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50ICYmIHFiSXRlbS5wcm9ncmVzc0JhclwiID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm54dC1hZGRpdGlvbmFsIFwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmFkZGl0aW9uYWxSaWNoQ29udGVudCAmJiAhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnQgcXVlcy1hbGVydDFcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvZGl2XCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEcm9wZG93bi0tPlxuICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25GbGFnXCIgPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJueHRkcm9wZG93blwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnZHQtbGluZSBueHQtbXl0LWFsaWduMyBueHQtbXl0LWFsaWduMiBkcERvd24gbnh0LWRyb3Bib3ggZG93bjEgbXl0LWRyb3Bib3ggbXl0LWJvcmRlci1yIG15dC1mb250MSc6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgJ2N1c3RvbS1zZWxlY3QnOiAhcWJJdGVtPy5wcm9ncmVzc0JhclxuICAgICAgICB9XCIgY2xhc3M9XCJtci1zbS0yIGRkLWhlaWdodCBueHQtZHJvcGJveCBcIiAgaWQ9XCJkcm9wZG93blwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiAoY2hhbmdlKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCA/ICcjZmZmJyA6ICcnXG4gICAgICAgIH19XCIgc3R5bGUuY29sb3I9XCJ7eyBxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLm9wdGlvbnNcIiBjbGFzcz1cIm9wdGlvblwiIHZhbHVlPVwie3sgb3B0LnZhbHVlIH19XCI+XG4gICAgICAgICAge3sgb3B0LnZhbHVlIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiLlwiIGRpc2FibGVkIGhpZGRlbj57eydwbGVhc2VNYWtlQ2hvaWNlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tVkQgUmFkaW8gdXBkYXRlIC0tPlxuICA8ZGl2ICpuZ0lmPVwicmFkaW9GbGFnIHx8IGRhdGFGbGFnXCIgY2xhc3M9XCJcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRoaXMucXVlc3Rpb25JdGVtLmVycm9yXCIgY2xhc3M9XCJueHQtZXJyb3ItbXNnXCI+IHt7IHF1ZXN0aW9uSXRlbT8uZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtY3VzdG9tLXJhZGlvLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5vcHRpb25zXCIgXG4gICAgICBbY2xhc3NdPVwiIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uIGludmFsaWQnIDogJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uJ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIFtpZF09XCJvcHQudmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIlxuICAgICAgICAgIG5hbWU9XCJpbnBWYWx1ZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LnZhbHVlKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpby1sYWJlbFwiIFtmb3JdPVwib3B0LnZhbHVlXCI+IHt7IG9wdC52YWx1ZSB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5vcHRpb25zLnJlY29yZHNcIiBjbGFzcz1cInJhZGlvIG54dC1yYWRpb09wdGlvblwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW9jb250YWluZXIgY29udGFpbmVyIG15dC1mb250NFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbaWRdPVwib3B0LmlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIG5hbWU9XCJpbnBWYWx1ZVwiIFt2YWx1ZV09XCJvcHQudmFsdWVcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LnZhbHVlKVwiIC8+XG4gICAgICAgICAge3sgb3B0LnZhbHVlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PiAgXG4gIDwhLS0gQ2hlY2tib3ggLS0+XG4gIDxkaXYgKm5nSWY9XCJjaGVja2JveEZsYWdcIiBjbGFzcz1cIlwiPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmVycm9yXCIgY2xhc3M9XCJjb25kLWRpdjJcIj5cbiAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uZXJyb3JNZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1jaGVja2JveC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uVmFsdWVzXCIgY2xhc3M9XCJueHQtY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtY29udGFpbmVyMVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnh0LWNoZWNrYm94XCIgW2lkXT1cIml0ZW0uaWRcIiBbKG5nTW9kZWwpXT1cIml0ZW0uY2hlY2tlZFwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWNoZWNrYm94LWxhYmVsXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0ZXh0RmxhZ1wiPlxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRvIHJlZHVjZSB0aGUgbWFyZ2luIC0tPlxuICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXN0aW9uSXRlbT8uc2l6ZSArICcgcGFkZGluZ25vbmUnXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJueHQtaW5wdXRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBcbiAgICAgICBpZD1cInRleHQtaW5wdXQtaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+IC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgQXJlYSAtLT5cbiAgPGRpdiAqbmdJZj1cInRhRmxhZ1wiID5cbiAgICA8ZGl2PlxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwibnh0LWlucHV0IG54dC10ZXh0LWFyZWFcIiBpZD1cInRhLWlucHV0LWlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIChmb2N1c291dCk9XCJ0YUZvY3VzT3V0ID0gdHJ1ZVwiXG4gICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCI+PC90ZXh0YXJlYT5cbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcIj48L2k+IC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENDIE51bWJlciBGb3JtYXQgLS0+XG4gIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgPGRpdiAqbmdJZj1cIm51bWJlckZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiVGV4dFwiIHBsYWNlaG9sZGVyPVwiMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDBcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cIm51bWJlci1pbnB1dC1pZFwiIChuZ01vZGVsQ2hhbmdlKT1cIkNDT25DaGFuZ2UoJGV2ZW50KVwiIHJlcXVpcmVkPVwiXCIgbWF4bGVuZ3RoPVwiMjlcIlxuICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOSBdL2csJycpO1wiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEVORC0tPlxuXG4gIDwhLS0gQWxwaGFOdW1lcmljIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYWxwaGFudW1lcmljRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+IDwhLS1VSSBub3QgY29tcGxldGVkLS0+XG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO1wiPlxuICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgIDxpbnB1dCB0eXBlPXRleHQgcGxhY2Vob2xkZXI9XCJ7eyd6ZXJvT2ZaZXJvJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBzdHlsZT1cInBhZGRpbmc6NXB4IDVweCA1cHggMTUwcHg7XCIgaWQ9XCJ5b3VyaWRoZXJlXCIvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVtYWlsIC0tPlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDxkaXYgKm5nSWY9XCJlbWFpbEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cImVtYWlsLWlucHV0LWlkXCJcbiAgICAgICAgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIERhdGVUaW1lIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZHRGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbnh0bXl0LXRpbWUxXCIgPlxuICAgIDwhLS0gRXJyb3IgSGFuZGxpbmcgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cblxuICAgIDwhLS0gRGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0ZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIEhBIDMxLUpBTi0yNCBUaGVzZSBsYWJlbHMgd2VyZSBvY2N1cGluZyB0aGUgZW1wdHkgc3BhY2Ugd2hlbiBkYXRlIHF1ZXN0aW9uIGNvbWVzLS0+XG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uZGF0ZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IEFkZGl0aW9uYWwgcGFyYW0gdG8gdXBkYXRlIHRoZSBxdWVzdGlvbiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGltZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidGltZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LnRpbWVUZXh0IH19PC9sYWJlbD4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBueHQtZHQtdGltZSc6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlYW5kVGltZTogIXFiSXRlbT8ucHJvZ3Jlc3NCYXJ9XCIgXG4gICAgICAgICAgICAgIGlkPVwiZGF0ZWFuZFRpbWVcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJzogcXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMCA/ICcnIDogJydcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG54dG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cbiAgICAgICAgICAgICAge3sgaG91ciB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5NTTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LngyNEhvdXJzID09IGZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwieycnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsICdkYXRlYW5kVGltZSc6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJ9XCI+PC9kaXY+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXR0YWNobWVudCAvIEZpbGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJmaWxlRmxhZ1wiPlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWRcIiBmb3I9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBhbGxvd2VkRmlsZUV4dGVuc2lvbiB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsdGhpcy5xdWVzdGlvbkl0ZW0pXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8dWwgKm5nSWY9XCJcbiAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcXVlc3Rpb25JdGVtPy50eXBlID09PSAnRmlsZScgJiZcbiAgICAgICAgIXFiSXRlbT8ucHJvZ3Jlc3NCYXJcbiAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWV9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPCEtLSBBdHRhY2htZW50IFByb2dyZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkaW5nLWJveFwiPlxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkaW5nLWZpbGUtbmFtZSBcIj57eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHRmaWxlLXVwbG9hZC1ib3hcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgIFxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCIgKm5nSWY9XCIgcXVlc3Rpb25JdGVtPy5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj4ge3sgcXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fTwvc3Bhbj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmlsZS1sYWJlbCBcIj5cbiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vZmlsZS11cGxvYWQucG5nXCIgY2xhc3M9XCJmaWxlLWljb25cIi8+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDwhLS0gQm9vayAtLT5cbiAgPGRpdiAqbmdJZj1cImJvb2tGbGFnXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICdmb3JtLWdyb3VwIGNvbnRlbnQtYm94JyA6ICdmb3JtLWdyb3VwJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICcnIDogJ254dC1teXQtYWxpZ24zJ1wiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2NvbC1sZy0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZScgOiAnY29sLW1kLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2Ygc3ViUXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5pZFwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBkb3duMjogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXM/LnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlXCI+e3sgcXVlcz8ucXVlc3Rpb25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbnh0bXl0LWRhdGVUaW1lTmV3XCIgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUaW1lJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uZGF0ZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgQWRkaXRpb25hbCBwYXJhbSB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8udGltZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5wcm9ncmVzc0Jhcn1cIiBcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbnh0bXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGhvdXIgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbWludXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IFRleHQsIEVtYWlsLCBsYWJlbCwgbnVtYmVyLCBEYXRlVGltZS0tPlxuICAgICAgICAgICAgPG54dC1pbnB1dCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0JyB8fCBxdWVzLnR5cGUgPT09ICdFbWFpbCcgfHwgcXVlcy50eXBlID09PSAnTnVtYmVyJyB8fCBxdWVzLnR5cGUgPT09ICdMYWJlbCcgfHwgcXVlcy50eXBlID09PSAnQm9vbGVhbicgfHwgcXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlVGltZScgfHwgcXVlcy50eXBlID09PSAnVGV4dEFyZWEnXCJcbiAgICAgICAgICAgIFt0eXBlXT1cInF1ZXMudHlwZSA9PT0gJ1RleHQnID8gJ3RleHQnIDogcXVlcy50eXBlID09PSAnRW1haWwnID8gJ2VtYWlsJyA6IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgPyAnbnVtYmVyJyA6IHF1ZXMudHlwZSA9PT0gJ0xhYmVsJyA/ICdsYWJlbCcgOiBxdWVzLnR5cGUgPT09ICdCb29sZWFuJyA/ICdjaGVja2JveCcgOiBxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnID8gJ3JpY2h0ZXh0JyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJyA/ICdkYXRldGltZScgOiBxdWVzLnR5cGUgPT09ICdUZXh0QXJlYScgPyAndGV4dGFyZWEnIDogJ3RleHQnXCJcbiAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICBbbGFiZWxGb250XT1cInF1ZXMuZm9udFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpXCJcbiAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInF1ZXMuZm9udENvbG9yXCJcbiAgICAgICAgICAgIFtsYWJlbFNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgIFtpbnB1dFdlaWdodF09XCJxdWVzLmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIlxuICAgICAgICAgICAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicXVlcy5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgICAgICAgICBbaW5wdXRJZF09XCJxdWVzLnRyYWNraW5nSWRcIlxuICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgW2lucHV0SWNvbkxlZnRTcmNdPVwicXVlcy5pY29uTGVmdFNyY1wiIFxuICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LHF1ZXMpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9ueHQtaW5wdXQ+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuaW5wdXRcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJoYW5kbGVMb2NhdGlvblNlbGVjdGVkKCRldmVudCxxdWVzKVwiPjwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWQgY3VzdG9tLWZpbGUtdXBsb2FkIGJnY29sb3Itd1wiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGJvb2tGbGFnQWNjZXB0IH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHVsICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBxdWVzLnR5cGUgPT09ICdGaWxlJyAmJlxuICAgICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcbiAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYm94XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJueHRmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiPnt7IHF1ZXM/LnF1ZXN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAge3snYXR0YWNoJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPCEtLSBTS1MxM01BUjI1IG54dCB0YWJsZSBjaGFuZ2UgLS0+XG4gICAgICAgICAgICA8bnh0LWRhdGF0YWJsZSBpc0VkaXRSb3cgaXNEZWxldGVSb3cgYWN0aW9uQnV0dG9uIGlzQnV0dG9uc1xuICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICBmcm9tID0gXCJmb3JtQnVpbGRlclwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC5kYXRhLCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCJcbiAgICAgICAgICAgICAgICBbdGFibGVDb25maWddPVwicXVlcy50YWJsZUNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgdGFibGVJZCA9IFwiXCJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcImx0clwiXG4gICAgICAgICAgICAgICAgdGFibGVXaWR0aCA9IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9ueHQtZGF0YXRhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTS1MyNU1BUjI1IEltYWdlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdJbWFnZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgW3N0eWxlLmJvcmRlcl09XCJxdWVzLmltYWdlRGF0YSA/ICcxcHggc29saWQgYmxhY2snIDogJ25vbmUnXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwibnh0ZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDwhLS0gZm9yIGNvbW1vbiBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcz8uZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLUxpc3Qgc3RhcnQtLT5cbiAgPGRpdiAqbmdJZj1cImxpc3RGbGFnXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtbXl0LWFsaWduM1wiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLmlkKTtsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWRpcy1mbGV4IG15dC1mb250MyBteXQtZm9udDdcIj57eyBxdWVzPy5xdWVzdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAnbnh0LWRpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIG54dGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgIH1cIiBpZD1cInRleHRcIiBbaWRdPVwicXVlcy51bmlxdWVTdWJRSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXMpXCJcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCJcbiAgICAgICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFkZEZsYWdcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIkFkZChnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uaWQpKVwiIGNsYXNzPVwiYnRuXCI+e3snYWRkJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L2J1dHRvbj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tTGlzdCBFbmQtLT5cblxuICA8IS0tIEFjdGlvbnMgLS0+XG4gIDwhLS0gVkQgYnV0dG9uIGNvbmRpdGlvbiByZW1vdmVkLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4ZXJcIj5cbiAgICA8IS0tIEJhY2t3YXJkIC8gQmFjayAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgICA8IS0tVkQgZGlzYWJsZWQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImJhY2tidXR0b25cIiBcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uYmFja1wiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1sZWZ0LWJ0JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnknOlxuICAgICAgICAgICAgICAhcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbT8uYmFjayB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9yd2FyZCAvIE5leHQgLS0+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2ICAqbmdJZj1cInFiSXRlbS5uZXh0XCIgPlxuICAgICAgPGRpdiBjbGFzcz1cIm54dGJ1dHRvblwiPlxuICAgICAgICAgPCEtLVZEIGRpc2FibGVkIC0tPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1ydXN0eSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5JzpcbiAgICAgICAgICAgICAgIXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlTmV4dENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0ubmV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwidGhpcy5hYkl0ZW0/LnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cImNvbC1sZy0xMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICA8aDI+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5VGV4dH19PC9oMj5cbiAgPHA+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5U3ViVGV4dH19PC9wPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzdW1tYXJ5ICYmIHN1bW1hcnkubGVuZ3RoID4gMFwiIGhlaWdodD1cIjEwMCUgIWltcG9ydGFudFwiIGNsYXNzPVwiY29sLW1kLTEyXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY29sLW1kLTEyJzohcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgICAgICB9XCI+XG4gICAgPGgxIGNsYXNzPVwibnh0LWhlYWRlcjEgbnh0LXN1bW1hcnlwYWRkXCIgPnt7IHFiSXRlbS5zdWJUaXRsZSB9fTwvaDE+ICAgICAgICAgXG4gIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3MyXCIgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyBcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHN1bW1hcnk6ICAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPHAgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFZEIFF1ZXN0aW9uIE5vIGFkZGVkIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPjxzcGFuPnt7IHFhLnF1ZXN0aW9uTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IHFhLnF1ZXNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1hbnN3ZXJcIiA+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgaW4gc3VtbWFyeSBmb3IgYm9vayB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09ICdCb29rJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHFhLm15VmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwidmFsLnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlXCI+e3sgdmFsLnF1ZXN0aW9uVGV4dCB9fTo8c3Bhbj57eyB2YWwuaW5wdXQgfX08L3NwYW4+PC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIHZhbHVlIGZvciBkaXJlY3QgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnICYmIHFhLnFUeXAgIT0gJ0Jvb2snICAmJiBxYS5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiPnt7IHFhLnF1ZXN0aW9uVGV4dCB9fSA8c3Bhbj48L3NwYW4+e3sgcWEuYW5zVmFsdWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwibnh0LWljb24tZWRpdGlvc1wiLz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuXG4gIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3MyXCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXIgXCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igbnh0c3VtbWFyeS10b3AnIDogcWJJdGVtLnByb2dyZXNzQmFyIH1cIiA+XG4gICAgICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzLXN1bW1hcnlcIiAqbmdJZj1cInFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5zdW1tYXJ5VGV4dCAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIiBcbiAgICAgIFtuZ0NsYXNzXT1cInsgc3VtbWFyeVRpdGxlOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJueHQtc3ViVGl0bGVcIiA+e3sgcWJJdGVtLnN1bW1hcnlUZXh0IH19PC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cIm54dC1zdWJUaXRsZTFcIiA+e3sgcWJJdGVtLnN1bW1hcnlTdWJUZXh0fX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICA8aDMgY2xhc3M9XCJzdW1tYXJ5LWhcIj5cbiAgICAgICAge3sgcWJJdGVtLnN1bW1hcnlUZXh0IH19XG4gICAgICA8L2gzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uIHN1bS1xdWVzIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzIHF1ZXN0aW9uIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzMSBxdWVzdGlvbjEgc3VtbWFyeS1jb21wbGV0ZWQgbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnh0LWVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRpb3NcIi8+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJueHQtYW5zd2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMS5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQtc3VtbWFyeVwiIC8+XG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhlcjFcIiAqbmdJZj1cImFiSXRlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcgJiYgcWJJdGVtLmNhbmNlbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnYnRuLXRleHQnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJ9XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5jYW5jZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gR3JvdXAgQWN0aW9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImFsaWduLWVkaXQtc3VibWl0XCIgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCI+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5zdWJtaXRcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieyAnYnRuLXRleHQyJzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIiBcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdENsaWNrKClcIj5cbiAgICAgICAge3sgcWJJdGVtLnN1Ym1pdCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLmVkaXRcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydncmV5JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrTmV3KClcIj5cbiAgICAgICAge3sgcWJJdGVtLmVkaXQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbjwvZGl2PiJdfQ==
2405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQU1qRSxPQUFPLEVBQ0wsUUFBUSxFQUdSLGFBQWEsRUFFYixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFFTCxVQUFVLEVBTVYsTUFBTSxFQUVQLE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWTFFLE1BQU0sT0FBTyxzQkFBc0I7SUEyTXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFFRDtJQXBOQSxJQUFJLENBQVM7SUFDYixrQkFBa0IsQ0FBUztJQUMzQixJQUFJLENBQVM7SUFDYixHQUFHLENBQVM7SUFDWixHQUFHLENBQVMsQ0FBQyw4QkFBOEI7SUFDM0MsTUFBTSxDQUFVO0lBQ2YsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25ELGNBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUN2RCxVQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkQsWUFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRS9ELE1BQU0sQ0FBUztJQUNSLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsTUFBTSxDQUFhO0lBQ25CLE1BQU0sQ0FBZTtJQUNyQixZQUFZLENBQVc7SUFDdkIsVUFBVSxDQUFnQjtJQUVqQyxvQkFBb0I7SUFDYixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFFakMsbUJBQW1CO0lBQ1osWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixZQUFZLEdBQVksS0FBSyxDQUFDO0lBRXJDLHNCQUFzQjtJQUNmLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFFBQVEsR0FBVyxLQUFLLENBQUM7SUFDaEMsYUFBYTtJQUNOLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDdkMsY0FBYztJQUNQLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUNqQyxZQUFZLEdBQWUsRUFBRSxDQUFDO0lBQzlCLFFBQVEsQ0FBUztJQUNqQixTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN0QixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwQixlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1QixpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlCLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNCLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLGlCQUFpQixHQUFvQixFQUFFLENBQUM7SUFDeEMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUNuQixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFdBQVcsR0FBVSxFQUFFLENBQUM7SUFDeEIsZ0JBQWdCLEdBQVUsRUFBRSxDQUFDO0lBQzdCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsVUFBVSxDQUFNO0lBQ2hCLG9CQUFvQixDQUFXO0lBQy9CLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUNuQyxpQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFDbkMsSUFBSSxHQUFZLEtBQUssQ0FBQztJQUN0QixRQUFRLEdBQVksSUFBSSxDQUFDO0lBQ3pCLEtBQUssQ0FBVTtJQUNmLEdBQUcsQ0FBVTtJQUNiLFNBQVMsQ0FBUztJQUNsQixXQUFXLENBQVM7SUFDcEIsWUFBWSxDQUFTO0lBQ3JCLE9BQU8sQ0FBUztJQUNoQixLQUFLLENBQVM7SUFDZCxVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDekIsUUFBUSxHQUFXLENBQUMsQ0FBQztJQUM1Qix1QkFBdUI7SUFDaEIsT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUNsQixVQUFVLENBQVM7SUFDbEIsS0FBSyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7SUFDekIsRUFBRSxDQUFjO0lBQ2pCLFNBQVMsQ0FBTTtJQUNmLGFBQWEsQ0FBTTtJQUNuQixVQUFVLENBQU07SUFDaEIsV0FBVyxHQUFFLEVBQUUsQ0FBQztJQUVoQixLQUFLLEdBQVU7UUFDcEIsSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO0tBQ0wsQ0FBQztJQUVLLE9BQU8sR0FBYTtRQUN6QixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7S0FDTCxDQUFDO0lBRUssWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixjQUFjLEdBQVcsRUFBRSxDQUFDO0lBQzVCLGdCQUFnQixHQUFXLEVBQUUsQ0FBQztJQUM5QixTQUFTLEdBQVcsRUFBRSxDQUFDO0lBQ3ZCLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDeEIsY0FBYyxDQUFXO0lBQ3pCLFFBQVEsQ0FBUztJQUNqQixpQkFBaUIsQ0FBUztJQUMxQixXQUFXLENBQVM7SUFFM0IsVUFBVSxDQUFPO0lBRWpCLGtCQUFrQjtJQUNYLFlBQVksR0FBVSxFQUFFLENBQUM7SUFDekIsYUFBYSxDQUFTO0lBQ3RCLGtCQUFrQixDQUFTO0lBQzNCLGdCQUFnQixDQUFTO0lBQ3pCLFlBQVksQ0FBUztJQUNyQixZQUFZLENBQVM7SUFDckIsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLFVBQVUsQ0FBUTtJQUNsQixNQUFNLEdBQVUsRUFBRSxDQUFDO0lBQ25CLFFBQVEsR0FBTyxFQUFFLENBQUM7SUFFekIsc0JBQXNCO0lBQ2YsYUFBYSxHQUFXLElBQUksQ0FBQztJQUM3QixXQUFXLEdBQVcsQ0FBQyxDQUFDO0lBQ3hCLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixtQkFBbUIsR0FBUSxFQUFFLENBQUM7SUFDckMsb0JBQW9CLENBQVU7SUFFdkIsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQztJQUN2RSxZQUNVLFNBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLEtBQXFCLEVBQ3JCLFNBQXVCLEVBQ3ZCLFlBQWdDO0lBQ3hDLHlDQUF5QztJQUNqQyxhQUFvQyxFQUM1QyxFQUFjLEVBQ1AsV0FBd0I7UUFWdkIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFFaEMsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBRXJDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRS9CLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLDBCQUEwQixDQUFDO0lBQ2hELENBQUM7SUFFRCxvRkFBb0Y7SUFDcEYsMEJBQTBCO0lBQzFCLGFBQWEsQ0FBQyxLQUFVLEVBQUUsSUFBUztRQUNqQywwQ0FBMEM7UUFDMUMsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1Qiw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLFFBQVE7Z0JBQ1gsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsRSxJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFHLE1BQU0sRUFBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDckYsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04scURBQXFEO1lBQ3JELElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUcsTUFBTSxFQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNyRixDQUFDO1lBQ0QsSUFBSSxDQUFDLFFBQVE7Z0JBQ1gsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRSxXQUFXO2FBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNQLFlBQVksQ0FBQyxPQUFPLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUNFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ3JCLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELGdEQUFnRDtRQUNoRCxvREFBb0Q7UUFDcEQsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUNsRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ25DLENBQUM7aUJBQUssSUFBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQiwrQ0FBK0M7UUFDL0MsSUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNoRSxrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUMsQ0FBQztvQkFDNUMsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBUyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUE7WUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxLQUFLLEVBQUMsQ0FBQztZQUNwQyxJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDaEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQW9CLENBQUM7Z0JBQzdDLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO3FCQUM3QyxXQUFXLENBQUMsY0FBYyxDQUFDO3FCQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsVUFBVSxDQUFDLFNBQVMsR0FBRyxHQUFFLEVBQUU7b0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDdkQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUMsQ0FBQzs0QkFDNUMsT0FBTyxJQUFJLENBQUM7d0JBQ2QsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFTLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtvQkFDOUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsQ0FBQyxDQUFBO1lBQ0gsQ0FBQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRixlQUFlO1FBQ1osK0VBQStFO1FBQzlFLHVDQUF1QztRQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLElBQUksS0FBVSxDQUFDO2dCQUNmLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUMsQ0FBQztvQkFDN0UsS0FBSyxHQUFHLEVBQUUsQ0FBQTtvQkFDVixLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUE7b0JBQ3RDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFBO29CQUNyRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQTtnQkFDM0MsQ0FBQztxQkFBTSxJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFDLENBQUM7b0JBQ3hELEtBQUssR0FBRyxFQUFFLENBQUE7b0JBQ1YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFBO2dCQUNyQyxDQUFDO3FCQUFNLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUMsQ0FBQztvQkFDN0IsS0FBSyxHQUFHLEVBQUUsQ0FBQTtvQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxJQUFJLEVBQUUsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDbEcsSUFBSSxNQUFNLEdBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFDL0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFBO29CQUN0QyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFBO2dCQUNqRixDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFBO2dCQUM1QixDQUFDO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDSCwyQkFBMkI7SUFDekIsV0FBVyxDQUFDLGFBQTRCO1FBQ3RDLElBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBQ0EsMEJBQTBCO0lBQzNCLFlBQVk7UUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEdBQUc7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUc7WUFDekIsVUFBVSxFQUFFLFlBQVk7WUFDeEIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLFlBQVksRUFBRTtnQkFDWixJQUFJLEVBQUUsQ0FBQztnQkFDUCxLQUFLLEVBQUUsQ0FBQztnQkFDUixHQUFHLEVBQUUsQ0FBQzthQUNQO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLElBQUksRUFBRSxDQUFDO2dCQUNQLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRCxZQUFZLEVBQUUsS0FBSztZQUNuQixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsRUFBRSxFQUFFLEtBQUs7YUFDVjtZQUNELFdBQVcsRUFBRTtnQkFDWCxDQUFDLEVBQUUsS0FBSztnQkFDUixDQUFDLEVBQUUsS0FBSztnQkFDUixDQUFDLEVBQUUsS0FBSztnQkFDUixDQUFDLEVBQUUsS0FBSztnQkFDUixDQUFDLEVBQUUsTUFBTTtnQkFDVCxDQUFDLEVBQUUsS0FBSztnQkFDUixDQUFDLEVBQUUsS0FBSztnQkFDUixDQUFDLEVBQUUsS0FBSztnQkFDUixDQUFDLEVBQUUsS0FBSztnQkFDUixFQUFFLEVBQUUsS0FBSztnQkFDVCxFQUFFLEVBQUUsS0FBSztnQkFDVCxFQUFFLEVBQUUsS0FBSzthQUNWO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hELFdBQVc7aUJBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDUCxZQUFZLENBQUMsT0FBTyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXO2lCQUNSLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ1AsWUFBWSxDQUFDLE9BQU8sRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUVQLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekIsYUFBYTtRQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLGdGQUFnRjtRQUNoRixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHNDQUFzQztnQkFDdEMsMkRBQTJEO2dCQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVcsRUFBRSxLQUFhO1FBQ3RDLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUNBLDBCQUEwQjtJQUMzQixrQ0FBa0M7SUFDbEMsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNyQyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLDJEQUEyRDtZQUUzRCxnREFBZ0Q7WUFDaEQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDNUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNyQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztnQkFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNkLG1DQUFtQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVTtRQUNSLHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksV0FBVyxHQUFDLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLFNBQVMsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzlCLCtGQUErRjtRQUMvRixJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEMsaURBQWlEO1lBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDMUQsSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQztvQkFDakQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7Z0JBQzVJLENBQUM7cUJBQUksQ0FBQztvQkFDSixZQUFZLEdBQUcsV0FBVyxDQUFDO2dCQUM3QixDQUFDO2dCQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDdEQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsK0VBQStFO2dCQUN0SCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztZQUNqRSxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLCtFQUErRTtZQUN0SCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztRQUNqRSxDQUFDO1FBRUksSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUM5QiwrQ0FBK0M7UUFDL0MsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLFVBQVUsR0FDWiwrRUFBK0UsQ0FBQztRQUVsRixpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsZ0RBQWdEO1lBQ2hELEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNoRSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7WUFDbEMsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQ2pELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUM3QyxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO2dCQUMvQyxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUNqRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDN0MsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzVCLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUVkLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDOUMsVUFBVTtvQkFDVixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ1osSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBQyxDQUFDO3dCQUN0Qiw4REFBOEQ7d0JBQzlELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzt3QkFDaEMsNEJBQTRCO3dCQUM1Qiw4QkFBOEI7b0JBRWhDLENBQUM7b0JBQ0YsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBQyxDQUFDO3dCQUN0QiwwRUFBMEU7d0JBRTdFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7NEJBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQ0FDckIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSTtvQ0FDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtvQ0FDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0NBQ3RCLEdBQUc7b0NBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7NEJBQzlCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO2dDQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDOzRCQUNyRSxDQUFDOzRCQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQ0FDNUIsSUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUM7b0NBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0NBQzlELENBQUM7cUNBQUksQ0FBQztvQ0FDSixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztnQ0FDOUMsQ0FBQzs0QkFDSCxDQUFDO2lDQUFNLENBQUM7Z0NBQ04sSUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUM7b0NBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0NBQzlELENBQUM7cUNBQUksQ0FBQztvQ0FDSixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztnQ0FDOUMsQ0FBQzs0QkFFSCxDQUFDO3dCQUNILENBQUM7d0JBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dDQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDOzRCQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0NBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7NEJBQzFDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDOzRCQUMxQyxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxpRUFBaUU7b0JBQ2pFLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUM5RixvREFBb0Q7d0JBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQzdDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ25FLFdBQVc7NkJBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQzs2QkFDUCxZQUFZLENBQUMsT0FBTyxFQUFFLHFEQUFxRCxDQUFDLENBQUM7d0JBQ2hGLE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLENBQUM7Z0JBQ0QsMENBQTBDO2dCQUMxQyxJQUFHLElBQUksQ0FBQyxJQUFJLElBQUcsTUFBTSxFQUFDLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2hDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ3pCLENBQUM7b0JBQ0Qsa0NBQWtDO2dCQUNwQyxDQUFDO2dCQUVDLElBQ0UsQ0FBQyxJQUFJLENBQUMsVUFBVTtvQkFDbEIsMEZBQTBGO29CQUN6RiwyREFBMkQ7b0JBQzNELENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQ3BELENBQUM7b0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNoQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNoQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNoQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO29CQUN6QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNoQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdkQsS0FBSyxJQUFJLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQzVDLElBQUksQ0FBQyxRQUFROzRCQUNYLGNBQWMsQ0FBQyxZQUFZO2dDQUMzQixLQUFLO2dDQUNMLGNBQWMsQ0FBQyxjQUFjO2dDQUM3QixHQUFHLENBQUM7d0JBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDOzRCQUN2QyxtQ0FBbUM7d0JBQ3JDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCx5QkFBeUI7Z0JBQzNCLENBQUMsQ0FBQyw4QkFBOEI7Z0JBRWhDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO2dCQUN4RSxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQ3hDLDZDQUE2QztZQUMvQyxDQUFDO1lBQ0QsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUM1RSxDQUFDO2FBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQzNCLEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUNoRSxJQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNwQixTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ3JDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ3pCLENBQUM7b0JBQ0gsSUFBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO3dCQUNwQyxnQ0FBZ0M7d0JBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuRCxDQUFDO3lCQUFNLENBQUM7d0JBQ04scUNBQXFDO3dCQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEdBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMvRixDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDcEIseUJBQXlCO29CQUN6QixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQ3BDLDhCQUE4QjtvQkFDOUIsc0JBQXNCO29CQUN0QixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7YUFDSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUMvQyxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6RCxVQUFVO1lBQ1YsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN4RSxvQ0FBb0M7Z0JBRXBDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSzt3QkFDckIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSTs0QkFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTs0QkFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7NEJBQ3RCLEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7b0JBQzlCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO29CQUNyRSxDQUFDO29CQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDaEUsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7b0JBQ2hFLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7d0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBQ2hELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDaEUsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7b0JBQ2hFLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzVCLHlDQUF5QztvQkFDekMsSUFBSSxLQUFLLEdBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1QixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDakQsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN4QixvQkFBb0I7b0JBQ3BCLElBQUksS0FBSyxHQUFRLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BELEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IscUJBQXFCO29CQUNyQixJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUTs0QkFDOUIsa0lBQWtJLENBQUM7d0JBQ3JJLHVCQUF1Qjt3QkFDdkIsT0FBTztvQkFDVCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDN0MsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsUUFBUTtvQkFDWCxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJO3dCQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO3dCQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzt3QkFDdEIsR0FBRzt3QkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDaEUsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQzdDLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQzdDLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pCLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxLQUFLLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLFFBQVE7d0JBQ1gsY0FBYyxDQUFDLFlBQVk7NEJBQzNCLEtBQUs7NEJBQ0wsY0FBYyxDQUFDLGNBQWM7NEJBQzdCLEdBQUcsQ0FBQztnQkFDUixDQUFDO2dCQUNELGdEQUFnRDtnQkFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQzdDLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELCtDQUErQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEQsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7WUFDN0MsY0FBYztZQUNkLGtDQUFrQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDM0IseURBQXlEO1FBQ3pELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2xDLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMvQixVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztZQUNuQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxPQUFPLEVBQUUsY0FBYyxDQUFDO1lBQ3ZELFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLEVBQUUsWUFBWSxDQUFDO1lBQ25ELFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDO1lBQ3JDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxjQUFjLEVBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQyxpQ0FBaUM7WUFDakMseUNBQXlDO1FBQzNDLENBQUM7UUFDRDs7OztTQUlDO1FBQ0Qsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDeEMsaURBQWlEO1FBQ2pELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUNwQixXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2xELFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDQSwwQkFBMEI7SUFDM0IsSUFBSTtRQUNGLElBQUksU0FBUyxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDekMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUN6QixzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLDJDQUEyQztRQUUzQyw0Q0FBNEM7UUFDNUMsMkRBQTJEO1FBQzNELElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7WUFDakQsS0FBSyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25DLGVBQWU7Z0JBQ2Ysc0VBQXNFO2dCQUN0RSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQyx3REFBd0Q7b0JBQ3hELElBQUcsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDO3dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ3BDLENBQUM7eUJBQUssQ0FBQzt3QkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7b0JBQ3pDLENBQUM7b0JBQ0Qsc0RBQXNEO2dCQUN4RCxDQUFDO1lBQ0gsQ0FBQztZQUNELDJDQUEyQztZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZELG9CQUFvQjtZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUQsc0JBQXNCO1lBQ3RCLHNDQUFzQztZQUN0QyxrQkFBa0I7WUFDbEIsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsY0FBYyxJQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUMvRCw2QkFBNkI7Z0JBQzdCLEtBQUssSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN2Qyx3QkFBd0I7b0JBQ3hCLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDbEQsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQy9CLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDOzRCQUM3RCxDQUFDO2lDQUFNLENBQUM7Z0NBQ04sbUNBQW1DO2dDQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7NEJBRXpDLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUNJLElBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxNQUFNLElBQUksU0FBUyxDQUFDLGNBQWMsSUFBRyxHQUFHLEVBQUcsQ0FBQztnQkFDcEUsS0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3ZDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUMsQ0FBQzt3QkFDbkQsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzs0QkFDbEMsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0QsQ0FBQztZQUNILENBQUM7aUJBRUksQ0FBQztnQkFDSixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7UUFDRCx5REFBeUQ7YUFDckQsQ0FBQztZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUN6QyxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUV0QiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUd0QixpQkFBaUI7UUFDakIsc0JBQXNCO1FBRXRCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7WUFDakIsY0FBYztZQUNmLG1DQUFtQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQzlCLHNCQUFzQjtZQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFFdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUV6QixlQUFlO1lBQ2YsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLDJDQUEyQztnQkFDM0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osb0ZBQW9GO29CQUNwRixJQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFDLENBQUM7d0JBQ3pHLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQzt3QkFDaEIsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDOzRCQUNwRCxLQUFLLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQ0FDN0Msb0VBQW9FO2dDQUNuRSx1RUFBdUU7Z0NBQ3RFLGtDQUFrQztnQ0FDcEMsS0FBSztnQ0FDSCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0NBQ3ZCLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQzt3Q0FDdkIsTUFBTSxHQUFHLE9BQU8sQ0FBQztvQ0FDbkIsQ0FBQzt5Q0FBTSxDQUFDO3dDQUNOLE1BQU0sSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUUsd0VBQXdFO3dDQUNuRyxJQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBQyxDQUFDOzRDQUMxQyxLQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBQyxDQUFDO2dEQUN0RCxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFDLEVBQUUsQ0FBQyxDQUFDOzRDQUMvQyxDQUFDO3dDQUNILENBQUM7d0NBQ0QsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxDQUFDO3dDQUN6RCxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29DQUNsSixDQUFDO2dDQUNILENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO3dCQUMxQixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBQ3hDLENBQUM7b0JBQ0Msd0VBQXdFO29CQUN4RSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNsRixJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUNwQiw4Q0FBOEM7d0JBQzlDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzt3QkFDNUMsZUFBZSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUN4QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sNkRBQTZEO3dCQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0IsQ0FBQztvQkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFLO1FBQ1gsSUFBSSxHQUFHLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzlELGdEQUFnRDtRQUNoRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQzNDLEdBQUcsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxJQUFJLFNBQVMsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzlCLElBQUcsU0FBUyxDQUFDLGNBQWMsSUFBRyxHQUFHLEVBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFHRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLGlCQUFpQjtRQUNqQixzQkFBc0I7UUFFdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFHLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFFLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLGNBQWM7UUFDZixtQ0FBbUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QyxrQ0FBa0M7SUFDcEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxxQ0FBcUM7SUFFN0IsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUMxQyxJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsK0JBQStCO1lBQy9CLGNBQWM7WUFDZCxvQ0FBb0M7WUFDcEMsMEJBQTBCO1lBQzFCLHlCQUF5QjtZQUN6QixLQUFLO1lBQ0wsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQywyREFBMkQ7WUFDM0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1QixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FDdkcsQ0FBQyxJQUFJLEVBQUMsRUFBRTtnQkFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3hDLENBQUMsRUFBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUNBLENBQUE7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLHNDQUFzQztZQUNyQywyQ0FBMkM7WUFDNUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxJQUFJLEdBQUc7Z0JBQ1QsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLFlBQVksRUFBRyxFQUFFO2FBQ2xCLENBQUE7WUFDTixtQ0FBbUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQ3pCLDJCQUEyQixFQUMzQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFTyxlQUFlLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUNwQixJQUFHLElBQUksRUFBQyxDQUFDO1lBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRix3QkFBd0I7SUFDeEIsYUFBYSxDQUFDLFVBQVU7UUFDdEIsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBQyxDQUFDO1lBQ3JCLElBQUcsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksV0FBVyxFQUFDLENBQUM7Z0JBQ2pELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksUUFBUSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBQy9DLDJEQUEyRDtnQkFDM0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUM1RyxDQUFDLElBQUksRUFBQyxFQUFFO29CQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO2dCQUN4QyxDQUFDLEVBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxDQUFDLENBQ0EsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELHdCQUF3QjtJQUNoQixlQUFlLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLElBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUMsQ0FBQztZQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO2FBQUssQ0FBQztZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0osQ0FBQyxDQUFBO0lBRU8sZUFBZSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDckMsOEJBQThCO0lBQ2hDLENBQUMsQ0FBQztJQUVNLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDMUMsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3RCLCtCQUErQjtZQUMvQixjQUFjO1lBQ2Qsb0NBQW9DO1lBQ3BDLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFDekIsS0FBSztZQUNMLGtDQUFrQztZQUNsQyxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxDQUFDO1lBQzlDLDJEQUEyRDtZQUMzRCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUN2RyxDQUFDLElBQUksRUFBQyxFQUFFO2dCQUNQLG1DQUFtQztnQkFDbEMsY0FBYztnQkFDZCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQiw2QkFBNkI7Z0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3hDLENBQUMsRUFBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUNBLENBQUE7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLHVDQUF1QztZQUN2QyxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxDQUFDO1lBQzlDLDJEQUEyRDtZQUMzRCwyQ0FBMkM7WUFDM0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1QixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksS0FBSyxHQUFHO2dCQUNYLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixTQUFTLEVBQUUsTUFBTTtnQkFDakIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxZQUFZLEVBQUcsRUFBRTthQUNsQixDQUFBO1lBQ0EsNkJBQTZCO1lBQ2xDLG1DQUFtQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVk7WUFDM0IsMkRBQTJEO1lBQ3pELDJCQUEyQixFQUMzQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUE7SUFDTyxlQUFlLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixJQUFHLFFBQVEsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLFNBQVMsRUFBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFakMsQ0FBQztRQUNGLHVEQUF1RDtRQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLElBQ0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSTtnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDL0IsQ0FBQztnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdDQUFnQztnQkFDaEMsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO2dCQUV4QixLQUFLLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzFDLGNBQWMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO29CQUVsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRTFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7d0JBQ25DLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUzt3QkFDOUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO3dCQUM1QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07d0JBQ3hCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTt3QkFDcEIsU0FBUyxFQUFDLFNBQVMsQ0FBQyxTQUFTO3FCQUM5QixDQUFDLENBQUM7b0JBRUgsaUNBQWlDO29CQUNqQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQzdCLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM3Qyw2QkFBNkI7d0JBRTdCLHFDQUFxQzt3QkFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTs0QkFDeEMsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7eUJBQ2pELENBQUMsQ0FBQzt3QkFDSCx1Q0FBdUM7b0JBQ3pDLENBQUM7eUJBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNwQywrQkFBK0I7d0JBQy9CLElBQUksT0FBTyxDQUFDO3dCQUNaLElBQUksR0FBRyxDQUFDO3dCQUNSLEtBQUssSUFBSSxNQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDakQsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzs0QkFDdkMsR0FBRyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2xDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNwQixDQUFDO3dCQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ25ELHVDQUF1QztvQkFDekMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLDhCQUE4QjtnQkFDOUIsa0NBQWtDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hDLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFDLENBQUM7Z0JBQ3RCLDZCQUE2QjtnQkFDNUIsS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN2QyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2pCLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDMUIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNmLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDZixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDMUMsS0FBSyxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQzs0QkFDaEMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDdkMsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ2hCLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3RCLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3JDLENBQUM7NEJBQ0QsTUFBTSxFQUFFLENBQUM7d0JBQ1gsQ0FBQzt3QkFFRCxPQUFPLEdBQUc7NEJBQ1IsU0FBUyxFQUFDLE1BQU0sQ0FBQyxTQUFTOzRCQUMxQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7NEJBQzNCLFFBQVEsRUFBRSxLQUFLO3lCQUNoQixDQUFDO3dCQUNKLCtCQUErQjtvQkFDL0IsQ0FBQzt5QkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQ2pDOzs7Ozs7Ozs7Ozs7Ozs0QkFjSTt3QkFDSixJQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUM7NEJBQ3JDLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNuRCxzQkFBc0I7NEJBQ3RCLE9BQU8sR0FBRztnQ0FDVCw2QkFBNkI7Z0NBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQ0FDM0IsUUFBUSxFQUFFLFlBQVk7NkJBQ3ZCLENBQUM7NEJBQ0Ysc0JBQXNCOzRCQUN2Qiw4QkFBOEI7d0JBQzdCLENBQUM7NkJBQ0UsQ0FBQzs0QkFDSCxPQUFPLEdBQUc7Z0NBQ1IsNkJBQTZCO2dDQUM3QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0NBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTs2QkFDMUIsQ0FBQzs0QkFDSCw4QkFBOEI7d0JBQy9CLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNQLDhDQUE4Qzt3QkFDN0MsT0FBTyxHQUFHOzRCQUNSLDZCQUE2Qjs0QkFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTOzRCQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7eUJBQzFCLENBQUM7d0JBQ0gsOEJBQThCO29CQUMvQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBRUgsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVNLGVBQWUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ3hDLElBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FDekIsSUFBSSxDQUFDLEdBQUcsRUFDUixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQzVCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUMzQixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixzQ0FBc0M7WUFDdEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsMkNBQTJDO1lBQzNDLElBQUksS0FBSyxHQUFHO2dCQUNYLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixTQUFTLEVBQUUsTUFBTTtnQkFDakIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxZQUFZLEVBQUcsRUFBRTthQUNsQixDQUFBO1lBQ0wsbUNBQW1DO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUN6QiwyQkFBMkIsRUFDM0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUMzQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQTtJQUdPLHFCQUFxQixHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUN2QyxLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLE9BQU8sR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDeEYsc0JBQXNCO2dCQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRU0scUJBQXFCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUMzQyxvQ0FBb0M7UUFDcEMsd0JBQXdCO0lBQzFCLENBQUMsQ0FBQztJQUVNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ3RDLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0QiwrQkFBK0I7WUFDL0IsY0FBYztZQUNkLGdDQUFnQztZQUNoQyxzQkFBc0I7WUFDdEIscUJBQXFCO1lBQ3JCLEtBQUs7WUFDTCxrQ0FBa0M7WUFDbEMsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QywyREFBMkQ7WUFDM0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1QixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FDakcsQ0FBQyxJQUFJLEVBQUMsRUFBRTtnQkFDUCxtQ0FBbUM7Z0JBQ2xDLGNBQWM7Z0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUNwQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDVixrQ0FBa0M7Z0JBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUNBLENBQUE7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLDJEQUEyRDtZQUMzRCx1REFBdUQ7WUFDdkQsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsMkNBQTJDO1lBQzNDLElBQUksS0FBSyxHQUFHO2dCQUNYLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixTQUFTLEVBQUUsTUFBTTtnQkFDakIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxZQUFZLEVBQUcsRUFBRTthQUNsQixDQUFBO1lBQ0EsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO1lBQzNCLDJEQUEyRDtZQUN6RCwyQkFBMkIsRUFDM0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRU8sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDbEMsY0FBYztRQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEIsNkZBQTZGO1FBQzdGLDBHQUEwRztRQUMxRyx1RUFBdUU7UUFDdkUsNEJBQTRCO1FBQzVCLElBQUk7UUFDSixrQ0FBa0M7UUFDbEMsc0JBQXNCO1FBRXRCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxrQ0FBa0M7UUFFbEMsSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsaUNBQWlDO1FBQ2pDLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLHNCQUFzQjtZQUN0QixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzdDLHNCQUFzQjtnQkFDdEIsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ1AseURBQXlEO29CQUN6RCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNmLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDekIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUN4QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUM1QywyQ0FBMkM7SUFDN0MsQ0FBQztJQUVPLFdBQVcsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2pDLG9DQUFvQztRQUNwQyx3QkFBd0I7SUFDMUIsQ0FBQyxDQUFDO0lBRU0sVUFBVSxHQUFHLEdBQUcsRUFBRTtRQUN4QiwyREFBMkQ7UUFDM0QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUUxRCxJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsK0JBQStCO1lBQy9CLGNBQWM7WUFDZCwyREFBMkQ7WUFDM0Qsc0JBQXNCO1lBQ3RCLHFCQUFxQjtZQUNyQixLQUFLO1lBQ0wsSUFBSSxRQUFRLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQywyREFBMkQ7WUFDM0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUM5SCxDQUFDLElBQUksRUFBQyxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDcEMsQ0FBQyxFQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQ0EsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sc0NBQXNDO1lBQ3RDLElBQUksUUFBUSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDL0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLDJDQUEyQztZQUMzQyxJQUFJLEtBQUssR0FBRztnQkFDWCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDbkMsWUFBWSxFQUFHLEVBQUU7YUFDbEIsQ0FBQTtZQUNMLG1DQUFtQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FDekIsMkJBQTJCLEVBQzNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN2QixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxHQUFHLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzlELE9BQU8sR0FBRyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7SUFDekMsQ0FBQztJQUVPLFdBQVcsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2pDLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVNLFdBQVcsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2pDLG9DQUFvQztRQUNwQyx3QkFBd0I7SUFDMUIsQ0FBQyxDQUFDO0lBRU0sZUFBZSxHQUFHLEdBQUcsRUFBRTtRQUM3Qiw2Q0FBNkM7UUFDN0Msd0RBQXdEO1FBQ3hELG1DQUFtQztRQUNuQyxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFFaEIsa0JBQWtCO1FBQ2xCLG1EQUFtRDtRQUNuRCxJQUFJO1FBRUosSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNYLDhKQUE4SjtRQUU5SixxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLGdFQUFnRTtRQUVoRSwyQ0FBMkM7UUFDM0MsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDN0Msc0VBQXNFO1lBQ3RFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkQsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNqQywyREFBMkQ7WUFDM0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUNELDhCQUE4QjtRQUM5QixJQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDO1lBQ3ZFLHFDQUFxQztZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsa0RBQWtEO1lBQ2xELHVDQUF1QztZQUM1Qyx3QkFBd0I7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMvQyxPQUFPLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsNEJBQTRCO1lBQzVCLG1DQUFtQztZQUNuQyx1REFBdUQ7WUFDdkQsaURBQWlEO1lBQ2pELElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNsQixrQkFBa0I7WUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekUsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUUxQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWM7Z0JBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUMvQixDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUc7d0JBQ3RDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTt3QkFDOUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzt3QkFDaEMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztxQkFDOUIsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQzdDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUc7d0JBQ3RDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTt3QkFDOUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzt3QkFDaEMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO3FCQUMxQixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLFFBQVE7WUFDUixJQUFJLENBQUMsb0JBQW9CO2dCQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCx5Q0FBeUM7UUFDM0MsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixPQUFPLENBQUMsR0FBRztRQUNULDJDQUEyQztRQUUzQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsZ0JBQWdCO1lBQ2hCLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFFckIseUJBQXlCO1lBQzNCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCOzttQkFFRztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDckIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztZQUNILHNDQUFzQztZQUN0QywyQkFBMkI7WUFDM0IsTUFBTTtpQkFDQSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztpQkFBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsc0NBQXNDO2dCQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLDJCQUEyQjtZQUM3QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixzQ0FBc0M7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsMkJBQTJCO1lBQzdCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFHO1FBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLGdCQUFnQjtZQUNoQixJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLDBCQUEwQjtZQUM1QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUMxQixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLENBQUM7WUFDSCxzQ0FBc0M7WUFDdEMsNEJBQTRCO1lBQzVCLE1BQU07aUJBQ0EsSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDdEIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUM7aUJBQU0sSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsT0FBTztRQUNoQixLQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLElBQUksRUFBRSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDM0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2YsRUFBRSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ25CLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixFQUFFLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDbkMsRUFBRSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFFbkIsSUFDRSxJQUFJLENBQUMsUUFBUTtnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUNqRCxDQUFDO2dCQUNELEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBUztRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQzdCLHlFQUF5RTtJQUMzRSxDQUFDO0lBRUYsY0FBYztJQUNkLGVBQWU7SUFDZCxvQkFBb0IsQ0FBQyxLQUFhO1FBQ2pDLHlCQUF5QjtRQUN6QixzQkFBc0I7UUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUEsZUFBZSxDQUFDLE9BQU87UUFDckIseUNBQXlDO1FBQ3pDLHdCQUF3QjtRQUN4QixJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLDhCQUE4QjtRQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixpRUFBaUU7WUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsc0dBQXNHO2dCQUN0Ryx1Q0FBdUM7Z0JBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUU7Z0JBQzFDLEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDakQsTUFBTSxFQUFFLENBQUM7b0JBQ1QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzFCLHFFQUFxRTtnQkFDdkUsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzdDLE1BQU0sRUFBRSxDQUFDO29CQUNULEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUMxQixpRUFBaUU7Z0JBQ25FLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELGdFQUFnRTtRQUNoRSxzQkFBc0I7UUFFdEIsS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2dCQUM3QywrQkFBK0I7WUFDakMsQ0FBQztZQUVELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDNUMsNENBQTRDO2dCQUM1QywyQkFBMkI7Z0JBQzNCLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUM7b0JBQ25DLGdEQUFnRDtvQkFDaEQsMkJBQTJCO29CQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzdFLG9CQUFvQjtvQkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDbEUsMkJBQTJCO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztZQUVILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDMUUsdURBQXVEO2dCQUN2RCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2pDLDJDQUEyQztvQkFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRzt3QkFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO3dCQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO3dCQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO3FCQUM5QixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNoQywwQ0FBMEM7b0JBQzFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUc7d0JBQ3RDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTt3QkFDOUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzt3QkFDaEMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO3FCQUMxQixDQUFDO2dCQUNKLENBQUM7Z0JBQ0Qsd0NBQXdDO1lBQzFDLENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQztnQkFDM0MsZ0ZBQWdGO2dCQUNoRixJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQzNDLENBQUM7cUJBQUksQ0FBQztvQkFDSixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzVDLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBRyxHQUFHLElBQUksRUFBRSxFQUFDLENBQUM7Z0JBQ1osS0FBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDO29CQUNuQyxJQUFJLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkIsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRCxpQ0FBaUM7UUFDbkMsQ0FBQztRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxzREFBc0Q7UUFDdEQsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbEMsS0FBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFDLENBQUM7b0JBQzFDLElBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFDLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztvQkFDcEMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFRO1FBQ25CLElBQUksZUFBZSxHQUFXLEVBQUUsQ0FBQztRQUNqQyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUMsd0RBQXdEO1lBQ3hELElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDMUIseUNBQXlDO2dCQUN6QyxlQUFlLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQiwwREFBMEQ7UUFFMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBTTtRQUMzQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsYUFBYSxDQUFDLENBQUM7UUFDYixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbkMsNkNBQTZDO1FBQzdDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2hELElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFDLENBQUM7WUFDeEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO2FBQUksQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsUUFBZ0I7UUFFdkIsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDO1FBQ3ZCLENBQUM7YUFDSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUM7UUFDdkIsQ0FBQzthQUNJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQztRQUN2QixDQUFDO2FBQ0ksSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDO1FBQ3ZCLENBQUM7YUFDSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUM7UUFDdkIsQ0FBQztJQUVMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxDQUFTO1FBQzNCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzNDLDRDQUE0QztnQkFDOUMsQ0FBQztxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDOUMsK0NBQStDO2dCQUNqRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDckIsa0NBQWtDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sYUFBYSxHQUFHLElBQUksQ0FBQztZQUNyQix3Q0FBd0M7UUFDMUMsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBTTtRQUNqQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUNuRSxLQUFLLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUssRUFBQyxJQUFTO1FBQ3hCLCtCQUErQjtRQUMvQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6Qyw4QkFBOEI7UUFDOUIsZ0NBQWdDO1FBQ2hDLElBQUksZ0JBQWdCLEdBQ2xCLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUQsSUFDRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDbEMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2xDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDbkMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ25DLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDbEMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2xDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDbkMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ25DLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUNuQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO1FBQ0QseUNBQXlDO1FBQ3pDLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFdBQWdCLENBQUM7UUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUU5QixNQUFNLENBQUMsTUFBTSxHQUFHO1lBQ2QsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDNUIsS0FBSyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQjtZQUNqRiwrREFBK0Q7WUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUM3QixJQUFJLFdBQVcsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQzFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzdDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUN0QyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyx1QkFBdUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzdDLElBQUksaUJBQWlCLEdBQWUsSUFBSSxVQUFVLENBQ2hELFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQ2pDLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUM7SUFFTSx1QkFBdUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUM7SUFFTSx1QkFBdUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzdDLGdEQUFnRDtJQUNsRCxDQUFDLENBQUM7SUFFTSx1QkFBdUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzdDLGdEQUFnRDtJQUNsRCxDQUFDLENBQUM7SUFFRixpQkFBaUI7UUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sZ0JBQWdCLEdBQUcsQ0FBQyxXQUFnQixFQUFFLEVBQUU7UUFDOUMsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3RCLCtCQUErQjtZQUMvQixjQUFjO1lBQ2QsMkRBQTJEO1lBQzNELGtDQUFrQztZQUNsQyxpQ0FBaUM7WUFDakMsS0FBSztZQUNMLElBQUksUUFBUSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDL0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQy9ILENBQUMsSUFBSSxFQUFDLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ2hELENBQUMsRUFBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNWLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQ0EsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sc0NBQXNDO1lBQ3RDLElBQUksUUFBUSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDL0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLG1DQUFtQztZQUNuQywyQ0FBMkM7WUFDMUMsSUFBSSxLQUFLLEdBQUc7Z0JBQ1YsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7Z0JBQ25DLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDbkMsWUFBWSxFQUFHLEVBQUU7YUFDbEIsQ0FBQTtZQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUN6QiwyQkFBMkIsRUFDM0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsRUFDNUIsSUFBSSxDQUFDLHVCQUF1QixDQUM3QixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELGdCQUFnQixDQUFDLFlBQW9CO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxrQkFBa0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQzlDLElBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0QiwrQkFBK0I7WUFDL0IsY0FBYztZQUNkLHNDQUFzQztZQUN0QyxrQ0FBa0M7WUFDbEMsaUNBQWlDO1lBQ2pDLEtBQUs7WUFDTCxJQUFJLFFBQVEsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQzFHLENBQUMsSUFBSSxFQUFDLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ2hELENBQUMsRUFBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNWLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQ0EsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sc0NBQXNDO1lBQ3RDLElBQUksUUFBUSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDL0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLDJDQUEyQztZQUMzQyxJQUFJLEtBQUssR0FBRztnQkFDWCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDbkMsWUFBWSxFQUFHLEVBQUU7YUFDbEIsQ0FBQTtZQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUN6QiwyQkFBMkIsRUFDM0IsQ0FBQyxNQUFNLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM5QixJQUFJLENBQUMsdUJBQXVCLEVBQzVCLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0IsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxXQUFXLENBQUMscUJBQXFCO1FBQy9CLG9CQUFvQjtRQUNwQixJQUFJLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FDakQscUJBQXFCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FDMUMsQ0FBQztRQUNGLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxzREFBc0Q7SUFDakYsQ0FBQztJQUNELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLG1CQUFtQjtJQUNuQixvREFBb0Q7SUFDcEQsMkNBQTJDO0lBQzNDLFFBQVE7SUFDUixxREFBcUQ7SUFDckQsNENBQTRDO0lBQzVDLFFBQVE7SUFFUixJQUFJO0lBRUosdUNBQXVDO0lBQ3ZDLGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNYLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLEtBQUssR0FDUCxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLEtBQUssR0FDUCxFQUFFO29CQUNGLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO3dCQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDL0MsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQUk7UUFDWCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDL0IsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEMsSUFDRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUN0RSxDQUFDO29CQUNELDBCQUEwQjtvQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLCtDQUErQztvQkFDL0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbEMsTUFBTTtvQkFDUixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDOUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVM7UUFDUCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixnREFBZ0Q7UUFDaEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDeEYsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDNUUsQ0FBQztJQUVDLE9BQU87UUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDeEYsMEJBQTBCO29CQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUIsK0NBQStDO29CQUMvQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNsQyxNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUM5RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBQyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFDLEVBQUUsQ0FBQztRQUNoQixJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUMsRUFBRSxDQUFDO1FBR3JCLEtBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDO1lBQ2hDLElBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFBO2dCQUN2QixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFDLENBQUM7WUFFMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFFLFFBQVEsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO2FBQUssSUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUcsQ0FBQyxFQUFDLENBQUM7WUFFdEQsSUFBSSxDQUFDLFlBQVksR0FBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFDLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUNELGFBQWE7UUFDWCxJQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFSixVQUFVLENBQUMsR0FBRSxFQUFFO1lBQ1osUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUMvRCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVCxDQUFDO0lBR0QsNkJBQTZCO0lBQzdCLHNCQUFzQixDQUFDLElBQW1CO1FBQ3pDLGdEQUFnRDtRQUM5QyxLQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUMsQ0FBQztZQUNoRCxJQUFJLGdCQUFnQixHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7WUFDekMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLGdCQUFnQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRCxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUQsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ2xFLGdCQUFnQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRCxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDcEQsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzFELGdCQUFnQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUM5RCxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ2xFLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RCxnQkFBZ0IsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7WUFDdEUsZ0JBQWdCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztZQUNwRixnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvRCxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDcEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDTCw0Q0FBNEM7UUFDNUMsdUNBQXVDO1FBQ3ZDLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLDZDQUE2QztRQUM3QyxrQ0FBa0M7SUFDbEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUF1QixFQUFFLEtBQWE7UUFDaEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBSSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLCtFQUErRTtRQUMvRSxJQUFHLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxFQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDO2FBQUksQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsaUNBQWlDO0lBQ25DLENBQUM7SUFFRCxhQUFhLENBQUMsWUFBb0IsRUFBRSxLQUFhO1FBQy9DLDJCQUEyQjtRQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVqQixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQyxDQUFDO1lBQzlCLElBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUMsQ0FBQztnQkFDdkIsUUFBUSxFQUFFLENBQUM7WUFDYixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLEdBQUUsQ0FBQyxFQUFDLENBQUM7WUFDN0QsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxZQUFZLENBQUMsQ0FBQTtZQUN0RSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxRQUFRLEVBQUUsQ0FBQztRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsRUFBVTtRQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCwrQ0FBK0M7SUFDaEQsR0FBRyxDQUFDLFFBQXVCO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUksS0FBSyxDQUFDO1FBQ3RCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxLQUFLLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBSSxDQUFDLENBQUMsY0FBYyxDQUFDO1FBRXBDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBYSxFQUFDLElBQVE7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7SUFDeEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFTLEVBQUUsSUFBUTtRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBYTtRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxPQUFPLENBQUMsSUFBUTtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXLENBQUMsWUFBaUIsRUFBQyxJQUFRO1FBQ3BDLDZGQUE2RjtRQUM3RixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sYUFBYSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHO1lBQzNFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNwRyxJQUFJLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQztJQUMxQixDQUFDO0lBRUosTUFBTSxDQUFDLElBQVM7UUFDZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0Qsb0RBQW9EO0lBQ25ELGdCQUFnQixDQUFDLFlBQW9CO1FBQ25DLElBQUksV0FBVyxHQUFHLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7d0dBdjhFVSxzQkFBc0I7NEZBQXRCLHNCQUFzQiwyWENoRW5DLHltakNBa3NCTSwyOGhCRHhvQkYsWUFBWSxpV0FBQyxRQUFRLGt5QkFDckIsUUFBUSw0Q0FBRSxXQUFXLDZsREFBRSx1QkFBdUIsa1JBQUUsWUFBWSx1NEJBQUUscUJBQXFCOzs0RkFLMUUsc0JBQXNCO2tCQVhsQyxTQUFTOytCQUNFLG1CQUFtQixjQUVqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWSxFQUFDLFFBQVE7d0JBQ3JCLFFBQVEsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLHFCQUFxQjtxQkFDcEYsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTt3VkFJNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG4vL2ltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UsIEluZGV4RGV0YWlsc30gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb24sXG4gIFF1ZXN0aW9uQm9vayxcbiAgQW5zd2VyQm9vayxcbiAgQW5zd2VyV3JhcHBlcixcbiAgT3B0aW9uLFxuICBPcHRpb25WYWx1ZSxcbiAgQXR0YWNobWVudFdyYXBwZXIsXG4gIEF0dGFjaG1lbnQsXG4gIExvY2FsUXVlc3Rpb25cbn0gZnJvbSBcIi4uLy4uL3dyYXBwZXJcIjtcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXJcIjtcbmltcG9ydCB7XG4gIFRFU1RRVUVTVElPTixcbiAgRFRRVUVTVElPTixcbiAgRklMRVFVRVNUSU9OLFxuICBUQVFVRVNUSU9OLFxuICBSQURJT1FVRVNUSU9OLFxuICBDSEVDS1FVRVNUSU9OLFxuICBCT09LUVVFU1RJT04sXG4gIFRFU1RRQixcbiAgUlRBUVVFU1RJT04gLy9SUyAwNkpBTjI1XG59IGZyb20gXCIuLi8uLi9zYW1wbGVcIjtcbmltcG9ydCB7IGZyb20gfSBmcm9tIFwicnhqc1wiO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEkxOG5QaXBlIH0gZnJvbSBcIi4uLy4uL2kxOG4ucGlwZVwiO1xuaW1wb3J0IHsgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9jdXN0b20tZHJvcGRvd24vY3VzdG9tLWRyb3Bkb3duLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTnh0RGF0YXRhYmxlIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFBpY2tMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3BpY2stbG9jYXRpb24vcGljay1sb2NhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbnh0LWlucHV0L254dC1pbnB1dC5jb21wb25lbnRcIjtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJsaWItcXVlc3Rpb25uYWlyZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxOeHRJbnB1dCxcbiAgICBJMThuUGlwZSwgRm9ybXNNb2R1bGUsIEN1c3RvbURyb3Bkb3duQ29tcG9uZW50LCBOeHREYXRhdGFibGUsIFBpY2tMb2NhdGlvbkNvbXBvbmVudFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFtcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJZDogc3RyaW5nO1xuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xuICBASW5wdXQoKSB0a246IHN0cmluZztcbiAgQElucHV0KCkgYXBpOiBzdHJpbmc7IC8vIFZEIGdldHRpbmcgdGhlIGFwaSBhcyBpbnB1dFxuICBASW5wdXQoKSBpc0VkaXQ6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBoYW5kbGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlQm9vazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVTdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHBhcmFtczogUGFyYW1zO1xuICBwdWJsaWMgZGV2aWNlSW5mbyA9IG51bGw7XG4gIHB1YmxpYyBhYkl0ZW06IEFuc3dlckJvb2s7XG4gIHB1YmxpYyBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgcHVibGljIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIHB1YmxpYyBhbnN3ZXJXcmFwOiBBbnN3ZXJXcmFwcGVyO1xuIFxuICAvLyBDT05ESVRJT05BTCBUWVBFU1xuICBwdWJsaWMgcmFkaW9GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuIFxuICAvLyBPUFRJT05PTkxZIFRZUEVTXG4gIHB1YmxpYyBkcm9wZG93bkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrYm94RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuIFxuICAvLyBVTkNPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyB0ZXh0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBydGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkdEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRpbWVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZmlsZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGVtYWlsRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbnVtYmVyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYWxwaGFudW1lcmljRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYm9va0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxpc3RGbGFnOiBib29sZWFuPSBmYWxzZTtcbiAgLy9CYWNrIGJ1dHRvblxuICBwdWJsaWMgYmFja0J1dHRvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gVkQgZGlzYWJsZWRcbiAgcHVibGljIGlzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9wdGlvblZhbHVlczogT3B0aW9uVmFsdWVbXSA9IFtdO1xuICBwdWJsaWMgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBpbnBWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgYW5zd2VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgZGF0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkaG91ck1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkbWludXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgYXR0YWNobWVudHNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzcU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBsb2NhbFN1YlF1ZXN0aW9uczogTG9jYWxRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBxdWVzdGlvblN0YWNrID0gW107XG4gIHB1YmxpYyBxdWVzdGlvbk5hbWUgPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkTGlzdDogYW55W10gPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRJZDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGF0dGFjaG1lbnQ6IGFueTtcbiAgcHVibGljIGFsbG93ZWRGaWxlRXh0ZW5zaW9uOiBzdHJpbmdbXTtcbiAgcHVibGljIGZpbGVFeGNlZWRlZExpbWl0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlVHlwZUluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFjazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFja2ljb246IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgY2hlY2s6IGJvb2xlYW47XG4gIHB1YmxpYyBwb3A6IGJvb2xlYW47XG4gIHB1YmxpYyBsb2NhbERhdGU6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXRocXVlc3Rpb246IG51bWJlcjtcbiAgcHVibGljIHBlcmNlbnQ6IG51bWJlcjtcbiAgcHVibGljIGNvdW50OiBudW1iZXI7XG4gIHB1YmxpYyB0YUZvY3VzT3V0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBub3RWYWxpZEFjY051bTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3BsQ0NCYWNrQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN1bW1hcnkgPSBbXTtcbiAgcHVibGljIGxvY2FsU3ViUU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGtleUluZGV4OiBudW1iZXIgPSAwO1xuICAvL3B1YmxpYyBzcXVlczogc3RyaW5nO1xuICBwdWJsaWMgc2VsRGF0ZTogYW55ID0ge307XG4gIHB1YmxpYyBzZWxlY3REYXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcbiAgcHVibGljIGlubmVyaHRtbDogYW55O1xuICBwdWJsaWMgcG9zc2liaWxpdGllczogYW55O1xuICBwdWJsaWMgaW5uZXJodG1sMTogYW55O1xuICBwdWJsaWMgc3VtbWFyeURhdGEgPVtdO1xuIFxuICBwdWJsaWMgaG91cnM6IGFueVtdID0gW1xuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICBdO1xuIFxuICBwdWJsaWMgbWludXRlczogc3RyaW5nW10gPSBbXG4gICAgXCIwMFwiLFxuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICAgIFwiMTNcIixcbiAgICBcIjE0XCIsXG4gICAgXCIxNVwiLFxuICAgIFwiMTZcIixcbiAgICBcIjE3XCIsXG4gICAgXCIxOFwiLFxuICAgIFwiMTlcIixcbiAgICBcIjIwXCIsXG4gICAgXCIyMVwiLFxuICAgIFwiMjJcIixcbiAgICBcIjIzXCIsXG4gICAgXCIyNFwiLFxuICAgIFwiMjVcIixcbiAgICBcIjI2XCIsXG4gICAgXCIyN1wiLFxuICAgIFwiMjhcIixcbiAgICBcIjI5XCIsXG4gICAgXCIzMFwiLFxuICAgIFwiMzFcIixcbiAgICBcIjMyXCIsXG4gICAgXCIzM1wiLFxuICAgIFwiMzRcIixcbiAgICBcIjM1XCIsXG4gICAgXCIzNlwiLFxuICAgIFwiMzdcIixcbiAgICBcIjM4XCIsXG4gICAgXCIzOVwiLFxuICAgIFwiNDBcIixcbiAgICBcIjQxXCIsXG4gICAgXCI0MlwiLFxuICAgIFwiNDNcIixcbiAgICBcIjQ0XCIsXG4gICAgXCI0NVwiLFxuICAgIFwiNDZcIixcbiAgICBcIjQ3XCIsXG4gICAgXCI0OFwiLFxuICAgIFwiNDlcIixcbiAgICBcIjUwXCIsXG4gICAgXCI1MVwiLFxuICAgIFwiNTJcIixcbiAgICBcIjUzXCIsXG4gICAgXCI1NFwiLFxuICAgIFwiNTVcIixcbiAgICBcIjU2XCIsXG4gICAgXCI1N1wiLFxuICAgIFwiNThcIixcbiAgICBcIjU5XCIsXG4gIF07XG4gXG4gIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzZWxlY3RlZE1pbnV0ZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNlbGVjdGVkTWVyaWRpZW06IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWUxOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYm9va0ZsYWdBY2NlcHQ6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVjb3JkSWQ6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWVzdGlvbklkOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyVHlwZTogc3RyaW5nO1xuIFxuICBzdGFydF9kYXRlPzogYW55O1xuIFxuICAvL3NlYXJjaCBjb21wb25lbnRcbiAgcHVibGljIHRlbXBvQWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkUG9zdGFsY29kZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQcm92aW5jZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRDaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZEFyZWE6IHN0cmluZztcbiAgcHVibGljIGxvY2FsYWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIGFsbEFkZHJlc3MgOmFueSBbXSA9IFtdO1xuICBwdWJsaWMgUG9zdGFsQ29kZTpzdHJpbmc7XG4gIHB1YmxpYyBwbGFjZXM6IGFueVtdID0gW107XG4gIHB1YmxpYyBwcm92aW5jZTphbnlbXT1bXTtcbiBcbiAgLy8gUkVRLTAxIFBST0dSRVNTIEJBUlxuICBwdWJsaWMgcHJvZ3Jlc3NTdHlsZTogc3RyaW5nID0gXCIwJVwiO1xuICBwdWJsaWMgYW5zd2VyQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBpbmRleENvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgYWRkRmxhZzogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBteURhdGVQaWNrZXJPcHRpb25zOiBhbnkgPSB7fTtcbiAgaW5kaXZpZHVhbEJvb2tCdXR0b246IGJvb2xlYW47XG4gXG4gIHB1YmxpYyBhbGxJbnB1dFZhbHVlcyA9IFtdOyAvLyBIQSAwMkZFQjI0IFRvIHN0b3JlIGFsbCB0aGUgaW5wdXQgdmFsdWVzXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICAvL3ByaXZhdGUgZGJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcbiAgKSB7XG4gICAgLy8gVkQgMTBBdWcyNC1zcGlubmVyIGNoYW5nZXNcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlLWZhZGVcIjtcbiAgfVxuIFxuICAvLyBIQSAwMkZFQjI0IE9uIGRhdGUgY2hhbmdlIG5lZWQgdG8gc3RvcmUgdGhlIGNoYW5nZWQgdmFsdWUgc28gcGFzc2luZyB0aGUgcXVlc3Rpb25cbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgb25EYXRlQ2hhbmdlZChldmVudDogYW55LCBxdWVzOiBhbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG9uRGF0ZUNoYW5nZWQnKTtcbiAgICAvL3RvIGNoYW5nZSB0aGUgYm9yZGVyIGNvbG9yXG4gICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCIvXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCIvXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRUxTRSBvZiBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS50eXBlID09XCJCb29rXCIpe1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xuICAgIH1cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBodG1sRWxlbWVudFxuICAgICAgLml0ZW0oMClcbiAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlci1jb2xvcjojODdiZTFjO3dpZHRoOjEwMCVcIik7XG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgZXZlbnQpO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmRhdGUuZGF5ID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLnllYXIgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICAgdGhpcy5hbnN3ZXJNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5zZWxlY3REYXRlID0gJyt0aGlzLnNlbGVjdERhdGUpO1xuICAgIC8vIEhBIDAyRkVCMjQgQXNzaWduaW5nIGlucHV0IHZhbHVlIHRvIHF1ZXMgaW5wdXRcbiAgICBxdWVzLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGV2aWNlSW5mbyA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XG4gICAgICBpZiAocGFyYW1zWydpZCddKSB7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSB0cnVlO1xuICAgICAgfWVsc2UgaWYocGFyYW1zWydib29rbGV0SWQnXSl7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSBcIkFNXCI7XG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICAvL2NvbnNvbGUubG9nKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhZGRyZXNzJykpO1xuICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSl7XG4gICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ0xlbmd0aD0nK3RoaXMubG9jYWxhZGRyZXNzLmxlbmd0aCk7XG4gICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XG4gICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZih0aGlzLmRldmljZUluZm8ub3MgPT09ICdpT1MnKXtcbiAgICAgICAgbGV0IG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oXCJhZGRyZXNzREJcIik7XG4gICAgICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5ldyA9IGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0O1xuICAgICAgICAgIGxldCBkYk5ldyA9IHRhcmdldE5ldy5yZXN1bHQ7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdE5ldyA9IGRiTmV3LnRyYW5zYWN0aW9uKCdhZGRyZXNzVGFibGUnKVxuICAgICAgICAgICAgICAgIC5vYmplY3RTdG9yZSgnYWRkcmVzc1RhYmxlJylcbiAgICAgICAgICAgICAgICAuZ2V0KDEpO1xuICAgICAgICAgIHJlcXVlc3ROZXcub25zdWNjZXNzID0gKCk9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBWYXIgPSByZXF1ZXN0TmV3LnJlc3VsdDtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKHRlbXBWYXIud2hvbGVBZGRyZXNzU3RyaW5nKTtcbiAgICAgICAgICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFNLUzIwTUFSMjUgRW5zdXJlIHRoZSBjaGlsZCBjb21wb25lbnQgaXMgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2RcbiAgICAgLy8gQVAtMjVNQVIyNSBFbXB0eSBzdHJpbmcgcmVwbGFjZSBudWxsXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgICBsZXQgaW5wdXQ6IGFueTtcbiAgICAgICAgaWYocXVlcy50eXBlID09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09ICdSYWRpbycgfHwgcXVlcy50eXBlID09ICdMb2NhdGlvbicpe1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dFsndmFsdWVPYmonXSA9IHF1ZXMuaW5wdXQgfHwgbnVsbFxuICAgICAgICAgIGlucHV0WydyZWZlcmVuY2VGaWVsZCddID0gcXVlcy5yZWZlcmVuY2VGaWVsZCB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ2Zyb21RdWVzdGlvbklkJ10gPSBxdWVzLmlkIHx8IG51bGxcbiAgICAgICAgfSBlbHNlIGlmKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpe1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dFsndmFsdWUnXSA9IHF1ZXMuaW5wdXQgfHwgbnVsbFxuICAgICAgICB9IGVsc2UgaWYocXVlcy50eXBlID09ICdMaXN0Jyl7XG4gICAgICAgICAgaW5wdXQgPSB7fVxuICAgICAgICAgIHF1ZXNbJ3N1YlRleHQnXSA9IHR5cGVvZiBxdWVzPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IHF1ZXM/LnN1YlRleHQgOiBKU09OLnBhcnNlKHF1ZXNbJ3N1YlRleHQnXSk7XG4gICAgICAgICAgbGV0IGFwaU9iajogYW55ID0gcXVlcy5zdWJUZXh0O1xuICAgICAgICAgIGlucHV0Wyd2YWx1ZU9iaiddID0gcXVlcy5pbnB1dCB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ2ZpZWxkJ10gPSBhcGlPYmouZGVmYXVsdEZpZWxkIHx8IGFwaU9iai5maWVsZFswXSB8fCBhcGlPYmouZmllbGQgfHwgbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0ID0gcXVlcy5pbnB1dCB8fCBudWxsXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShpbnB1dCwgcXVlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuLy8gY2FsbCB3aGVuIGJvb2tJZCBjaGFuZ2VzXG4gIG5nT25DaGFuZ2VzKHNpbXBsZWNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZihzaW1wbGVjaGFuZ2VzWydxYklkJ10pe1xuICAgICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICB9XG4gIH1cbiAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIGRhdGVfVGltZU1hcCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkaG91ck1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICB0aGlzLnNlbGVjdGVkbWludXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gIH1cbiBcbiAgZGF5KCkge1xuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGRhdGVGb3JtYXQ6IFwiZGQubW0ueXl5eVwiLFxuICAgICAgc3VuSGlnaGxpZ2h0OiBmYWxzZSxcbiAgICAgIGRpc2FibGVEYXRlUmFuZ2VzOiBbXSxcbiAgICAgIHNob3dDbGVhckRhdGVCdG46IGZhbHNlLFxuICAgICAgZGlzYWJsZVNpbmNlOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVVudGlsOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgc2hvd1RvZGF5QnRuOiBmYWxzZSxcbiAgICAgIGRheUxhYmVsczoge1xuICAgICAgICBzdTogXCJEb21cIixcbiAgICAgICAgbW86IFwiTHVuXCIsXG4gICAgICAgIHR1OiBcIk1hclwiLFxuICAgICAgICB3ZTogXCJNacOpXCIsXG4gICAgICAgIHRoOiBcIkp1ZVwiLFxuICAgICAgICBmcjogXCJWaWVcIixcbiAgICAgICAgc2E6IFwiU8OhYlwiLFxuICAgICAgfSxcbiAgICAgIG1vbnRoTGFiZWxzOiB7XG4gICAgICAgIDE6IFwiRW5lXCIsXG4gICAgICAgIDI6IFwiRmViXCIsXG4gICAgICAgIDM6IFwiTWFyXCIsXG4gICAgICAgIDQ6IFwiQWJyXCIsXG4gICAgICAgIDU6IFwiTWF5b1wiLFxuICAgICAgICA2OiBcIkp1blwiLFxuICAgICAgICA3OiBcIkp1bFwiLFxuICAgICAgICA4OiBcIkFnb1wiLFxuICAgICAgICA5OiBcIlNlcFwiLFxuICAgICAgICAxMDogXCJPY3RcIixcbiAgICAgICAgMTE6IFwiTm92XCIsXG4gICAgICAgIDEyOiBcIkRpY1wiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gXG4gIGNoYW5nZSgpIHtcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8IHRoaXMuaW5wVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBodG1sRWxlbWVudFxuICAgICAgICAuaXRlbSgwKVxuICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlcjogMXB4IHNvbGlkIHJlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgLml0ZW0oMClcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiAxcHggc29saWQgIzg3YmUxYyA7d2lkdGg6MTAwJVwiKTtcbiAgICB9XG4gIH1cbiBcbiAgcHJvY2Vzc1FCKCkge1xuICAgIFxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcbiAgICAvL3RoaXMucWJJdGVtXG4gICAgY29uc29sZS5sb2codGhpcy5xYklkKTtcbiAgICAvL2NvbnNvbGUubG9nKCdWZXJzaW9uIGluIHByb2Nlc3MgaXMgOGJmMTFlZmE3ZjkxYTM5MWQ5NTdiZjZiNTA3OGVkYzdlNjU2YjY3YycpO1xuICAgIGlmICh0aGlzLnFiSWQpIHtcbiAgICAgIGlmICh0aGlzLnFiSWQubGVuZ3RoID09IDE4KSB7XG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uQm9vayh0aGlzLnFiSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBlbHNlIHBhcnQnKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgUXVlc3Rpb24gRGlyZWN0bHkgZm9yIHRlc3RpbmcnKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBEVFFVRVNUSU9OO1xuICAgICAgICB0aGlzLnFiSXRlbSA9IFRFU1RRQjtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiBcbiAgdHJpbUxhc3REdW1teShpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpbnB1dCA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5sZW5ndGggLSA2KSk7XG4gIH1cbiBcbiAgZ2V0UHJvcGVyVGltZShkZWY6IHN0cmluZywgaW5wdXQ6IHN0cmluZykge1xuICAgIHJldHVybiBpbnB1dCA9PT0gXCJcIiA/IGRlZiA6IGlucHV0O1xuICB9XG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAvL1N1bW1hcnkgUXVlc3Rpb24gQ2xpY2thYmxlIExvZ2ljXG4gIGhhbmRsZUVkaXRDbGljayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNraWNvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmFiSXRlbT8uc3RhdHVzID09IFwiUGVuZGluZ1wiKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih2YWx1ZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCcgaW4gc2lkZSBzdW1tYXJ5b3BlbicrIHRoaXMuc3VtbWFyeS5sZW5ndGgpO1xuIFxuICAgICAgLy9Bc3NpZ24gcXVlc3Rpb24gc3RhY2sgbGVuZ3RoIGZyb20gc3VtbWFyeSBwYXJ0XG4gICAgICB2YXIgYXJyYXlMZW5ndGggPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgdmFyIGxlbmd0aFZhbHVlID0gdGhpcy5xdWVzdGlvblN0YWNrLmluZGV4T2YodmFsdWUpO1xuIFxuICAgICAgZm9yIChsZXQgaSA9IGFycmF5TGVuZ3RoOyBpID4gbGVuZ3RoVmFsdWU7IGktLSkge1xuICAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgICAgdmFyIGFycmF5TGVuZ3RoMSA9IHRoaXMucXVlc3Rpb25OYW1lLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGFycmF5TGVuZ3RoMTsgaiA+IGxlbmd0aFZhbHVlOyBqLS0pIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICB0aGlzLnN1bW1hcnlEYXRhID0gW107XG4gICAgfVxuICB9XG4gXG4gIGhhbmRsZU5leHRDbGljaygpIHtcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmJhY2tCdXR0b25GbGFnID0gZmFsc2U7XG4gICAgdGhpcy5BbnN3ZXJTYXZlKCk7XG4gIH1cbiBcbiAgQW5zd2VyU2F2ZSgpe1xuICAgIC8vdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbklkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBxdWVzdGlvblR4dD0nJztcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0ubmV4dFRyYWNraW5nSWQpO1xuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgLy8gTVIgMzBKQU4yNCAtIEFkZGVkIENvbmRpdGlvbiBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yIChCb29rIFF1ZXN0aW9uIGFuZCBOb24tQm9vaylcbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9iamVjdHMgdG8gc3RvcmUgdGhlIHZhbHVlc1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0KXtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpOyAvLyBSZW1vdmUgSFRNTCB0YWdzIGZyb20gdGhlIHF1ZXN0aW9uVGV4dCB2YWx1ZVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcXVlc3Rpb25UZXh0ID0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xuICAgICAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgIH1cbiBcbiAgICAgICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcbiAgICAvLyB0aGlzLnNxdWVzICs9IGNRdWVzdGlvbi5xdWVzdGlvbiArICdAQCMjJCQnO1xuICAgIHZhciBxdWVzVmFsdWUgPSBjUXVlc3Rpb24ucXVlc3Rpb25UZXh0O1xuICAgIHZhciBtYWlsZm9ybWF0ID1cbiAgICAgIFwiXlteLl1bYS16QS1aMC05ISMkJSYnKistLz0/Xl9ge3x9fl0rW14uXUBbXi1dW2EtekEtWjAtOS4tXStbXi1dLlthLXpBLVpdezIsfSRcIjtcbiBcbiAgICAvLyBQcm9jZXNzIElucHV0c1xuICAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICAvLyBTYXZlIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpbiB0aGUgaW5wVmFsdWVcbiAgICAgIGZvciAodmFyIG92IG9mIHRoaXMub3B0aW9uVmFsdWVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jaGVja2VkKSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IG92LnZhbHVlICsgXCJAQCMjJCRcIjtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG92Lm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVtYWlsRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxwaGFudW1lcmljRmxhZykge1xuICAgICAgdmFyIGlzTm90VmFsaWRBY2NOdW0gPSB0aGlzLmlzTm90VmFsaWRBY2NOdW1iZXIodGhpcy5pbnBWYWx1ZSk7XG4gICAgICBpZiAoaXNOb3RWYWxpZEFjY051bSkge1xuICAgICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLm5leHRRdWVzdGlvbjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJGbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaXRlbSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcbiBcbiAgICAgICAgaWYoaXRlbS50eXBlID09IFwiRGF0ZVwiIHx8IGl0ZW0udHlwZSA9PSBcIlRpbWVcIikge1xuICAgICAgICAgIC8vdGhpcyBvbmVcbiAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgICAgICAgaWYoaXRlbS50eXBlID09IFwiRGF0ZVwiKXtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIHR5cGUgY29uZCA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKVxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0RGF0ZSlcbiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgaWYoaXRlbS50eXBlID09IFwiVGltZVwiKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRIb3VyK3RoaXMuc2VsZWN0ZWRNZXJpZGllbSt0aGlzLnNlbGVjdGVkTWludXRlKVxuIFxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBQTVwiO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfVxuIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSBzZWxlY3RIb3VyIGFuZCBzZWxlY3RNaW51dGUgY29uZGl0aW9uXG4gICAgICAgICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLnNlbERhdGUgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbnBWYWx1ZSB8fCAhdGhpcy5zZWxlY3REYXRlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG51bGwgY29uZGl0aW9uIG9mIGlucHV0Jyk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgICAgICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgICAgICAgLml0ZW0oMClcbiAgICAgICAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXItYm90dG9tOiAxcHggc29saWQgcmVkICFpbXBvcnRhbnQ7XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgfVxuICAgICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIHRleHQgZXJyb3IgY29uZGl0aW9uXG4gICAgICBpZihpdGVtLnR5cGU9PSBcIlRleHRcIil7XG4gICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmlucFZhbHVlID0gaXRlbS5pbnB1dDsgNjM0XG4gICAgICB9XG4gXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXRlbS5pc09wdGlvbmFsICYmXG4gICAgICAgIC8vICAoKGl0ZW0udHlwZSAhPSBcIkZpbGVcIiAmJiAhaXRlbS5pbnB1dCAmJiBpdGVtLnR5cGUgIT0gJ0RhdGUnICYmIGl0ZW0udHlwZSAhPSAnVGltZScpIHx8XG4gICAgICAgICAvLyAgIChpdGVtLnR5cGUgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMCkpXG4gICAgICAgICAoaXRlbS50eXBlID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiUmFkaW9cIikge1xuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJEcm9wZG93blwiKSB7XG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgICBpdGVtLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiRW1haWxcIikge1xuICAgICAgICAgIGlmIChpdGVtLmlucHV0ICYmIGl0ZW0uaW5wdXQubWF0Y2gobWFpbGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlJyArIHJlY29yZElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgICAgICB9IC8vaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlO1xuIFxuICAgICAgICB0aGlzLmlucFZhbHVlICs9IChpdGVtLmlucHV0ICE9IHVuZGVmaW5lZCA/IGl0ZW0uaW5wdXQgOiBcIlwiKSArIFwiQEAjIyQkXCI7XG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0ucXVlc3Rpb24gKyBcIkBAIyMkJFwiO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgYm9vazEnICsgdGhpcy5pbnBWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIHF1ZXN0aW9uVHh0ID0gcXVlc3Rpb25UeHQgPyB0aGlzLnRyaW1MYXN0RHVtbXkocXVlc3Rpb25UeHQpIDogcXVlc3Rpb25UeHQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSAnJztcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcbiAgICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpe1xuICAgICAgICB0aGlzLnN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yICh2YXIgbG9jYWxRdWVzIG9mIHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICAgICAgIGlmKCFsb2NhbFF1ZXMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgbG9jYWxRdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGlmKCF0aGlzLnN1YkFuc01hcC5oYXMobG9jYWxRdWVzLmlkKSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5pZCxsb2NhbFF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAgZWxzZScpXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLmlkLHRoaXMuc3ViQW5zTWFwLmdldChsb2NhbFF1ZXMuaWQpICsgJyQkQEAjIycrbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiBcbiAgICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZpbGUgdHdvJylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJBbnNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9ICh2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnKSArICdAQCMjJCQnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kcm9wZG93bkZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcbiAgICAgIC8vdGhpcyBvbmVcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjEyXCIsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjAwXCIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUubGVuZ3RoKTtcbiBcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImFucyA9PiBcIiArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICAgIHZhciBkYXRlMTogYW55ID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTEgPSBkYXRlMVswXS5zcGxpdChcIi9cIik7XG4gICAgICAgICAgZGF0ZTEgPSBbZGF0ZTFbMl0sIGRhdGUxWzFdLCBkYXRlMVswXV0uam9pbihcIi1cIik7XG4gICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMSlcbiAgICAgICAgICB2YXIgZGF0ZTI6IGFueSA9IHRoaXMuaW5zdXJhbmNlU3RhcnREYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGRhdGUyWzBdKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUyKTtcbiAgICAgICAgICBpZiAoZGF0ZTEgPCBkYXRlMikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9XG4gICAgICAgICAgICAgIFwiTm8gZXMgcG9zaWJsZSBkYXIgZGUgYWx0YSBsYSByZWNsYW1hY2nDs24gZGViaWRvIGEgcXVlIGxhIGZlY2hhIGRlbCBpbmNpZGVudGUgZXMgYW50ZXJpb3IgYSBsYSBmZWNoYSBkZSBjb250cmF0YWNpw7NuIGRlIGxhIHDDs2xpemFcIjtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMuZGF0ZUZsYWcpIHtcbiAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA1KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLnRpbWVGbGFnKSB7XG4gICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNyB8fCB0aGlzLnNlbERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ2ZvdXInKVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xuICAgICAgICAgICAgXCJAIyRcIiArXG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICBcIixcIjtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmlsZXNzcycgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wVmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiBcbiAgICAvLyBDaGVjayBmb3IgdGhlIGFuc3dlciBiZWZvcmUgc2F2aW5nIHRvIHRoZSBEQlxuICAgIGlmICghdGhpcy5xdWVzdGlvbkl0ZW0uaXNPcHRpb25hbCAmJiAhdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgLy8gU2hvdyBlcnJvciB0aGF0IHRoZSBxdWVzdGlvbiBtdXN0IGJlIGFuc3dlcmVkXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTYXZlIHRoZSBBbnN3ZXIgaW4gdGhlIERCXG4gICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICB0aGlzLmFuc3dlcldyYXAuYWJJZCA9IHRoaXMuYWJJdGVtLmlkO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzSWQgPSBjUXVlc3Rpb24uaWQ7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNWYWx1ZSA9IHF1ZXNWYWx1ZTtcbiAgICB0aGlzLmFuc3dlcldyYXAucVR5cCA9IHR5cDtcbiAgICAvLyBIQSAwMkZFQjI0IFRvIGRpc3BsYXkgdGhlIHZhbHVlcyBpbiBzdW1tYXJ5IHVzaW5nIHRoaXNcbiAgICB0aGlzLmFsbElucHV0VmFsdWVzID0gW107XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBpbnB1dFZhbHVlID0ge307XG4gICAgICBpbnB1dFZhbHVlWydJZCddID0gZWxlbWVudD8uaWQ7XG4gICAgICBpbnB1dFZhbHVlWyd0eXBlJ10gPSBlbGVtZW50Py50eXBlO1xuICAgICAgaW5wdXRWYWx1ZVsncmVmZXJlbmNlRmllbGQnXSA9IGVsZW1lbnQ/LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgaW5wdXRWYWx1ZVsncXVlc3Rpb25UZXh0J10gPSBlbGVtZW50Py5xdWVzdGlvblRleHQ7XG4gICAgICBpbnB1dFZhbHVlWydpbnB1dCddID0gZWxlbWVudD8uaW5wdXQ7XG4gICAgICBpbnB1dFZhbHVlID8gdGhpcy5hbGxJbnB1dFZhbHVlcy5wdXNoKGlucHV0VmFsdWUpIDogdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICB9KTtcbiAgICB0aGlzLmFuc3dlcldyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9IHRoaXMuaW5wVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5ncm91cE5hbWU7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuYW5zd2VyV3JhcC5xVHlwJyx0aGlzLmFuc3dlcldyYXAucVR5cCk7XG4gICBpZih0aGlzLmFuc3dlcldyYXAucVR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKXtcbiAgICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9ICdFUycrIHRoaXMuaW5wVmFsdWU7XG4gICAgICAvLyBjb25zb2xlLmxvZygnQmFuayBjb25kaXRpb24nKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSk7XG4gICAgfVxuICAgIC8qaWYgKGNRdWVzdGlvbi50eXBlID09ICdCb29rJyl7XG4gICAgZm9yICh2YXIgcWIgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKXtcbiAgICAgIC8vY29uc29sZS5sb2cocWIucXVlc3Rpb24rJyoqKionK1wiQEAjIyQkXCIpXG4gICAgfVxuICB9Ki9cbiAgICAvL3RoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLnF1ZXN0aW9uO1xuICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgICAvLyBlbWl0IHRoZSBjdXJyZW50IHF1ZXN0aW9uIHdpdGggaW5wdXQgdG8gcGFyZW50XG4gICAgbGV0IHF1ZXN0aW9uQW5zID0ge31cbiAgICBxdWVzdGlvbkFuc1sncXVlc3Rpb25EZXRhaWwnXSA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHF1ZXN0aW9uQW5zWydhbnN3ZXJCb29rRGV0YWlsJ10gPSB0aGlzLmFiSXRlbTtcbiAgICBjb25zb2xlLmxvZyhxdWVzdGlvbkFucyk7XG4gICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXN0aW9uQW5zKTtcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25JdGVtLS0+Jyk7XG4gICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gcXVlc3Rpb25UeHQgPyBxdWVzdGlvblR4dCA6IGNRdWVzdGlvbi5xdWVzdGlvbjtcbiAgICB0aGlzLnNhdmVBbnN3ZXIoKTtcbiAgfVxuICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgbmV4dCgpIHtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcbiAgICAvLyBJZiBubyBlcnJvciB0aGVuIG1vdmUgdG8gbmV4dCBzdGVwc1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiBcbiAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChjUXVlc3Rpb24uaWQpO1xuICAgIC8vICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKGNRdWVzdGlvbi5OYW1lKTtcbiBcbiAgICAvLyBDT05ESVRJT05BTCB2cyBPUFRJT05PTkxZICYgVU5DT05ESVRJT05BTFxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IGV2ZW4gaW4gZWxzZSBjb25kaXRpb25zIGJlbG93XG4gICAgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIGZvciAodmFyIGNPcHQgb2YgY1F1ZXN0aW9uLm9wdGlvbnMpIHtcbiAgICAgICAgLy8gUmFkaW8gLyBEYXRhXG4gICAgICAgIC8vY29uc29sZS5sb2coJ09wdGlvbiA9PiAnICsgY09wdC52YWx1ZSArICcgbWF0Y2hpbmcgd2l0aCAnICsgYW5zVmFsKTtcbiAgICAgICAgaWYgKGNPcHQudmFsdWUgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ01hdGNoIEZvdW5kIHVzaW5nICcgKyBjT3B0Lm5leHRRdWVzdGlvbik7XG4gICAgICAgICAgaWYoY09wdC5uZXh0UXVlc3Rpb24pe1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNPcHQubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb25kaXRpb25hbCByZWNvcmQgaWQnKyB0aGlzLnJlY29yZElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ291bGQgYmUgb2YgdHlwZSBEYXRhIGFuZCBleGlzdGluZyB2YWx1ZVxuICAgICAgaWYgKHRoaXMucmVjb3JkSWQgJiYgdHlwID09IFwiRGF0YVwiKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiT1BUSU9OT05MWVwiKSB7XG4gICAgICAvLyAgT1BUSU9OT05MWSBsb2dpY1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJVTkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIC8vVW5jb25kaXRpb25hbCAgbG9naWNcbiAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgdW5jb25kaXRpb25hbFwiKTtcbiAgICAgIC8vaW5zaWRlIEJvb2sgVHlwZVxuICAgICAgaWYgKGNRdWVzdGlvbi50eXBlID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5xdWVzdGlvbk51bWJlciAhPSc2Jykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGJvb2tcIik7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhvcHQudHlwZSk7XG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9b3B0MS5uZXh0UXVlc3Rpb24gfHwgY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdFbHNlJyt0aGlzLnJlY29yZElkKVxuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24udHlwZSA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPT0nNicgKSB7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uc3ViUXVlc3Rpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpe1xuICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gb3B0MS5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiBcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIGVsc2UgdG8ga2VlcCB0aGUgYXNzaWdubWVudCBkZWZhdWx0XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgIH1cbiBcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICAvLyBDYWxsaW5nIHRoZSBwcm9ncmVzIGJhciB1cGRhdGUgZnVuY3Rpb25cbiAgICB0aGlzLmFuc3dlckNvdW50Kys7XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuIFxuIFxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuIFxuICAgIGlmICh0aGlzLnJlY29yZElkKSB7XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnJlY29yZElkKTtcbiAgICAgIHRoaXMucG9wID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3AgPSBmYWxzZTtcbiAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuIFxuICAgICAgdGhpcy5yZXNldEZsYWcodHlwKTtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gbnVsbDtcbiBcbiAgICAgIC8vIFNob3cgU3VtbWFyeVxuICAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uU3RhY2spIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgUXVlc3Rpb24gPT4gJyArIHEpO1xuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcbiAgICAgICAgaWYgKGFuc1dyYXApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdIYW5kbGluZyBBbnN3ZXIgZm9yICcgKyBhbnNXcmFwLnF1ZXNJZCArICcgb2YgdHlwZSAnICsgYW5zV3JhcC5xVHlwKTtcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xuICAgICAgICAgICAgdmFyIG5ld1N0ciA9ICcnO1xuICAgICAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIGFuc1dyYXAuYW5zVmFsdWUuc3BsaXQoJ0BAIyMkJCcpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xuICAgICAgICAgICAgICAvLyAgaWYoYW5zU3RyMS5pbmNsdWRlcygnYW5zd2VyU3RyaW5nJykpeyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgICAgICAgICAgLy8gICBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gYW5zU3RyMS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgLy8gIGFuc1N0cjEgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xuICAgICAgICAgICAgICAvLyAgfVxuICAgICAgICAgICAgICAgIGlmIChhbnNTdHIxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gYW5zU3RyMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSAnOyAnICsgYW5zU3RyMTsgIC8vY29tbWEoLCkgY2hhbmdlZCBhcyBzZW1pIGNvbG9uKDspIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSgsKVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyhhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgYXR0IG9mIHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KGFuc1dyYXAucXVlc0lkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5zdGFydHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDEsIG5ld1N0ci5sZW5ndGgpIDogKG5ld1N0ci5lbmRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygwLCBuZXdTdHIubGVuZ3RoIC0gMSkgOiBuZXdTdHIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5zV3JhcC5hbnNWYWx1ZSA9IG5ld1N0cjtcbiAgICAgICAgICAgIGFuc1dyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgQ2hlY2sgaWYgdGhlIHN1bW1hcnkgYWxyZWFkeSBjb250YWlucyBhbiBlbnRyeSBmb3IgdGhlIHNhbWUgcXVlc0lkXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdBbnNXcmFwID0gdGhpcy5zdW1tYXJ5LmZpbmQoaXRlbSA9PiBpdGVtLnF1ZXNJZCA9PT0gYW5zV3JhcC5xdWVzSWQpO1xuICAgICAgICAgIGlmIChleGlzdGluZ0Fuc1dyYXApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGV4aXN0cywgdXBkYXRlIHRoZSBhbnNWYWx1ZSBhbmQgbXlWYWxcbiAgICAgICAgICAgIGV4aXN0aW5nQW5zV3JhcC5hbnNWYWx1ZSA9IGFuc1dyYXAuYW5zVmFsdWU7XG4gICAgICAgICAgICBleGlzdGluZ0Fuc1dyYXAubXlWYWwgPSBhbnNXcmFwLm15VmFsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGV4aXN0LCBwdXNoIHRoZSBhbnNXcmFwIHRvIHRoZSBzdW1tYXJ5IGFycmF5XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnNXcmFwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5iYWNraWNvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiBcbiAgZ2V0VGV4dCh2YWx1ZSkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XG4gICAgKTtcbiAgfVxuIFxuICBoYW5kbGVCYWNrQ2xpY2soKSB7XG4gICAgdGhpcy5iYWNrID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5wb3AgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uYmFja1RyYWNraW5nSWQpO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgaWYoY1F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyID09JzEnKXtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5iYWNrKTtcbiAgICB9XG4gXG4gXG4gICAgdGhpcy5hbnN3ZXJDb3VudC0tO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICBpZiAodGhpcy5zdW1tYXJ5KSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdzdW1tYXJ5IHRydWUnKTtcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgIH1cbiAgICBpZih0aGlzLnN1bW1hcnlEYXRhKXtcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPVtdO1xuICAgIH1cbiBcbiAgICAvLyBSZWFkIHRoZSBwcmV2aW91cyBxdWVzdGlvbiBmcm9tIERCXG4gICAgLy8gVkQgZGlzYWJsZWRcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCkpO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgfVxuIFxuICBoYW5kbGVCYWNrQ2xpY2tOZXcoKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmVkaXQpO1xuICB9XG4gXG4gIC8vdXBkYXRpbmcgc3RhdHVzIG9uY2UgUSZBIGNvbXBsZXRlZC5cbiBcbiAgcHJpdmF0ZSB1cGRhdGVBbnN3ZXJCb29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJldXBkYXRlQUJcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXJCb29rJywnVXBkYXRlJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIGxldCBwYXJhID0ge1xuICAgICAgICBkYXRhVHlwZTogXCJBbnN3ZXJCb29rXCIsXG4gICAgICAgIG9wZXJhdGlvbjogXCJVcGRhdGVcIixcbiAgICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICAgIH1cbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEpXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIsXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXG4gICAgICApO1xuICAgIH1cbiAgfVxuIFxuICBwcml2YXRlIHN1Y2Nlc3N1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICBsZXQgZGF0YSA9IHJlc3BvbnNlO1xuICAgIGlmKGRhdGEpe1xuICAgICAgdGhpcy5oYW5kbGVTdWJtaXQuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuYWJJdGVtLnN0YXR1cyA9IFwiQ29tcGxldGVkXCI7XG4gICAgICB0aGlzLmRlbGV0ZUFuc3dlcnMoZGF0YS5BbnN3ZXJCb29rKVxuICAgIH1cbiAgfTtcbiBcbiAgLy8gVkQgZm9yIGRlbGV0ZSBhbnN3ZXJzXG4gIGRlbGV0ZUFuc3dlcnMoYW5zd2VyYm9vayl7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpe1xuICAgICAgaWYoYW5zd2VyYm9vayAmJiBhbnN3ZXJib29rLnN0YXR1cyA9PSAnQ29tcGxldGVkJyl7XG4gICAgICAgIGNvbnN0IGFuc0Jvb2tJZCA9IGFuc3dlcmJvb2suaWQ7XG4gICAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlckJvb2snLCdkZWxldGUnLGFuc0Jvb2tJZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGEpPT57XG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzRGVsZXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBWRCBmb3IgZGVsZXRlIGFuc3dlcnNcbiAgcHJpdmF0ZSBzdWNjZXNzRGVsZXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgaWYocmVzcG9uc2Uuc3RhdHVzID09ICdzdWNjZXNzJyl7XG4gICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UubWVzc2FnZSk7XG4gICAgfWVsc2Uge1xuICAgICBjb25zb2xlLmVycm9yKCdlcnJvcicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgIH1cbiB9XG5cbiBwcml2YXRlIGZhaWx1cmV1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnc3RhdHVzIGZhaWxlZCcpXG4gfTtcblxuIHByaXZhdGUgcmVhZFF1ZXN0aW9uQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXG4gICAgIC8vICk7XG4gICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uQm9vaycsJ3JlYWQnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAvLyBWRCBkaXNhYmxlZFxuICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayhKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBNUiAzMEpBTjI0IC0gUGFzc2luZyBmbGFnIGZyb20gTkdOWFRcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgbGV0IHBhcmExID0ge1xuICAgICAgZGF0YVR5cGU6IFwiUXVlc3Rpb25Cb29rXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgLy8gLCBKU09OLnN0cmluZ2lmeShwYXJhbU1hcClcbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTEpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcbiAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICApO1xuICAgfVxuIH1cbiBwcml2YXRlIHN1Y2Nlc3NSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWRCb29rJyk7XG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICBpZihyZXNwb25zZSAhPSBudWxsIHx8IHJlc3BvbnNlICE9IHVuZGVmaW5lZCl7XG4gICAgIHRoaXMucWJJdGVtID0gcmVzcG9uc2UucXVlc3Rpb25ib29rO1xuICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XG4gICAgIHRoaXMuaGFuZGxlQm9vay5lbWl0KHJlc3BvbnNlKTtcblxuICAgfVxuICAvLyBjb25zb2xlLmxvZygncmVhZGluZ1F1ZXN0aW9uIHVzaW5nICcgKyB0aGlzLnFiSXRlbSk7XG4gICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIlBlbmRpbmdcIikge1xuICAgICBpZiAoXG4gICAgICAgdGhpcy5hYkl0ZW0uYW5zd2VycyA9PSBudWxsIHx8XG4gICAgICAgdGhpcy5hYkl0ZW0uYW5zd2Vycy5sZW5ndGggPT0gMFxuICAgICApIHtcbiAgICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnFiSXRlbS5maXJzdFF1ZXN0aW9uKTtcbiAgICAgfSBlbHNlIHtcbiAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xuICAgICAgIHZhciBsYXN0UXVlc3Rpb25JZCA9IFwiXCI7XG5cbiAgICAgICBmb3IgKHZhciBhbnNPYmplY3Qgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgICAgbGFzdFF1ZXN0aW9uSWQgPSBhbnNPYmplY3QucXVlc0lkO1xuXG4gICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QucXVlc0lkKTtcblxuICAgICAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIHtcbiAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnNPYmplY3QucXVlc1ZhbHVlLFxuICAgICAgICAgICBhbnNWYWx1ZTogYW5zT2JqZWN0LmFuc1ZhbHVlLFxuICAgICAgICAgICBxdWVzSWQ6IGFuc09iamVjdC5xdWVzSWQsXG4gICAgICAgICAgIHFUeXA6IGFuc09iamVjdC5xVHlwLFxuICAgICAgICAgICBncm91cFRleHQ6YW5zT2JqZWN0Lmdyb3VwVGV4dCxcbiAgICAgICAgIH0pO1xuXG4gICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjaylcbiAgICAgICAgIGlmIChhbnNPYmplY3QucVR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICB2YXIgYXYxID0gYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAvLyAvL2NvbnNvbGUubG9nKFwiYm9vayBsb2dcIik7XG5cbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJib29raWRcIiArIGF2MVswXSk7XG4gICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIFtcbiAgICAgICAgICAgICB7IGF0dGFjaG1lbnROYW1lOiBhdjFbMV0sIGF0dGFjaG1lbnRJZDogYXYxWzBdIH0sXG4gICAgICAgICAgIF0pO1xuICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcbiAgICAgICAgIH0gZWxzZSBpZiAoYW5zT2JqZWN0LnFUeXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJpbnNpZGUgaWZcIik7XG4gICAgICAgICAgIHZhciBhdHRMaXN0O1xuICAgICAgICAgICB2YXIgYXR0O1xuICAgICAgICAgICBmb3IgKHZhciBhdHRWYXIgb2YgYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICAgICAgIHZhciBhdHRJZE5hbWUgPSBhdHRWYXIuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnROYW1lID0gYXR0SWROYW1lWzFdO1xuICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50SWQgPSBhdHRJZE5hbWVbMF07XG4gICAgICAgICAgICAgYXR0TGlzdC5wdXNoKGF0dCk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LnF1ZXNJZCwgYXR0TGlzdCk7XG4gICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgfVxuICAgICAgIH1cblxuICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcbiAgICAgICAvLyBSZWFkIHRoZSBsYXN0IGFuc3dlcmVkIHF1ZXN0aW9uXG4gICAgICAgdGhpcy5yZWFkUXVlc3Rpb24obGFzdFF1ZXN0aW9uSWQpO1xuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJDb21wbGV0ZWRcIikge1xuICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcbiAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXG4gICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XG4gICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xuICAgICBpZih0aGlzLnNlcnYgIT0gJ2FwaScpe1xuICAgICAgLy8gVkQgMzFOT1YyNCB3cmFwcGVyIGNoYW5nZXNcbiAgICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgICAgdmFyIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgIGlmIChhbnN3ZXIucVR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgICAgICB2YXIgZmlsZXMgPSBcIlwiO1xuICAgICAgICAgICB2YXIgZkluZGV4ID0gMDtcbiAgICAgICAgICAgdmFyIGZpbGVMaXN0ID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgZm9yICh2YXIgZmlsZUlkTmFtZSBvZiBmaWxlTGlzdCkge1xuICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVJZE5hbWUuc3BsaXQoXCJAIyRcIik7XG4gICAgICAgICAgICAgaWYgKGZJbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVOYW1lWzFdO1xuICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVzICsgXCIgLFwiICsgZmlsZU5hbWVbMV07XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgIGZJbmRleCsrO1xuICAgICAgICAgICB9XG5cbiAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICBncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgYW5zVmFsdWU6IGZpbGVzLFxuICAgICAgICAgICB9O1xuICAgICAgICAgLy8gIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIucVR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICAvKiAgdmFyIHF1ZXNObz0wO1xuICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnbGluZSAxMjIzJyk7XG4gICAgICAgICAgICAgZm9yICh2YXIgYnFBbnN3ZXJWYWx1ZSBvZiBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLnF1ZXN0aW9uVGV4dC5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAgIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgICAgLy8gZ3JvdXBUZXh0OmFuc3dlci5xdWVzdGlvblRleHQsXG4gICAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogIFwiJmx0O3AmZ3Q7XCIrIHF1ZXNWYWx1ZVtxdWVzTm9dK1wiJmx0O3AmZ3Q7XCIsXG4gICAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBicUFuc3dlclZhbHVlLFxuICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgIHF1ZXNObysrO1xuICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSovXG4gICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgdmFyIGFuc3dlcnZhbHVlcyA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd2YWx1ZScpXG4gICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLFxuICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VydmFsdWVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcbiAgICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXG4gICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLmFuc1ZhbHVlLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2YXIgYW5zMSA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0LFxuICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSxcbiAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLmFuc1ZhbHVlLFxuICAgICAgICAgICB9O1xuICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuXG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBmYWlsdXJlUmVhZEJvb2snKTtcbiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiB9O1xuXG4gcHJpdmF0ZSByZWFkQW5zd2VyYm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9IFwiYXBpXCIpIHtcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgIHRoaXMudGtuLFxuICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxuICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXG4gICAgICk7XG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgbGV0IHBhcmEyID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQW5zd2VyQm9va1wiLFxuICAgICAgb3BlcmF0aW9uOiBcInJlYWRcIixcbiAgICAgIHBhcmFtMTogdXVpZCxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4vLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEyKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgKTtcbiAgIH1cbiB9XG5cblxuIHByaXZhdGUgc3VjY2Vzc0Fuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIkNvbXBsZXRlZFwiKSB7XG4gICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5hbnN3ZXJzKSB7XG4gICAgICAgdmFyIGF2ID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgIHZhciBhbnN3ZXJzID0geyBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsIGFuc1ZhbHVlOiBhdiwgZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQgfTtcbiAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgIH1cbiAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUFuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcbiAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuIH07XG5cbiBwcml2YXRlIHJlYWRRdWVzdGlvbiA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkXG4gICAgIC8vICk7XG4gICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAoZGF0YSk9PntcbiAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgdGhpcy5zdWNjZXNzUmVhZChKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgfVxuICAgICAgIClcbiAgIH0gZWxzZSB7XG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgIC8vIC8vIFZEIDE1RkVCMjQgLSBtYWtlIGNyZWF0ZUFuc3dlckJvb2tGbGFnIGZhbHNlIG9ubHlcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMiA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIlF1ZXN0aW9uXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMildLFxuICAgICAgIHRoaXMuc3VjY2Vzc1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICApO1xuICAgfVxuIH1cblxuIHByaXZhdGUgc3VjY2Vzc1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgLy8gVkQgZGlzYWJsZWRcbiAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCcpO1xuICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgLy8gSEEgMDJGRUIyNCBGb3IgdGVzdGluZyBmb3IgdXNlZCB0aGlzIGFuZCBpbiBmdXR1cmUgaXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aXRoIHN0YXRpYyBkYXRhXG4gICAvLyB2YXIgYWIgPSBbJ2ZpcnN0JywnbGFzdCcsJzEyMycsJzEyLTEyLTIwMDAnLCcyMicsJ01hbGUnLCcxMiBjcm9zcyAxJywnRW1Db250YWN0JywnOTg3NjUnLCdBJywnU2luZ2xlJ107XG4gICAvLyBmb3IoY29uc3QgW2luZGV4LGl0ZW1dIG9mIHJlc3BvbnNlLnF1ZXN0aW9uLnN1YlF1ZXN0aW9ucy5lbnRyaWVzKCkpe1xuICAgLy8gICBpdGVtLmlucHV0ID0gYWJbaW5kZXhdO1xuICAgLy8gfVxuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xuXG4gICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0pIHtcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gICAgIHRoaXMucmVzZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xuICAgfVxuICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbjtcbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcblxuICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PT0gJ0FscGhhbnVtZXJpYycpe1xuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gdHJ1ZTtcbiAgIH1cblxuICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IHRoaXMucXVlc3Rpb25JdGVtLmlkO1xuICAgdGhpcy5oYW5kbGVQYWdlLmVtaXQodGhpcy5xdWVzdGlvbkl0ZW0udHJhY2tpbmdJZCk7XG4gICAvLyBIYW5kbGUgdGhlIHN1YlF1ZXN0aW9uIG9wdGlvbnNcbiAgIGlmIChyZXNwb25zZS5zcU9wdGlvbnMpIHtcbiAgICAgLy92YXIgbmV3UmVjb3JkcyA9IFtdO1xuICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucykge1xuICAgICAgIC8vY29uc29sZS5sb2cocS5OYW1lKTtcbiAgICAgICB2YXIgc3EgPSByZXNwb25zZS5zcU9wdGlvbnNbcS5pZF07XG4gICAgICAgaWYgKHNxKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdmb3VuZCBvcHRpb25zIGZvciBzdWJxdWVzdGlvbiAnICsgcS5OYW1lKTtcbiAgICAgICAgIGlmICghcS5vcHRpb25zKSB7XG4gICAgICAgICAgIHEub3B0aW9ucyA9IHNxLm9wdGlvbnM7XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9XG4gICB9XG4gICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xuICAgdGhpcy5pbm5lcmh0bWwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50XG4gICApO1xuICAgdGhpcy50cmFja0lkKCk7XG4gfTtcblxuIHRyYWNrSWQoKSB7XG4gICB2YXIgcXRyYWNrSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS50cmFja2luZ0lkO1xuICAgLy9jb25zb2xlLmxvZygndHJhY2tJZC1xdWVzdGlvbicrcXRyYWNrSWQpO1xuIH1cblxuIHByaXZhdGUgZmFpbHVyZVJlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgc2F2ZUFuc3dlciA9ICgpID0+IHtcbiAgIC8vIFNldCB0aGUgQW5zd2VyIE51bWJlciBiYXNlZCBvbiB0aGUgUXVlc3Rpb24gU3RhY2sgTGVuZ3RoXG4gICBpZiAodGhpcy5pbnBWYWx1ZSAhPSBcIi5cIikge1xuICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gbnVsbDtcbiAgIH1cbiAgIHRoaXMuYW5zd2VyV3JhcC5hbnNOdW1iZXIgPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoICsgMTtcblxuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkFuc3dlclwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyJywnY3JlYXRlJyxKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAoZGF0YSk9PntcbiAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzU2F2ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMyA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkFuc3dlclwiLFxuICAgICAgb3BlcmF0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTMpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgKTtcbiAgIH1cbiB9O1xuXG4gaHRtbERlY29kZShpbnB1dCkge1xuICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xuICAgcmV0dXJuIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XG4gfVxuXG4gcHJpdmF0ZSBzdWNjZXNzU2F2ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAvL3RoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KHJlc3BvbnNlLmFuc3dlci5xdWVzSWQsIHJlc3BvbnNlLmFuc3dlcik7XG4gICB9IGVsc2Uge1xuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPSByZXNwb25zZS5lcnJvci5lcnJvck1zZztcbiAgIH1cbiAgIGlmKCF0aGlzLmJhY2tCdXR0b25GbGFnKXtcbiAgICAgdGhpcy5uZXh0KCk7XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZVNhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlU2F2ZScpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgcHJvY2Vzc1F1ZXN0aW9uID0gKCkgPT4ge1xuICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvY2Vzc1F1ZXN0aW9uJyk7XG4gICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgdGhpcy5wb3AgPSB0cnVlO1xuXG4gICAvLyBpZighdGhpcy5iYWNrKXtcbiAgIC8vICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKVxuICAgLy8gfVxuXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgaWYgKCF0aGlzLmJhY2spIHtcbiAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpO1xuICAgICB9XG4gICAgIHRoaXMuYmFjayA9IGZhbHNlO1xuICAgICBpZiAodGhpcy5xdWVzdGlvbk5hbWVbMF0gPT09IHRoaXMucXVlc3Rpb25OYW1lWzFdKSB7XG4gICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgIH1cblxuICAgICB0aGlzLmN1cnJlbnROYW1lID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZTtcbiAgICAgdGhpcy5wYXRocXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uTmFtZS5pbmRleE9mKHRoaXMuY3VycmVudE5hbWUpO1xuICAgICB0aGlzLnBvc3NpYmlsaXRpZXMgPSB0aGlzLnFiSXRlbS5wb3NzaWJpbGl0aWVzO1xuICAgfVxuXG4gICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnM7XG4gICB0aGlzLmRheSgpO1xuICAgLy9jb25zb2xlLmxvZygncHJvY2Vzc2luZyBxdWVzdGlvbiAnICsgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSArICcgZXhpc3RpbmcgYW5zd2VycyBhcmUgJyArIHRoaXMuYW5zd2VyTWFwLnNpemUpOyAvLyA9PiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkl0ZW0pKTtcblxuICAgLy8gU2V0IHRoZSBGbGFncyB0byBzaG93IHJpZ2h0IGZpZWxkc1xuICAgdGhpcy5zZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xuICAgLy9jb25zb2xlLmxvZygnQWZ0ZXIgdGhlIHNldEZsYWcgbWV0aG9kIGR0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xuXG4gICAvLyBDaGVjayB0aGUgZXhpc3RpbmcgYW5zd2VyIGZyb20gYW5zd2VyTWFwXG4gICBpZiAodGhpcy5hbnN3ZXJNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImV4aXN0aW5nIGFuc3dlciBmb3VuZCBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZVwiKTtcbiAgICAgdmFyIGVBbnN3ZXIgPSB0aGlzLmFuc3dlck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIHRoZSBNYXBcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IGVBbnN3ZXIuYW5zVmFsdWU7XG4gICAgIC8vY29uc29sZS5sb2coJ2lucFZhbHVlIGhhcyBiZWVuIHNldCB0byAnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLmF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c01hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICB9XG4gICB9IGVsc2Uge1xuICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgcmVtb3ZpbmcgYXR0YWNobWVudCBhcnJheScpO1xuICAgICB0aGlzLmF0dGFjaG1lbnRzID0gW107XG4gICB9XG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcbiAgIGlmKHRoaXMuc3BsQ0NCYWNrQ2xpY2sgJiYgdGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLmluY2x1ZGVzKCdFUycpKXtcbiAgICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgaWYgY29uZCcpO1xuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gZmFsc2U7XG4gICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoJ0VTJywnJyk7XG4gICB9XG5cbiAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAvLyBTZXQgdGhlIE9wdGlvbnMgZm9yIENoZWNrYm94XG4gICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKTtcbiAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgZXhwZWN0ZWQgYm9va0ZsYWcgY29uZCcpO1xuICAgICAvL2NvbnNvbGUubG9nKCdkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcbi8vICBIQSAyMEZFQjI0IExhYmVsIEZpeFxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IGVsZW1lbnQucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICB9KTtcbiAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcbiAgIH0gZWxzZSBpZiAodGhpcy5saXN0RmxhZykge1xuICAgICAvLyBTZXQgdGhlIExvY2FsU3ViUXVlc3Rpb25zXG4gICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgbGlzdCBmbGFnJyk7XG4gICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgLy8gY29uc29sZS5sb2codGhpcy5hYkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICBpZighdGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSl7XG4gICAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcbiAgICAgfVxuICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZykge1xuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgdW5leHBlY3RlZCBkdEZsYWcgY29uZCcpO1xuICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IFwiXCI7XG4gICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBcIlwiO1xuICAgICB0aGlzLnNlbERhdGUgPSBcIlwiO1xuICAgICAvLyAyMDIxLTUtMTZUMDA6MDBcbiAgICAgaWYgKHRoaXMuZGF0ZU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgICAgdGhpcy5zZWxEYXRlID0gdGhpcy5kYXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRob3VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuc2VsZWN0ZWRob3VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnNlbGVjdGVkbWludXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgdGhpcy5ob3Vycy5wdXNoKFxuICAgICAgICAgXCIxM1wiLFxuICAgICAgICAgXCIxNFwiLFxuICAgICAgICAgXCIxNVwiLFxuICAgICAgICAgXCIxNlwiLFxuICAgICAgICAgXCIxN1wiLFxuICAgICAgICAgXCIxOFwiLFxuICAgICAgICAgXCIxOVwiLFxuICAgICAgICAgXCIyMFwiLFxuICAgICAgICAgXCIyMVwiLFxuICAgICAgICAgXCIyMlwiLFxuICAgICAgICAgXCIyM1wiLFxuICAgICAgICAgXCIwMFwiXG4gICAgICAgKTtcbiAgICAgfVxuICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgdGhpcy5ob3VycyA9IHRoaXMuaG91cnMuc2xpY2UoMCwgMTIpO1xuICAgICB9XG4gICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgdmFyIGR0VmFsID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIlRcIik7XG4gICAgICAgdmFyIGR0dmFsMCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdFZhbFswXTtcbiAgICAgICB0aGlzLmlucFZhbHVlID0gZHR2YWwwWzBdO1xuXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0dmFsMFsxXTtcbiAgICAgfVxuICAgICBpZiAoXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlQmFja3dhcmQgfHxcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVGb3J3YXJkXG4gICAgICkge1xuICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlRm9yd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgIH07XG4gICAgICAgfVxuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgdGhpcy5maWxlVUkoKTtcbiAgICAgLy8gbG9naWNcbiAgICAgdGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbiA9XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucz8uc3BsaXQoXCI7XCIpO1xuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24pO1xuICAgfVxuXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgfVxuIH07XG5cbiBzZXRGbGFnKHR5cCkge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHNldEZsYWcgZm9yICcgKyB0eXApO1xuXG4gICBpZiAodHlwKSB7XG4gICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xuICAgICAgIHRoaXMudGV4dEZsYWcgPSB0cnVlO1xuXG4gICAgICAgLy90aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XG4gICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYU51bWVyaWNcIikge1xuICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IHRydWU7XG4gICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICB0aGlzLmlucFZhbHVlPSdFUydcbiAgICAgICB9Ki9cbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgdGhpcy5lbWFpbEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcbiAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xuICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgdGhpcy5yYWRpb0ZsYWcgPSB0cnVlO1xuICAgICAgfSBcbiAgICAvLyAgIGVsc2UgaWYgKHR5cCA9PSBcIlJpY2hUZXh0QXJlYVwiKSB7XG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IHRydWU7XG4gICAgLy8gIH0gXG4gICAgIGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xuICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICB0aGlzLmJvb2tGbGFnID0gdHJ1ZTtcbiAgICAgfWVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgIHRoaXMubGlzdEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgVGltZSBjb25kJyk7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRGF0ZSBjb25kJyk7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICB9XG4gICB9XG4gfVxuXG4gcmVzZXRGbGFnKHR5cCkge1xuICAgaWYgKHR5cCkge1xuICAgICAvLyBTZXQgdGhlIEZsYWdzXG4gICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICB0aGlzLnRleHRGbGFnID0gZmFsc2U7XG4gICAgICAgLy90aGlzLm51bWJlckZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKSB7XG4gICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xuICAgICAgIHRoaXMuZW1haWxGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgdGhpcy5maWxlRmxhZyA9IGZhbHNlO1xuICAgICAgfSBcbiAgICAvLyAgIGVsc2UgaWYgKHR5cCA9PSBcIlJpY2hUZXh0QXJlYVwiKSB7XG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IGZhbHNlO1xuICAgIC8vICB9IFxuICAgICBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICB0aGlzLnRhRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICB0aGlzLnJhZGlvRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgIHRoaXMuYm9va0ZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICB0aGlzLmxpc3RGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgIH1cbiAgIH1cbiB9XG5cbiBzZXRPcHRpb25zKHJlY29yZHMpIHtcbiAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XG4gICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xuICAgICBvdi5pZCA9IG9wdC5pZDtcbiAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xuICAgICBvdi52YWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgb3YubmV4dFF1ZXN0aW9uID0gb3B0Lm5leHRRdWVzdGlvbjtcbiAgICAgb3YuY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgIGlmIChcbiAgICAgICB0aGlzLmlucFZhbHVlICYmXG4gICAgICAgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKS5pbmNsdWRlcyhvcHQudmFsdWUpXG4gICAgICkge1xuICAgICAgIG92LmNoZWNrZWQgPSB0cnVlO1xuICAgICB9XG5cbiAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XG4gICB9XG4gfVxuXG4gLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcbiAgIGNvbnNvbGUubG9nKCdpbnNpZGUgY2hpbGRFdmVudENhcHR1cmUgJyk7XG4gICBjb25zb2xlLmxvZyhldmVudCk7XG4gICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgLy8gSEEgMzEtSkFOLTI0IEFzc2lnbiB2YWx1ZXMgdG8gZHJvcGRvd24gcXVlc3Rpb25cbiAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmo7XG4gICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXG4gfVxuXG4vLyAgUlMgMDZKQU4yNVxuLy8gZm9yIHJpY2h0ZXh0XG4gaGFuZGxlUmljaFRleHRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAvLyB0aGlzLmlucFZhbHVlID0gdmFsdWU7XG4gIC8vIHRoaXMuY2xlYXJFcnJvcigpOyBcbiAgICBjb25zb2xlLmxvZygnUmljaCBUZXh0IENoYW5nZSBDYXB0dXJlZDonLCB2YWx1ZSk7XG59XG5cbiBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzZXRTdWJRdWVzdGlvbnMnKTtcbiAgIC8vIGNvbnNvbGUubG9nKHJlY29yZHMpO1xuICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XG4gICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICB2YXIgYUluZGV4ID0gMDtcbiAgICAgLy8gc2VhcmNoIGNoYW5nZWQgYXMgc2VtaSBjb2xvbiBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWFcbiAgICAgaWYgKCh0aGlzLmlucFZhbHVlLnNlYXJjaChcIjsgXCIpID09IC0xKSkge1xuICAgICAgLy8gY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpOyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyAnQEAjIyQkJyA7XG4gICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgcWFNYXAuc2V0KGFJbmRleCwgYW5zU3RyKTtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwIGZvciAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgIH1cbiAgICAgfSBlbHNlIHtcbiAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIjsgXCIpKSB7XG4gICAgICAgICBhSW5kZXgrKztcbiAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIHNldHRpbmcgdmFsdWVzIGZyb20gaW5wdmFsdWUgcWEgbWFwIGFyZScpO1xuICAgLy8gY29uc29sZS5sb2cocWFNYXApO1xuXG4gICBmb3IgKHZhciBxdWVzIG9mIHJlY29yZHMpIHtcbiAgICAgaWYgKHF1ZXMudHlwZSA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy52YWx1ZU5hbWUxKTtcbiAgICAgfVxuXG4gICAgIHZhciBhbnMgPSAnJztcbiAgICAgaWYgKHFhTWFwLmhhcyhxdWVzLnF1ZXN0aW9uTnVtYmVyKSkge1xuICAgICAgICAgcXVlcy5pbnB1dCA9IHFhTWFwLmdldChxdWVzLnF1ZXN0aW9uTnVtYmVyKTtcbiAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBmZXRjaGluZyBtYXAgdmFsdWVzJyk7XG4gICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgIGlmKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykgPiAwKXtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Fuc3dlciBzdXBwb3NlZCB0byBiZSB0cmltbWVkJyk7XG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgICBhbnMgPSBxdWVzLmlucHV0LnN1YnN0cmluZyhxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKzYscXVlcy5pbnB1dC5sZW5ndGgpO1xuICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhbnMpO1xuICAgICAgICAgICBxdWVzLmlucHV0ID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcoMCxxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKTtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICB9XG4gICAgICAgfVxuXG4gICAgIGlmICgocXVlcy50eXBlID09PSBcIkRhdGVcIikgJiYgKHF1ZXMuaXNEYXRlQmFja3dhcmQgfHwgcXVlcy5pc0RhdGVGb3J3YXJkKSkge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSBiYWNrd2FyZC9mb3J3YXJkIGNvbmQnKTtcbiAgICAgICBpZiAocXVlcy5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBpc0RhdGVCYWNrd2FyZCcpO1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBpZiAocXVlcy5pc0RhdGVGb3J3YXJkID09PSB0cnVlKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlzRGF0ZUZvcndhcmQnKTtcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XG4gICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyk7XG4gICAgIH1cblxuICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHF1ZXMpO1xuICAgICBmb3IodmFyIGk9MDsgaTx0aGlzLnN1YlF1ZXN0aW9ucy5sZW5ndGg7aSsrKXtcbiAgICAgICAvLyB0byBzaG93L2hpZGUgdGhlIGRlcGVuZGVudCBkcm9wZG93biBvbmx5IGZpZWxkIHVzaW5nIHRoZSBkcm9wRG93bk9ubHkgYm9vbGVhblxuICAgICAgIGlmKHRoaXMuc3ViUXVlc3Rpb25zW2ldLnNpemUgPT0gNCl7XG4gICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSB0cnVlO1xuICAgICAgIH1lbHNle1xuICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gZmFsc2U7XG4gICAgICAgfVxuICAgICB9XG4gICAgIGlmKGFucyAhPSAnJyl7XG4gICAgICAgZm9yKHZhciBhbiBvZiAoYW5zLnNwbGl0KCckJEBAIyMnKSkpe1xuICAgICAgICAgdmFyIHNRID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgICAgICBPYmplY3QuYXNzaWduKHNRLHF1ZXMpO1xuICAgICAgICAgc1EuaW5wdXQgPSBhbjtcbiAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2goc1EpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgaWYgKHRoaXMudmFsdWVOYW1lMSAhPSBudWxsICYmIHRoaXMudmFsdWVOYW1lMS5sZW5ndGggPiAwKSB7XG4gICAgIHRoaXMuYm9va0ZsYWdBY2NlcHQgPSB0aGlzLnZhbHVlTmFtZTEuc3BsaXQoXCI7XCIpO1xuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3ViUXVlc3Rpb25zKTtcbiAgIH1cbiAgIHRoaXMuc3RydWN0TG9jYWxTdWJRdWVzdGlvbihudWxsKTtcbiAgIC8vIEhBIDAyRkVCMjQgT24gRWRpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSB1c2lpbmcgdGhpc1xuICAgaWYodGhpcy5hbGxJbnB1dFZhbHVlcy5sZW5ndGggPiAwKXtcbiAgICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICBmb3IobGV0IHNpbmdsZUlucHV0IG9mIHRoaXMuYWxsSW5wdXRWYWx1ZXMpe1xuICAgICAgICAgaWYoZWxlbWVudC5pZCA9PSBzaW5nbGVJbnB1dC5pZCl7XG4gICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSBzaW5nbGVJbnB1dC5pbnB1dDtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH0pO1xuICAgfVxuIH1cblxuIG9wdGlvbkNoYW5nZShzZWxWYWx1ZSkge1xuICAgbGV0IHJhZGlvVHJhY2tpbmdJZDogc3RyaW5nID0gXCJcIjtcbiAgIGZvciAodmFyIG9wdCBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKSB7XG4gICAgIC8vY29uc29sZS5sb2coJ29wdGlvbkNoYW5nZSBUcmFja2luZ0lkJytvcHQudHJhY2tpbmdJZCk7XG4gICAgIGlmIChvcHQudmFsdWUgPT0gc2VsVmFsdWUpIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgaWYnK29wdC50cmFja2luZ0lkKVxuICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC50cmFja2luZ0lkO1xuICAgICB9XG4gICB9XG5cbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChyYWRpb1RyYWNraW5nSWQpO1xuICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XG5cbiAgIHRoaXMuaW5wVmFsdWUgPSBzZWxWYWx1ZTtcbiB9XG5cbiBjbGVhckVycm9yKCkge1xuICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbnVsbDtcbiAgIH1cbiB9XG5cbiBjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXNJZCkge1xuICAgcXVlc0lkLmVycm9yID0gbnVsbDtcbiB9XG5cbiBpbnB1dFZhbGlkYXRlKGUpIHtcbiAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7XG4gICAvLyBPbmx5IEFTQ0lJIGNoYXJhY3RlciBpbiB0aGF0IHJhbmdlIGFsbG93ZWRcbiAgIHZhciBBU0NJSUNvZGUgPSAoZS53aGljaCkgPyBlLndoaWNoIDogZS5rZXlDb2RlO1xuICAgaWYgKEFTQ0lJQ29kZSA+IDMxICYmIChBU0NJSUNvZGUgPCA0OCB8fCBBU0NJSUNvZGUgPiA1Nykpe1xuICAgICByZXR1cm4gZmFsc2U7XG4gICB9ZWxzZXtcbiAgICAgcmV0dXJuIHRydWU7XG4gICB9XG4gfVxuXG4gQ0NPbkNoYW5nZShpbnBWYWx1ZTogc3RyaW5nKSB7XG5cbiAgICAgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gNykge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cbiAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDEyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTcpIHtcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyMikge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cblxuIH1cblxuIGlzTm90VmFsaWRBY2NOdW1iZXIoczogc3RyaW5nKSB7XG4gICBzID0gcy5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xuICAgcyA9ICdFUycgKyBzO1xuICAgdmFyIGlzTm90VmFsaWRTdHIgPSBmYWxzZTtcbiAgIGlmIChzLmxlbmd0aCA9PSAyNCkge1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICBpZiAoaSA8PSAxICYmIC9bYS16QS1aXS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBjaGFyOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICB9IGVsc2UgaWYgKGkgPiAxICYmIC9bMC05XS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBudW1lcmljOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgY2hhclwiKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH0gZWxzZSB7XG4gICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgYWNjIG51bWJlclwiKTtcbiAgIH1cbiAgIHJldHVybiBpc05vdFZhbGlkU3RyO1xuIH1cblxuIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcbiAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKTtcbiAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICBzcS5lcnJvciA9IG51bGw7XG4gICB9XG4gfVxuXG4gdXBsb2FkRmlsZShldmVudCxxdWVzPzphbnkpIHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSB1cGxvYWQnKTtcbiAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgdGhpcy5maWxlVHlwZUluY29ycmVjdCA9IGZhbHNlO1xuICAgdmFyIGxvY2FsID0gdGhpcztcbiAgIGxvY2FsLmF0dGFjaG1lbnQgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAvLyBWYWxpZGF0ZSB0aGUgZmlsZSBleHRlbnNpb25cbiAgIC8vY29uc29sZS5sb2cobG9jYWwuYXR0YWNobWVudCk7XG4gICBsZXQgZmlsZU5hbWVXaXRoVHlwZTogc3RyaW5nID1cbiAgICAgbG9jYWwuYXR0YWNobWVudCAmJiBsb2NhbC5hdHRhY2htZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgIGlmIChcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBnXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBuZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wZGZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBlZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5oZWljXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBHXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBOR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QREZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBFR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5IRUlDXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUZcIilcbiAgICkge1xuICAgICBsb2NhbC5maWxlVHlwZUluY29ycmVjdCA9IHRydWU7XG4gICB9XG4gICAvLyBSZXR1cm4gd2hlbiB0aGUgZmlsZSB0eXBlIGlzIGluY29ycmVjdFxuICAgaWYgKGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0KSB7XG4gICAgIHJldHVybjtcbiAgIH1cbiAgIGxldCBmaWxlQ29udGVudDogYW55O1xuICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgIGZpbGVDb250ZW50ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQgPSBsb2NhbC5hdHRhY2htZW50LnNpemUgPiAzMjQyODgwOyAvL1ZhbGlkYXRpbmcgZmlsZSBzaXplXG4gICAgIC8vIFVwbG9hZCB0aGUgZmlsZSB0byBTYWxlc2ZvcmNlIHdoZW4gdGhlIGxpbWl0IGlzIHdpdGhpbiByYW5nZVxuICAgICBpZiAoIWxvY2FsLmZpbGVFeGNlZWRlZExpbWl0KSB7XG4gICAgICAgbGV0IGZpbGVXcmFwcGVyID0gbmV3IEF0dGFjaG1lbnRXcmFwcGVyKCk7XG4gICAgICAgZmlsZVdyYXBwZXIucGFyZW50SWQgPSBsb2NhbC5hYkl0ZW0uaWQ7XG4gICAgICAgZmlsZVdyYXBwZXIuZmlsZU5hbWUgPSBsb2NhbC5hdHRhY2htZW50Lm5hbWU7XG4gICAgICAgZmlsZVdyYXBwZXIuZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDtcbiAgICAgICBsb2NhbC5jcmVhdGVBdHRhY2htZW50KGZpbGVXcmFwcGVyKTtcbiAgICAgICBxdWVzLmlucHV0ID0gZmlsZVdyYXBwZXIuZmlsZU5hbWU7XG4gICAgIH1cbiAgIH07XG4gICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xuIH1cblxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGxldCBjcmVhdGVkQXR0YWNobWVudDogQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KFxuICAgICByZXNwb25zZS5hdHRhY2htZW50SWQsXG4gICAgIHJlc3BvbnNlLmF0dGFjaG1lbnROYW1lLFxuICAgICB0aGlzLmF0dGFjaG1lbnQubGFzdE1vZGlmaWVkRGF0ZVxuICAgKTtcbiAgIHRoaXMuYXR0YWNobWVudHMucHVzaChjcmVhdGVkQXR0YWNobWVudCk7XG4gICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5hdHRhY2htZW50cyk7XG4gfTtcblxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuICAgICBpZiAodGhpcy5hdHRhY2htZW50c1tpXS5hdHRhY2htZW50SWQgPT09IHRoaXMuYXR0YWNobWVudElkKSB7XG4gICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgIH1cbiAgIH1cbiB9O1xuXG4gcHJpdmF0ZSBmYWlsdXJlQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlJyk7XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZScpO1xuIH07XG5cbiBoYW5kbGVTdWJtaXRDbGljaygpIHtcbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5zdWJtaXRUcmFja2luZ0lkKTtcbiAgIHRoaXMudXBkYXRlQW5zd2VyQm9vayh0aGlzLmFiSXRlbS5pZCk7XG4gfVxuXG4gaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uY2FuY2VsVHJhY2tpbmdJZCk7XG4gfVxuXG4gcHJpdmF0ZSBjcmVhdGVBdHRhY2htZW50ID0gKGZpbGVXcmFwcGVyOiBhbnkpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJBdHRhY2htZW50XCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKV0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgIC8vICk7XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdjcmVhdGUnLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlKGVycm9yKTtcbiAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgIH1cbiAgICAgKVxuICAgfSBlbHNlIHtcbiAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgbGV0IHBhcmEzID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQXR0YWNobWVudFwiLFxuICAgICAgb3BlcmF0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEzKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgICk7XG4gICB9XG4gfVxuXG4gZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50SWQ6IHN0cmluZykge1xuICAgdGhpcy5hdHRhY2htZW50SWQgPSBhdHRhY2htZW50SWQ7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJkZWxldGVBdHRhY2htZW50XCIpO1xuICAgdGhpcy5kZWxldGVTRkF0dGFjaG1lbnQoYXR0YWNobWVudElkKTtcbiB9XG5cbiBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQXR0YWNobWVudCcsJ2RlbGV0ZScsZmlsZUlkICxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgKGRhdGEpPT57XG4gICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGUoZXJyb3IpO1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhNCA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkF0dGFjaG1lbnRcIixcbiAgICAgIG9wZXJhdGlvbjogXCJkZWxldGVcIixcbiAgICAgIHBhcmFtMTogZmlsZUlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtmaWxlSWQsSlNPTi5zdHJpbmdpZnkocGFyYTQpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgKTtcbiAgIH1cbiB9XG5cbiBnZXRGaWxlTmFtZShmaWxlTmFtZXdpdGhJZGFuZFR5cGUpIHtcbiAgIC8vdHJ1bmNhdGUgZmlsZSBwYXRoXG4gICB2YXIgZmlsZU5hbWVXaXRoVHlwZSA9IGZpbGVOYW1ld2l0aElkYW5kVHlwZS5zdWJzdHIoXG4gICAgIGZpbGVOYW1ld2l0aElkYW5kVHlwZS5pbmRleE9mKFwiOjo6OlwiKSArIDRcbiAgICk7XG4gICByZXR1cm4gZmlsZU5hbWVXaXRoVHlwZTsgLy9maWxlTmFtZVdpdGhUeXBlLnJlcGxhY2UoL14oLiooXFwvfFxcXFwpKSguKykkLywgJyQzJyk7XG4gfVxuIGZpbGVVSSgpIHtcbiAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgfVxuIH1cblxuIC8vVXBkYXRlIGZ1bmN0aW9uIGZvciBjYXRlZ29yaXphdGlvblxuIC8vIHN0ZXBwZXJDYXRlZygpIHtcbiAvLyAgIHRoaXMuZmlyc3RGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gLy8gICAgIGZpcnN0Q3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuIC8vICAgfSk7XG4gLy8gICB0aGlzLnNlY29uZEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcbiAvLyAgICAgc2Vjb25kQ3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuIC8vICAgfSk7XG5cbiAvLyB9XG5cbiAvLyBVcGRhdGUgRnVuY3Rpb24gZm9yIHRoZSBQcm9ncmVzcyBCYXJcbiB1cGRhdGVQcm9ncmVzcygpIHtcbiAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0JhciA9PT0gdHJ1ZSkge1xuICAgICBsZXQgaiA9IFtdO1xuICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zc2liaWxpdGllcy50b3RhbDsgaSsrKSB7XG4gICAgICAgdmFyIHBhdGhwb3NzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbaV0ucXVlc3Rpb25zKTtcbiAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XG4gICAgICAgICBqLnB1c2goaSk7XG4gICAgICAgICB0aGlzLmNoZWNrID0gdHJ1ZTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgdGhpcy5jaGVjayA9IGZhbHNlO1xuICAgICAgIH1cbiAgICAgfVxuICAgICBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICB0aGlzLmNvdW50ID0galswXTtcbiAgICAgfVxuICAgICBpZiAoai5sZW5ndGggPiAxKSB7XG4gICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcbiAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09PSAxKSB7XG4gICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgIDkwICpcbiAgICAgICAgICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC9cbiAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcbiAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICB9XG4gICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcbiAgIH1cbiB9XG5cbiB0b3duTmFtZShhcmVhKSB7XG4gICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBhcmVhLnRvd247XG4gICAvL2NvbnNvbGUubG9nKCd0aGlzIHZhbHVlPScrdGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiB9XG5cbiBnZXRUb3duTG9jYWwoKSB7XG4gICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmxvY2FsYWRkcmVzcykge1xuICAgICAgIGlmIChcbiAgICAgICAgIHZhbC50b3duLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICApIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxuICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuIH1cblxuIGNsZWFyTGlzdCgpIHtcbiAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgfSwgNTAwKTtcbiB9XG5cbiBzZXRTZWFyY2hMaXN0V2lkdGgoKSB7XG4gICAvL3RvIHJlc2l6ZSBzZWFyY2ggbGlzdCBiYXNlZCBvbiB0aGUgc2NyZWVuIHNpemVcbiAgIGNvbnN0IHNlYXJjaEJveFdpZHRoID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXV0b2NvbXBsZXRlLWlucHV0XCIpLm9mZnNldFdpZHRoO1xuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLndpZHRoID0gc2VhcmNoQm94V2lkdGggKyBcInB4XCI7XG4gfVxuXG4gICBnZXRDb2RlKCl7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMuYWxsQWRkcmVzcykge1xuICAgICAgICAgaWYgKHZhbC56aXBDb2RlLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGgpID09IHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKSB7XG4gICAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcbiAgICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcbiAgICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cbiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XG4gICB9XG4gICBnZXRQb3N0YWxjb2RlKHZhbHVlKXtcbiAgICB0aGlzLnBsYWNlcz1bXTtcbiAgICB0aGlzLnByb3ZpbmNlPVtdO1xuICAgICB2YXIgcHJvdmluY2U7XG4gICAgIHZhciB0b3duO1xuICAgICB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9IHZhbHVlLnppcENvZGU7XG4gICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlLmNvdW50cnk7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzPVtdO1xuXG5cbiAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xuICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID09IHZhbC56aXBDb2RlICl7XG4gICAgICAgICB0aGlzLnBsYWNlcy5wdXNoKHZhbCk7XG4gICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbC5jb3VudHJ5O1xuICAgICAgICAgcHJvdmluY2UgPSB2YWwucHJvdmluY2VcbiAgICAgICAgIHRvd24gPSB2YWwudG93bjtcbiAgICAgICB9XG4gICAgIH1cbiAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xuXG4gICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlID1wcm92aW5jZTtcbiAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9IHRvd247XG4gICAgIH1lbHNlIGlmKHRoaXMucGxhY2VzLmxlbmd0aCA+MSB8fCB0aGlzLnBsYWNlcy5sZW5ndGggPT0wKXtcblxuICAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPScnO1xuICAgICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlPScnO1xuICAgICB9XG4gICB9XG4gICBjbG9zZURyb3Bkb3duKCkge1xuICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPT0gNSl7XG4gICAgICAgdGhpcy5nZXRQb3N0YWxjb2RlKHt6aXBDb2RlOnRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlfSk7XG4gICAgIH1cblxuICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0TGlzdCcpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgIH0sIDUwMCk7XG4gIH1cblxuXG4gIC8vUGx1cyBidXR0b24gaW1wbGVtZW50YXRpb24uXG4gIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24ocXVlczogTG9jYWxRdWVzdGlvbil7XG4gICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24nKTtcbiAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDsgaSsrKXtcbiAgICAgICB2YXIgbG9jYWxTdWJRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlkID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaWQ7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5hbWUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OYW1lO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvbiA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvblRleHQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvblRleHQ7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnR5cGUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS50eXBlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi50aXRsZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnRpdGxlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5zdWJUaXRsZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnN1YlRpdGxlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pc09wdGlvbmFsID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaXNPcHRpb25hbDtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uZXJyb3JNZXNzYWdlID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uZXJyb3JNZXNzYWdlO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5uZXh0UXVlc3Rpb24gPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5uZXh0UXVlc3Rpb247XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmdyb3VwTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmdyb3VwTmFtZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvbk51bWJlcjtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uYWxsb3dlZEZpbGVFeHRlbnNpb25zID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pZCArIGk7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlucHV0ID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaW5wdXQ7XG4gICAgICAgICB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zLnB1c2gobG9jYWxTdWJRdWVzdGlvbik7XG4gICAgIH1cbiAvLyBjb25zb2xlLmxvZygnZmluYWwgbG9jYWwgc3ViIHF1ZXN0aW9ucycpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyk7XG4gdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyA9IFtdO1xuIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBrZXkgbG9jYWxTdWJRTWFwIG1hcCcpO1xuIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcbiB9XG5cbiBhZGRJbnB1dEJveChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbiwgaW5kZXg6IG51bWJlcil7XG4gICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb24pO1xuICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xuICAgaWYodGhpcy5rZXlJbmRleCA9PSBpbmRleCl7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcoaW5kZXgrMSkpO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICB9ZWxzZXtcbiAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuaWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcbiAgIH1cbiAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcblxuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgLy9jb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XG4gfVxuXG4gcmVtb3ZlQWRkcmVzcyhxdWVzVW5pcXVlSWQ6IHN0cmluZywgcU5hbWU6IHN0cmluZykge1xuICAgLy9jb25zb2xlLmxvZyhxdWVzVW5pcXVlSWQpXG4gICB2YXIgdmFsID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgIHZhciBrZXlpbmRleCA9IDA7XG5cbiAgIGZvcihsZXQgaT0wOyBpPHZhbC5sZW5ndGg7IGkrKyl7XG4gICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcbiAgICAgICBrZXlpbmRleCsrO1xuICAgICB9XG4gICB9XG5cbiAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkgJiYga2V5aW5kZXggPjEpe1xuICAgICB2YXIgcmVvcmRlciA9IHZhbC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udW5pcXVlU3ViUUlkICE9PSBxdWVzVW5pcXVlSWQpXG4gICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCxyZW9yZGVyKTtcbiAgICAga2V5aW5kZXgtLTtcbiAgIH1cbiB9XG5cbiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhpZDogU3RyaW5nKXtcbiAgIHJldHVybiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQoaWQpO1xuIH1cblxuIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXG5BZGQocXVlc3Rpb246IExvY2FsUXVlc3Rpb24pe1xuICAgdGhpcy5hZGRGbGFnID0gIGZhbHNlO1xuICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgdmFyIGluZGV4ICA9IGFycmEubGVuZ3RoO1xuICAgdmFyIGEgPSBhcnJhLnNsaWNlKC0xKS5wb3AoKTtcbiAgIHRoaXMuaW5kZXhDb3VudCAgPSBhLnF1ZXN0aW9uTnVtYmVyO1xuXG4gICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5kZXhDb3VudCA7IGkrKykge1xuICAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb25baV0pO1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgIGFycmEuc3BsaWNlKGluZGV4Kyh0aGlzLmluZGV4Q291bnQtMSksIDAsIHF1ZXMpO1xuICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLGFycmEpO1xuICAgfVxuICAgdGhpcy5hZGRGbGFnID0gdHJ1ZTtcbiB9XG5cbiBoYW5kbGVMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uOiBhbnkscXVlczphbnkpIHtcbiAgIHF1ZXMuaW5wdXQgPSBsb2NhdGlvbjtcbiB9XG5cbiBzZWxlY3RlZElucHV0KGlucHV0OmFueSAscXVlczphbnkpe1xuICAgcXVlcy5pbnB1dCA9IGlucHV0O1xuIH1cblxuIGhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UodmFsdWUgOnN0cmluZyl7XG4gICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGV4dC1hcmVhIHRleHQ6JywgdmFsdWUpO1xuIH1cbiBnZXREYXRhKGRhdGE6YW55KXtcbiAgY29uc29sZS5sb2coJ3RhYmxlIGRhdGEnLGRhdGEpO1xuIH1cblxuIGRpc3BsYXlEYXRlKGRhdGVTZWxlY3RlZDogYW55LHF1ZXM6YW55KXtcbiAgIC8vIFNLUzE0SlVOMjUgUGFyc2UgdGhlIGRhdGUgc3RyaW5nIHVzaW5nIG5hdGl2ZSBKYXZhU2NyaXAgYW5kIGFzc2lnbiBpdCB0byB0aGlzLnNlbGVjdGVkRGF0ZVxuICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTZWxlY3RlZC52YWx1ZSk7XG4gICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7cGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpfS0ke3BhZChkYXRlLmdldERhdGUoKSl9IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhZChkYXRlLmdldEhvdXJzKCkpfToke3BhZChkYXRlLmdldE1pbnV0ZXMoKSl9OiR7cGFkKGRhdGUuZ2V0U2Vjb25kcygpKX1gO1xuICAgcXVlcy5pbnB1dCA9IGZvcm1hdHRlZERhdGU7XG4gICAgfVxuXG4gZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XG4gICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gfVxuXG4gZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuIH1cbiAvLyBTS1MxMUpVTjI1cmVtb3ZlIHRoZSBzcGVjaWFsIGNoYXJlY3RlcnMgYW5kIHRhZ3MgXG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OiBzdHJpbmcpIHtcbiAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xuICAgIHJldHVybiB1cGRhdGVkVGV4dDtcbiAgfVxufSIsIjwhLS0gY3VzdG9tIGxvYWRlciAtLT5cbjwhLS0gQmFjayBQcm9jZXNzaW5nIC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiYmFja2ljb24gPT0gZmFsc2VcIiA+XG4gIDxkaXYgY2xhc3M9XCJiYWNraWNvblwiID5cbiAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiIFtjbGFzc109XCIgYWJJdGVtPy5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcgPyAnc3VtbWFyeS12b2x2ZXInOidhcHAtYmFjazEnXCI+XG4gICAgPGltZyBjbGFzcz1cImljb24tYXJyb3ctYmFja1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1hcnJvdy1iYWNrLnBuZ1wiIGFsdD1cIlNjcm9sbCBkb3duXCI+IHt7IHFiSXRlbT8uYmFjayB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiAtLT5cblxuPCEtLSBRdWVzdGlvbiBIYW5sZGluZyAtLT5cbjwhLS0gVkQgcmVtb3ZlZCB1bndhbnRlZCBjb25kaXRpb24gLS0+XG48IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG48ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtXCIgY2xhc3M9XCJxdWVzdGlvbmRpdjEgcGFkZC1ib3R0b21cIj5cbiAgPCEtLSBQcm9ncmVzcyBCYXIgJiBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50aXRsZVwiPlxuICAgIDxoMT57eyBxdWVzdGlvbkl0ZW0/LnRpdGxlIH19PC9oMT5cbiAgICA8ZGl2Pnt7IHF1ZXN0aW9uSXRlbT8uc3ViVGl0bGUgfX08L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQcm9ncmVzcyAmIEdyb3VwaW5nIC0tPlxuICA8ZGl2PlxuICAgIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgICA8IS0tIFNob3cgdGhlIEdyb3VwL01vZHVsZSByZWxhdGVkIHRvIHRoZSBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmdyb3VwTmFtZSAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHF1ZXN0aW9uYWxpZ246ICFxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHQtbGFyZ2VUaXRsZVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtZm9udDYgbXl0LXRleHQzXCI+XG4gICAgICAgICAge3sgcXVlc3Rpb25JdGVtPy5ncm91cE5hbWUgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5zdWJUZXh0ICE9ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQ1IG15dC10ZXh0MVwiPnt7cXVlc3Rpb25JdGVtPy5zdWJUZXh0fX08L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5zdWJUZXh0ID09PSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250MTAgbXl0LXRleHQyXCI+e3txdWVzdGlvbkl0ZW0/LnN1YlRleHR9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDwhLS0gUXVlc3Rpb24gSGFuZGxpbmcgLS0+XG4gICAgPCEtLSBWRCAxMEF1ZzI0LSBxdWVzdGlvbiBubyAtLT5cbiAgPGRpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnF1ZXN0aW9uVGV4dCAmJiBxdWVzdGlvbkl0ZW0uc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2VcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgICA8c3Bhbj57e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25OdW1iZXJ9fS48L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cIm54dC1sYWJlbFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFRpdGxlIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5pc1RpdGxlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgIT0gJ0Jvb2snICYmIHF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlciE9JzYnICYmIHF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlciE9JzknXCI+IFxuICAgICAgICA8aDMgY2xhc3M9XCJxdWVzdGlvbmFsaWduICBteXQtZm9udDMgbXl0LWFsaWduIG15dC10ZXh0NFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSB1bndhbnRlZCBzdHlsaW5nIGNsYXNzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxdWVzdGlvbkl0ZW0uaXNUaXRsZVwiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2hlYWRlci1zdHlsZScgOiAncXVlc3Rpb24tZi1zaXplJ1wiPlxuICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCIgPlxuICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgPT0gJ0Jvb2snXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyPT0nNidcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTMyMVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIFxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50eXBlID09ICdGaWxlJyBcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25OdW1iZXI9PSc5J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzQ1XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cblxuICA8IS0tIEFkZGl0aW9uYWwgSW5mbyAtLT5cbiAgPCEtLSBUaGUgYmVsb3cgY29kZSBjYW4gYmUgd3JpdHRlbiBlZmZlY3RpdmVseSBuZXN0ZWQgbmdJZiBmb3IgUmljaCBUZXh0ICYgT3RoZXIgb253IGZvciBQcm9ncmVzcyBCYXIgLS0+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50ICYmIHFiSXRlbS5wcm9ncmVzc0JhclwiID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm54dC1hZGRpdGlvbmFsIFwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmFkZGl0aW9uYWxSaWNoQ29udGVudCAmJiAhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnQgcXVlcy1hbGVydDFcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvZGl2XCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEcm9wZG93bi0tPlxuICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25GbGFnXCIgPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJueHRkcm9wZG93blwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnZHQtbGluZSBueHQtbXl0LWFsaWduMyBueHQtbXl0LWFsaWduMiBkcERvd24gbnh0LWRyb3Bib3ggZG93bjEgbXl0LWRyb3Bib3ggbXl0LWJvcmRlci1yIG15dC1mb250MSc6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgJ2N1c3RvbS1zZWxlY3QnOiAhcWJJdGVtPy5wcm9ncmVzc0JhclxuICAgICAgICB9XCIgY2xhc3M9XCJtci1zbS0yIGRkLWhlaWdodCBueHQtZHJvcGJveCBcIiAgaWQ9XCJkcm9wZG93blwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiAoY2hhbmdlKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCA/ICcjZmZmJyA6ICcnXG4gICAgICAgIH19XCIgc3R5bGUuY29sb3I9XCJ7eyBxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLm9wdGlvbnNcIiBjbGFzcz1cIm9wdGlvblwiIHZhbHVlPVwie3sgb3B0LnZhbHVlIH19XCI+XG4gICAgICAgICAge3sgb3B0LnZhbHVlIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiLlwiIGRpc2FibGVkIGhpZGRlbj57eydwbGVhc2VNYWtlQ2hvaWNlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tVkQgUmFkaW8gdXBkYXRlIC0tPlxuICA8ZGl2ICpuZ0lmPVwicmFkaW9GbGFnIHx8IGRhdGFGbGFnXCIgY2xhc3M9XCJcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRoaXMucXVlc3Rpb25JdGVtLmVycm9yXCIgY2xhc3M9XCJueHQtZXJyb3ItbXNnXCI+IHt7IHF1ZXN0aW9uSXRlbT8uZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtY3VzdG9tLXJhZGlvLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5vcHRpb25zXCIgXG4gICAgICBbY2xhc3NdPVwiIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uIGludmFsaWQnIDogJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uJ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIFtpZF09XCJvcHQudmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIlxuICAgICAgICAgIG5hbWU9XCJpbnBWYWx1ZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LnZhbHVlKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpby1sYWJlbFwiIFtmb3JdPVwib3B0LnZhbHVlXCI+IHt7IG9wdC52YWx1ZSB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5vcHRpb25zLnJlY29yZHNcIiBjbGFzcz1cInJhZGlvIG54dC1yYWRpb09wdGlvblwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW9jb250YWluZXIgY29udGFpbmVyIG15dC1mb250NFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbaWRdPVwib3B0LmlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIG5hbWU9XCJpbnBWYWx1ZVwiIFt2YWx1ZV09XCJvcHQudmFsdWVcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LnZhbHVlKVwiIC8+XG4gICAgICAgICAge3sgb3B0LnZhbHVlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PiAgXG4gIDwhLS0gQ2hlY2tib3ggLS0+XG4gIDxkaXYgKm5nSWY9XCJjaGVja2JveEZsYWdcIiBjbGFzcz1cIlwiPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmVycm9yXCIgY2xhc3M9XCJjb25kLWRpdjJcIj5cbiAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uZXJyb3JNZXNzYWdlIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1jaGVja2JveC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uVmFsdWVzXCIgY2xhc3M9XCJueHQtY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtY29udGFpbmVyMVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnh0LWNoZWNrYm94XCIgW2lkXT1cIml0ZW0uaWRcIiBbKG5nTW9kZWwpXT1cIml0ZW0uY2hlY2tlZFwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWNoZWNrYm94LWxhYmVsXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0ZXh0RmxhZ1wiPlxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRvIHJlZHVjZSB0aGUgbWFyZ2luIC0tPlxuICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXN0aW9uSXRlbT8uc2l6ZSArICcgcGFkZGluZ25vbmUnXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJueHQtaW5wdXRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBcbiAgICAgICBpZD1cInRleHQtaW5wdXQtaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+IC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgQXJlYSAtLT5cbiAgPGRpdiAqbmdJZj1cInRhRmxhZ1wiID5cbiAgICA8ZGl2PlxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwibnh0LWlucHV0IG54dC10ZXh0LWFyZWFcIiBpZD1cInRhLWlucHV0LWlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIChmb2N1c291dCk9XCJ0YUZvY3VzT3V0ID0gdHJ1ZVwiXG4gICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCI+PC90ZXh0YXJlYT5cbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcIj48L2k+IC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENDIE51bWJlciBGb3JtYXQgLS0+XG4gIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgPGRpdiAqbmdJZj1cIm51bWJlckZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiVGV4dFwiIHBsYWNlaG9sZGVyPVwiMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDBcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cIm51bWJlci1pbnB1dC1pZFwiIChuZ01vZGVsQ2hhbmdlKT1cIkNDT25DaGFuZ2UoJGV2ZW50KVwiIHJlcXVpcmVkPVwiXCIgbWF4bGVuZ3RoPVwiMjlcIlxuICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOSBdL2csJycpO1wiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEVORC0tPlxuXG4gIDwhLS0gQWxwaGFOdW1lcmljIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYWxwaGFudW1lcmljRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+IDwhLS1VSSBub3QgY29tcGxldGVkLS0+XG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO1wiPlxuICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgIDxpbnB1dCB0eXBlPXRleHQgcGxhY2Vob2xkZXI9XCJ7eyd6ZXJvT2ZaZXJvJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBzdHlsZT1cInBhZGRpbmc6NXB4IDVweCA1cHggMTUwcHg7XCIgaWQ9XCJ5b3VyaWRoZXJlXCIvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVtYWlsIC0tPlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDxkaXYgKm5nSWY9XCJlbWFpbEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cImVtYWlsLWlucHV0LWlkXCJcbiAgICAgICAgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIERhdGVUaW1lIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZHRGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbnh0bXl0LXRpbWUxXCIgPlxuICAgIDwhLS0gRXJyb3IgSGFuZGxpbmcgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cblxuICAgIDwhLS0gRGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0ZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIEhBIDMxLUpBTi0yNCBUaGVzZSBsYWJlbHMgd2VyZSBvY2N1cGluZyB0aGUgZW1wdHkgc3BhY2Ugd2hlbiBkYXRlIHF1ZXN0aW9uIGNvbWVzLS0+XG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uZGF0ZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IEFkZGl0aW9uYWwgcGFyYW0gdG8gdXBkYXRlIHRoZSBxdWVzdGlvbiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGltZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidGltZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LnRpbWVUZXh0IH19PC9sYWJlbD4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBueHQtZHQtdGltZSc6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlYW5kVGltZTogIXFiSXRlbT8ucHJvZ3Jlc3NCYXJ9XCIgXG4gICAgICAgICAgICAgIGlkPVwiZGF0ZWFuZFRpbWVcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJzogcXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMCA/ICcnIDogJydcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG54dG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cbiAgICAgICAgICAgICAge3sgaG91ciB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5NTTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LngyNEhvdXJzID09IGZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwieycnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsICdkYXRlYW5kVGltZSc6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJ9XCI+PC9kaXY+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXR0YWNobWVudCAvIEZpbGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJmaWxlRmxhZ1wiPlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWRcIiBmb3I9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBhbGxvd2VkRmlsZUV4dGVuc2lvbiB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsdGhpcy5xdWVzdGlvbkl0ZW0pXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8dWwgKm5nSWY9XCJcbiAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcXVlc3Rpb25JdGVtPy50eXBlID09PSAnRmlsZScgJiZcbiAgICAgICAgIXFiSXRlbT8ucHJvZ3Jlc3NCYXJcbiAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWV9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPCEtLSBBdHRhY2htZW50IFByb2dyZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkaW5nLWJveFwiPlxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkaW5nLWZpbGUtbmFtZSBcIj57eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHRmaWxlLXVwbG9hZC1ib3hcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgIFxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCIgKm5nSWY9XCIgcXVlc3Rpb25JdGVtPy5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj4ge3sgcXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fTwvc3Bhbj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmlsZS1sYWJlbCBcIj5cbiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vZmlsZS11cGxvYWQucG5nXCIgY2xhc3M9XCJmaWxlLWljb25cIi8+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDwhLS0gQm9vayAtLT5cbiAgPGRpdiAqbmdJZj1cImJvb2tGbGFnXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICdmb3JtLWdyb3VwIGNvbnRlbnQtYm94JyA6ICdmb3JtLWdyb3VwJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICcnIDogJ254dC1teXQtYWxpZ24zJ1wiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2NvbC1sZy0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZScgOiAnY29sLW1kLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2Ygc3ViUXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5pZFwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBkb3duMjogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXM/LnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlXCI+e3sgcXVlcz8ucXVlc3Rpb25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbnh0bXl0LWRhdGVUaW1lTmV3XCIgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUaW1lJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uZGF0ZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgQWRkaXRpb25hbCBwYXJhbSB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8udGltZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5wcm9ncmVzc0Jhcn1cIiBcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbnh0bXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGhvdXIgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbWludXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IFRleHQsIEVtYWlsLCBsYWJlbCwgbnVtYmVyLCBEYXRlVGltZS0tPlxuICAgICAgICAgICAgPG54dC1pbnB1dCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0JyB8fCBxdWVzLnR5cGUgPT09ICdFbWFpbCcgfHwgcXVlcy50eXBlID09PSAnTnVtYmVyJyB8fCBxdWVzLnR5cGUgPT09ICdMYWJlbCcgfHwgcXVlcy50eXBlID09PSAnQm9vbGVhbicgfHwgcXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlVGltZScgfHwgcXVlcy50eXBlID09PSAnVGV4dEFyZWEnXCJcbiAgICAgICAgICAgIFt0eXBlXT1cInF1ZXMudHlwZSA9PT0gJ1RleHQnID8gJ3RleHQnIDogcXVlcy50eXBlID09PSAnRW1haWwnID8gJ2VtYWlsJyA6IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgPyAnbnVtYmVyJyA6IHF1ZXMudHlwZSA9PT0gJ0xhYmVsJyA/ICdsYWJlbCcgOiBxdWVzLnR5cGUgPT09ICdCb29sZWFuJyA/ICdjaGVja2JveCcgOiBxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnID8gJ3JpY2h0ZXh0JyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJyA/ICdkYXRldGltZScgOiBxdWVzLnR5cGUgPT09ICdUZXh0QXJlYScgPyAndGV4dGFyZWEnIDogJ3RleHQnXCJcbiAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICBbbGFiZWxGb250XT1cInF1ZXMuZm9udFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpXCJcbiAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInF1ZXMuZm9udENvbG9yXCJcbiAgICAgICAgICAgIFtsYWJlbFNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgIFtpbnB1dFdlaWdodF09XCJxdWVzLmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIlxuICAgICAgICAgICAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicXVlcy5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgICAgICAgICBbaW5wdXRJZF09XCJxdWVzLnRyYWNraW5nSWRcIlxuICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgW2lucHV0SWNvbkxlZnRTcmNdPVwicXVlcy5pY29uTGVmdFNyY1wiIFxuICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LHF1ZXMpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9ueHQtaW5wdXQ+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuaW5wdXRcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJoYW5kbGVMb2NhdGlvblNlbGVjdGVkKCRldmVudCxxdWVzKVwiPjwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWQgY3VzdG9tLWZpbGUtdXBsb2FkIGJnY29sb3Itd1wiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGJvb2tGbGFnQWNjZXB0IH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHVsICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBxdWVzLnR5cGUgPT09ICdGaWxlJyAmJlxuICAgICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcbiAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYm94XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJueHRmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiPnt7IHF1ZXM/LnF1ZXN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAge3snYXR0YWNoJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPCEtLSBTS1MxM01BUjI1IG54dCB0YWJsZSBjaGFuZ2UgLS0+XG4gICAgICAgICAgICA8bnh0LWRhdGF0YWJsZSBpc0VkaXRSb3cgaXNEZWxldGVSb3cgYWN0aW9uQnV0dG9uIGlzQnV0dG9uc1xuICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICBmcm9tID0gXCJmb3JtQnVpbGRlclwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC5kYXRhLCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCJcbiAgICAgICAgICAgICAgICBbdGFibGVDb25maWddPVwicXVlcy50YWJsZUNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgdGFibGVJZCA9IFwiXCJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcImx0clwiXG4gICAgICAgICAgICAgICAgdGFibGVXaWR0aCA9IFwiYXV0b1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9ueHQtZGF0YXRhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTS1MyNU1BUjI1IEltYWdlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdJbWFnZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgW3N0eWxlLmJvcmRlcl09XCJxdWVzLmltYWdlRGF0YSA/ICcxcHggc29saWQgYmxhY2snIDogJ25vbmUnXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwibnh0ZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDwhLS0gZm9yIGNvbW1vbiBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcz8uZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLUxpc3Qgc3RhcnQtLT5cbiAgPGRpdiAqbmdJZj1cImxpc3RGbGFnXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtbXl0LWFsaWduM1wiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLmlkKTtsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWRpcy1mbGV4IG15dC1mb250MyBteXQtZm9udDdcIj57eyBxdWVzPy5xdWVzdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAnbnh0LWRpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIG54dGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgIH1cIiBpZD1cInRleHRcIiBbaWRdPVwicXVlcy51bmlxdWVTdWJRSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXMpXCJcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCJcbiAgICAgICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFkZEZsYWdcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIkFkZChnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uaWQpKVwiIGNsYXNzPVwiYnRuXCI+e3snYWRkJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L2J1dHRvbj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tTGlzdCBFbmQtLT5cblxuICA8IS0tIEFjdGlvbnMgLS0+XG4gIDwhLS0gVkQgYnV0dG9uIGNvbmRpdGlvbiByZW1vdmVkLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4ZXJcIj5cbiAgICA8IS0tIEJhY2t3YXJkIC8gQmFjayAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgICA8IS0tVkQgZGlzYWJsZWQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImJhY2tidXR0b25cIiBcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uYmFja1wiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1sZWZ0LWJ0JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnknOlxuICAgICAgICAgICAgICAhcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbT8uYmFjayB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9yd2FyZCAvIE5leHQgLS0+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2ICAqbmdJZj1cInFiSXRlbS5uZXh0XCIgPlxuICAgICAgPGRpdiBjbGFzcz1cIm54dGJ1dHRvblwiPlxuICAgICAgICAgPCEtLVZEIGRpc2FibGVkIC0tPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1ydXN0eSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5JzpcbiAgICAgICAgICAgICAgIXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlTmV4dENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0ubmV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwidGhpcy5hYkl0ZW0/LnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cImNvbC1sZy0xMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICA8aDI+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5VGV4dH19PC9oMj5cbiAgPHA+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5U3ViVGV4dH19PC9wPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzdW1tYXJ5ICYmIHN1bW1hcnkubGVuZ3RoID4gMFwiIGhlaWdodD1cIjEwMCUgIWltcG9ydGFudFwiIGNsYXNzPVwiY29sLW1kLTEyXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY29sLW1kLTEyJzohcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgICAgICB9XCI+XG4gICAgPGgxIGNsYXNzPVwibnh0LWhlYWRlcjEgbnh0LXN1bW1hcnlwYWRkXCIgPnt7IHFiSXRlbS5zdWJUaXRsZSB9fTwvaDE+ICAgICAgICAgXG4gIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3MyXCIgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyBcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHN1bW1hcnk6ICAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPHAgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFZEIFF1ZXN0aW9uIE5vIGFkZGVkIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPjxzcGFuPnt7IHFhLnF1ZXN0aW9uTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IHFhLnF1ZXNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1hbnN3ZXJcIiA+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgaW4gc3VtbWFyeSBmb3IgYm9vayB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09ICdCb29rJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHFhLm15VmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwidmFsLnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlXCI+e3sgdmFsLnF1ZXN0aW9uVGV4dCB9fTo8c3Bhbj57eyB2YWwuaW5wdXQgfX08L3NwYW4+PC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIHZhbHVlIGZvciBkaXJlY3QgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnICYmIHFhLnFUeXAgIT0gJ0Jvb2snICAmJiBxYS5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZVwiPnt7IHFhLnF1ZXN0aW9uVGV4dCB9fSA8c3Bhbj48L3NwYW4+e3sgcWEuYW5zVmFsdWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwibnh0LWljb24tZWRpdGlvc1wiLz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuXG4gIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3MyXCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXIgXCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igbnh0c3VtbWFyeS10b3AnIDogcWJJdGVtLnByb2dyZXNzQmFyIH1cIiA+XG4gICAgICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzLXN1bW1hcnlcIiAqbmdJZj1cInFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5zdW1tYXJ5VGV4dCAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIiBcbiAgICAgIFtuZ0NsYXNzXT1cInsgc3VtbWFyeVRpdGxlOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJueHQtc3ViVGl0bGVcIiA+e3sgcWJJdGVtLnN1bW1hcnlUZXh0IH19PC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cIm54dC1zdWJUaXRsZTFcIiA+e3sgcWJJdGVtLnN1bW1hcnlTdWJUZXh0fX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICA8aDMgY2xhc3M9XCJzdW1tYXJ5LWhcIj5cbiAgICAgICAge3sgcWJJdGVtLnN1bW1hcnlUZXh0IH19XG4gICAgICA8L2gzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uIHN1bS1xdWVzIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzIHF1ZXN0aW9uIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzMSBxdWVzdGlvbjEgc3VtbWFyeS1jb21wbGV0ZWQgbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnh0LWVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRpb3NcIi8+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJueHQtYW5zd2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMS5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQtc3VtbWFyeVwiIC8+XG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhlcjFcIiAqbmdJZj1cImFiSXRlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcgJiYgcWJJdGVtLmNhbmNlbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnYnRuLXRleHQnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJ9XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5jYW5jZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gR3JvdXAgQWN0aW9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImFsaWduLWVkaXQtc3VibWl0XCIgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCI+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5zdWJtaXRcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieyAnYnRuLXRleHQyJzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIiBcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdENsaWNrKClcIj5cbiAgICAgICAge3sgcWJJdGVtLnN1Ym1pdCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLmVkaXRcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydncmV5JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrTmV3KClcIj5cbiAgICAgICAge3sgcWJJdGVtLmVkaXQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbjwvZGl2PiJdfQ==