simpo-component-library 3.0.33 → 3.0.35

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 (26) hide show
  1. package/esm2022/lib/elements/payment-confirmation/payment-confirmation.component.mjs +14 -6
  2. package/esm2022/lib/elements/portfolio/portfolio.component.mjs +8 -3
  3. package/esm2022/lib/elements/properties/properties.component.mjs +4 -3
  4. package/esm2022/lib/elements/property-view/property-view.component.mjs +3 -3
  5. package/esm2022/lib/pipes/amount.pipe.mjs +2 -2
  6. package/esm2022/lib/sections/kyc-details/kyc-details.component.mjs +2 -2
  7. package/esm2022/lib/sections/profile-section/profile-section.component.mjs +10 -4
  8. package/esm2022/lib/sections/property-detail/property-detail.component.mjs +30 -12
  9. package/esm2022/lib/sections/signup-signin/signup-signin.component.mjs +10 -9
  10. package/fesm2022/simpo-component-library.mjs +102 -67
  11. package/fesm2022/simpo-component-library.mjs.map +1 -1
  12. package/lib/directive/background-directive.d.ts +1 -1
  13. package/lib/directive/button-directive.directive.d.ts +1 -1
  14. package/lib/directive/color.directive.d.ts +1 -1
  15. package/lib/elements/payment-confirmation/payment-confirmation.component.d.ts +1 -0
  16. package/lib/elements/portfolio/portfolio.component.d.ts +2 -0
  17. package/lib/sections/banner-carousel/banner-carousel.component.d.ts +2 -2
  18. package/lib/sections/carousel-banner/carousel-banner.component.d.ts +1 -1
  19. package/lib/sections/image-section/image-section.component.d.ts +2 -2
  20. package/lib/sections/logo-showcase/logo-showcase.component.d.ts +1 -1
  21. package/lib/sections/pricing-section/pricing-section.component.d.ts +1 -1
  22. package/lib/sections/profile-section/profile-section.component.d.ts +2 -0
  23. package/lib/sections/property-detail/property-detail.component.d.ts +2 -0
  24. package/package.json +1 -1
  25. package/simpo-component-library-3.0.35.tgz +0 -0
  26. package/simpo-component-library-3.0.33.tgz +0 -0
@@ -119,18 +119,18 @@ export class SignupSigninComponent extends BaseSection {
119
119
  }
120
120
  }
121
121
  verifyPhoneEmail() {
122
- this.showWarning = false;
122
+ // this.showWarning = false
123
123
  if (this.isValidEmail(this.investor.emailId) && this.isValidPhone(this.investor.phoneNumber)) {
124
124
  this.restService.verifyEmailPhone(this.investor.phoneNumber, this.investor.emailId).subscribe({
125
125
  next: (res) => {
126
- this.showWarning = false;
126
+ // this.showWarning = false
127
127
  },
128
128
  error: (err) => {
129
- this.showWarning = true;
129
+ // this.showWarning = true;
130
130
  this.messageService.add({
131
131
  severity: 'error',
132
132
  summary: 'Sign Up',
133
- detail: 'User Already Exist with this credentials'
133
+ detail: `${err.message}`
134
134
  });
135
135
  }
136
136
  });
@@ -199,7 +199,7 @@ export class SignupSigninComponent extends BaseSection {
199
199
  this.messageService.add({
200
200
  severity: 'success',
201
201
  summary: 'OTP',
202
- detail: 'OTP Sent Successfully'
202
+ detail: `OTP Sent to this ${this.investor.emailId}`
203
203
  });
204
204
  this.currentPage = 'OTP_VERIFY';
205
205
  this.buttonLoader = false;
@@ -349,7 +349,8 @@ export class SignupSigninComponent extends BaseSection {
349
349
  return emailRegex.test(email.trim());
350
350
  }
351
351
  isValidPhone(phno) {
352
- const phoneRegex = /^[6789]\d{9}/;
352
+ const phoneRegex = /^[6789]\d{9}$/;
353
+ console.log(phoneRegex.test(phno.trim()));
353
354
  return phoneRegex.test(phno.trim());
354
355
  }
355
356
  getKycDetails() {
@@ -408,7 +409,7 @@ export class SignupSigninComponent extends BaseSection {
408
409
  });
409
410
  }
410
411
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: SignupSigninComponent, deps: [{ token: i1.EventsService }, { token: i2.RestService }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i4.MessageService }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
411
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: SignupSigninComponent, isStandalone: true, selector: "simpo-signup-signin", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"main-container h-85 d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{'background-image': 'url(' + backgroundImage + ')'}\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"middle-container w-40-85\" [id]=\"data?.id\" [simpoBackground]=\"data?.styles?.background\"\r\n [simpoAnimation]=\"data?.styles?.animation\" [simpoCorner]=\"data?.styles?.corners\">\r\n <div class=\"head\">{{ currentPage == 'LOGIN' || currentPage == 'OTP' ? \"Sign In\" : currentPage ==\r\n 'FORGOT_PASSWORD' ? \"Forgot Password\" : currentPage == 'OTP_VERIFY' ? \"OTP Verfication\" : \"Sign Up\"}}</div>\r\n <div class=\"field-container\">\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'LOGIN' || currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !showForgotFields\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Registered Email\" [(ngModel)]=\"loginEmail\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <div class=\"field-head\">OTP</div>\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"loginOtpArray[idx]\" (keyup)=\"moveLoginOtpCursor($event, idx)\" [id]=\"'loginOtp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'OTP_VERIFY'\">\r\n <!-- <div class=\"field-head\" *ngIf=\"currentPage == 'OTP' \">OTP</div> -->\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"otpArray[idx]\" (keyup)=\"move($event, idx)\" [id]=\"'otp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Name</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Name\" [(ngModel)]=\"investor.fullName\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidEmail\">\r\n <input type=\"email\" placeholder=\"Please Enter Your Email\" [(ngModel)]=\"investor.emailId\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validEmail()\" >\r\n </div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidEmail\">Invalid Email (Eg: johndoe&#64;gmail.com)</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Phone Number</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidPhone\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Phone Number\" [(ngModel)]=\"investor.phoneNumber\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validPhone()\" >\r\n </div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidPhone\">Invalid Phone number</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">New Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"newPassword\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">Re-Enter Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType1\" placeholder=\"Please Re-Enter Your Password\" [(ngModel)]=\"reEnteredPassword\">\r\n <mat-icon (click)=\"textType1 = 'text'\" *ngIf=\"textType1 == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType1 = 'password'\" *ngIf=\"textType1 == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'SIGN_UP' \">\r\n <div class=\"field-head\">Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"investor.password\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'LOGIN'\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">Forgot Password?</div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'OTP_VERIFY' || otpSent\" (click)=\"isSignUp ? sendOtp() : sendOtpForLogin();resend = true\">Resend OTP?</div>\r\n <div class=\"btn-container d-flex align-items-center justify-content-center\">\r\n <button class=\"login-btn cursor-pointer\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage != 'OTP' && (currentPage !== 'FORGOT_PASSWORD' || showForgotFields)\"\r\n (click)=\"buttonClickedEvent()\" [disabled]=\"buttonLoader\" [class.btn-size]=\"currentPage == 'FORGOT_PASSWORD' || currentPage == 'SIGN_UP' || currentPage == 'OTP_VERIFY'\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">{{ currentPage ==\r\n 'LOGIN' ? \"Login\" : currentPage == 'FORGOT_PASSWORD' ? \"Reset Password\" :\r\n currentPage == 'OTP_VERIFY' ? 'Verify OTP' : \"Create Account\"}}</span></button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"sendOtpForLogin()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Send Otp</span>\r\n </button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"verifyOtp()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\" >{{currentPage == 'OTP' ? \"Login\" : \"Proceed to Change Password\"}}</span>\r\n </button>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'OTP'\">\r\n <div class=\"signup-text\">Don\u2019t have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'SIGN_UP';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;investor.emailId = ''\">Sign\r\n Up</span></div>\r\n <div class=\"signup-text m-5\">or</div>\r\n <div class=\"signup-text\">Login with <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'LOGIN' \"\r\n (click)=\"currentPage = 'OTP'\">OTP</span><span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'OTP'\"\r\n (click)=\"currentPage = 'LOGIN';loginEmail = '';otpSent = false\">Password</span></div>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'SIGN_UP' || currentPage == 'FORGOT_PASSWORD'\">\r\n <div class=\"signup-text\">Already have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'LOGIN';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;showForgotFields = false\">Sign\r\n In</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans!important}mat-icon{font-family:Material Icons!important}.h-85{height:85vh;position:relative}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.w-40-85{width:40%}.btn-size{width:40%!important}.head{font-size:36px;font-weight:600;line-height:52px;color:#112133;text-align:center;padding:15px;padding-bottom:unset}.field-container{padding:15px}.field-head{margin-bottom:10px;font-size:17px;font-weight:600;line-height:24px;color:#2c2c2c}.field-text{padding:10px;border-radius:20px;font-size:15px;font-weight:400;color:#ababab;background:#fff}.field-text input{width:100%;border:none;appearance:none;outline:unset;background:#fff;color:#000}.forgot-password{text-align:end;font-size:16px;font-weight:600;line-height:24px;margin-bottom:15px}.another-page{margin-top:15px;text-align:center}.signup-text{color:#6b6b6b;font-size:14px;font-weight:400;line-height:24px;margin-bottom:5px}.m-5{margin:5px 0!important}.mb-30{margin-bottom:30px!important}.mb-15{margin-bottom:15px!important}.login-btn{border:unset;padding:12px 18px;border-radius:6px;font-size:18px!important;font-weight:600;line-height:20px}.span-text{font-weight:700!important}.cursor-pointer{cursor:pointer}.additional-styles{padding:25px!important;width:10%!important;border:unset!important;border-radius:20px!important}.clr-red{color:red;font-size:12px}.border-red{border:1px solid red!important}@media screen and (max-width : 475px){.w-40-85{width:85%}.h-86{height:90vh!important}.btn-size{width:100%!important;white-space:nowrap}.additional-styles{width:15%!important;border-radius:10px!important}}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i7.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i8.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
412
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: SignupSigninComponent, isStandalone: true, selector: "simpo-signup-signin", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"main-container h-85 d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{'background-image': 'url(' + backgroundImage + ')'}\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"middle-container w-40-85\" [id]=\"data?.id\" [simpoBackground]=\"data?.styles?.background\"\r\n [simpoAnimation]=\"data?.styles?.animation\" [simpoCorner]=\"data?.styles?.corners\">\r\n <div class=\"head\">{{ currentPage == 'LOGIN' || currentPage == 'OTP' ? \"Sign In\" : currentPage ==\r\n 'FORGOT_PASSWORD' ? \"Forgot Password\" : currentPage == 'OTP_VERIFY' ? \"OTP Verfication\" : \"Sign Up\"}}</div>\r\n <div class=\"field-container\">\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'LOGIN' || currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !showForgotFields\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Registered Email\" [(ngModel)]=\"loginEmail\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <div class=\"field-head\">OTP</div>\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"loginOtpArray[idx]\" (keyup)=\"moveLoginOtpCursor($event, idx)\" [id]=\"'loginOtp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'OTP_VERIFY'\">\r\n <!-- <div class=\"field-head\" *ngIf=\"currentPage == 'OTP' \">OTP</div> -->\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"otpArray[idx]\" (keyup)=\"move($event, idx)\" [id]=\"'otp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Name</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Name\" [(ngModel)]=\"investor.fullName\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidEmail\">\r\n <input type=\"email\" placeholder=\"Please Enter Your Email\" [(ngModel)]=\"investor.emailId\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validEmail()\" >\r\n </div>\r\n <!-- <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div> -->\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidEmail\">Invalid Email (Eg: johndoe&#64;gmail.com)</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Phone Number</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidPhone\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Phone Number\" [(ngModel)]=\"investor.phoneNumber\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validPhone()\" >\r\n </div>\r\n <!-- <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div> -->\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidPhone\">Invalid Phone number</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">New Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"newPassword\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">Re-Enter Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType1\" placeholder=\"Please Re-Enter Your Password\" [(ngModel)]=\"reEnteredPassword\">\r\n <mat-icon (click)=\"textType1 = 'text'\" *ngIf=\"textType1 == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType1 = 'password'\" *ngIf=\"textType1 == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'SIGN_UP' \">\r\n <div class=\"field-head\">Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"investor.password\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'LOGIN'\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">Forgot Password?</div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'OTP_VERIFY' || otpSent\" (click)=\"isSignUp ? sendOtp() : sendOtpForLogin();resend = true\">Resend OTP?</div>\r\n <div class=\"btn-container d-flex align-items-center justify-content-center\">\r\n <button class=\"login-btn cursor-pointer\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage != 'OTP' && (currentPage !== 'FORGOT_PASSWORD' || showForgotFields)\"\r\n (click)=\"buttonClickedEvent()\" [disabled]=\"buttonLoader\" [class.btn-size]=\"currentPage == 'FORGOT_PASSWORD' || currentPage == 'SIGN_UP' || currentPage == 'OTP_VERIFY'\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">{{ currentPage ==\r\n 'LOGIN' ? \"Login\" : currentPage == 'FORGOT_PASSWORD' ? \"Reset Password\" :\r\n currentPage == 'OTP_VERIFY' ? 'Verify OTP' : \"Create Account\"}}</span></button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"sendOtpForLogin()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Send Otp</span>\r\n </button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"verifyOtp()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\" >{{currentPage == 'OTP' ? \"Login\" : \"Proceed to Change Password\"}}</span>\r\n </button>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'OTP'\">\r\n <div class=\"signup-text\">Don\u2019t have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'SIGN_UP';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;investor.emailId = ''\">Sign\r\n Up</span></div>\r\n <div class=\"signup-text m-5\">or</div>\r\n <div class=\"signup-text\">Login with <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'LOGIN' \"\r\n (click)=\"currentPage = 'OTP'\">OTP</span><span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'OTP'\"\r\n (click)=\"currentPage = 'LOGIN';loginEmail = '';otpSent = false\">Password</span></div>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'SIGN_UP' || currentPage == 'FORGOT_PASSWORD'\">\r\n <div class=\"signup-text\">Already have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'LOGIN';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;showForgotFields = false\">Sign\r\n In</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans!important}mat-icon{font-family:Material Icons!important}.h-85{height:85vh;position:relative}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.w-40-85{width:40%}.btn-size{width:40%!important}.head{font-size:36px;font-weight:600;line-height:52px;color:#112133;text-align:center;padding:15px;padding-bottom:unset}.field-container{padding:15px}.field-head{margin-bottom:10px;font-size:17px;font-weight:600;line-height:24px;color:#2c2c2c}.field-text{padding:10px;border-radius:20px;font-size:15px;font-weight:400;color:#ababab;background:#fff}.field-text input{width:100%;border:none;appearance:none;outline:unset;background:#fff;color:#000}.forgot-password{text-align:end;font-size:16px;font-weight:600;line-height:24px;margin-bottom:15px}.another-page{margin-top:15px;text-align:center}.signup-text{color:#6b6b6b;font-size:14px;font-weight:400;line-height:24px;margin-bottom:5px}.m-5{margin:5px 0!important}.mb-30{margin-bottom:30px!important}.mb-15{margin-bottom:15px!important}.login-btn{border:unset;padding:12px 18px;border-radius:6px;font-size:18px!important;font-weight:600;line-height:20px}.span-text{font-weight:700!important}.cursor-pointer{cursor:pointer}.additional-styles{padding:25px!important;width:10%!important;border:unset!important;border-radius:20px!important}.clr-red{color:red;font-size:12px}.border-red{border:1px solid red!important}@media screen and (max-width : 475px){.w-40-85{width:85%}.h-86{height:90vh!important}.btn-size{width:100%!important;white-space:nowrap}.additional-styles{width:15%!important;border-radius:10px!important}}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i7.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i8.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type:
412
413
  //Directives
413
414
  BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i10.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }] }); }
414
415
  }
@@ -427,7 +428,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
427
428
  AnimationDirective,
428
429
  CornerDirective,
429
430
  ToastModule
430
- ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"main-container h-85 d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{'background-image': 'url(' + backgroundImage + ')'}\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"middle-container w-40-85\" [id]=\"data?.id\" [simpoBackground]=\"data?.styles?.background\"\r\n [simpoAnimation]=\"data?.styles?.animation\" [simpoCorner]=\"data?.styles?.corners\">\r\n <div class=\"head\">{{ currentPage == 'LOGIN' || currentPage == 'OTP' ? \"Sign In\" : currentPage ==\r\n 'FORGOT_PASSWORD' ? \"Forgot Password\" : currentPage == 'OTP_VERIFY' ? \"OTP Verfication\" : \"Sign Up\"}}</div>\r\n <div class=\"field-container\">\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'LOGIN' || currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !showForgotFields\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Registered Email\" [(ngModel)]=\"loginEmail\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <div class=\"field-head\">OTP</div>\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"loginOtpArray[idx]\" (keyup)=\"moveLoginOtpCursor($event, idx)\" [id]=\"'loginOtp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'OTP_VERIFY'\">\r\n <!-- <div class=\"field-head\" *ngIf=\"currentPage == 'OTP' \">OTP</div> -->\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"otpArray[idx]\" (keyup)=\"move($event, idx)\" [id]=\"'otp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Name</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Name\" [(ngModel)]=\"investor.fullName\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidEmail\">\r\n <input type=\"email\" placeholder=\"Please Enter Your Email\" [(ngModel)]=\"investor.emailId\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validEmail()\" >\r\n </div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidEmail\">Invalid Email (Eg: johndoe&#64;gmail.com)</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Phone Number</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidPhone\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Phone Number\" [(ngModel)]=\"investor.phoneNumber\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validPhone()\" >\r\n </div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div>\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidPhone\">Invalid Phone number</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">New Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"newPassword\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">Re-Enter Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType1\" placeholder=\"Please Re-Enter Your Password\" [(ngModel)]=\"reEnteredPassword\">\r\n <mat-icon (click)=\"textType1 = 'text'\" *ngIf=\"textType1 == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType1 = 'password'\" *ngIf=\"textType1 == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'SIGN_UP' \">\r\n <div class=\"field-head\">Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"investor.password\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility_off</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'LOGIN'\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">Forgot Password?</div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'OTP_VERIFY' || otpSent\" (click)=\"isSignUp ? sendOtp() : sendOtpForLogin();resend = true\">Resend OTP?</div>\r\n <div class=\"btn-container d-flex align-items-center justify-content-center\">\r\n <button class=\"login-btn cursor-pointer\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage != 'OTP' && (currentPage !== 'FORGOT_PASSWORD' || showForgotFields)\"\r\n (click)=\"buttonClickedEvent()\" [disabled]=\"buttonLoader\" [class.btn-size]=\"currentPage == 'FORGOT_PASSWORD' || currentPage == 'SIGN_UP' || currentPage == 'OTP_VERIFY'\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">{{ currentPage ==\r\n 'LOGIN' ? \"Login\" : currentPage == 'FORGOT_PASSWORD' ? \"Reset Password\" :\r\n currentPage == 'OTP_VERIFY' ? 'Verify OTP' : \"Create Account\"}}</span></button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"sendOtpForLogin()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Send Otp</span>\r\n </button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"verifyOtp()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\" >{{currentPage == 'OTP' ? \"Login\" : \"Proceed to Change Password\"}}</span>\r\n </button>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'OTP'\">\r\n <div class=\"signup-text\">Don\u2019t have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'SIGN_UP';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;investor.emailId = ''\">Sign\r\n Up</span></div>\r\n <div class=\"signup-text m-5\">or</div>\r\n <div class=\"signup-text\">Login with <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'LOGIN' \"\r\n (click)=\"currentPage = 'OTP'\">OTP</span><span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'OTP'\"\r\n (click)=\"currentPage = 'LOGIN';loginEmail = '';otpSent = false\">Password</span></div>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'SIGN_UP' || currentPage == 'FORGOT_PASSWORD'\">\r\n <div class=\"signup-text\">Already have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'LOGIN';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;showForgotFields = false\">Sign\r\n In</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans!important}mat-icon{font-family:Material Icons!important}.h-85{height:85vh;position:relative}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.w-40-85{width:40%}.btn-size{width:40%!important}.head{font-size:36px;font-weight:600;line-height:52px;color:#112133;text-align:center;padding:15px;padding-bottom:unset}.field-container{padding:15px}.field-head{margin-bottom:10px;font-size:17px;font-weight:600;line-height:24px;color:#2c2c2c}.field-text{padding:10px;border-radius:20px;font-size:15px;font-weight:400;color:#ababab;background:#fff}.field-text input{width:100%;border:none;appearance:none;outline:unset;background:#fff;color:#000}.forgot-password{text-align:end;font-size:16px;font-weight:600;line-height:24px;margin-bottom:15px}.another-page{margin-top:15px;text-align:center}.signup-text{color:#6b6b6b;font-size:14px;font-weight:400;line-height:24px;margin-bottom:5px}.m-5{margin:5px 0!important}.mb-30{margin-bottom:30px!important}.mb-15{margin-bottom:15px!important}.login-btn{border:unset;padding:12px 18px;border-radius:6px;font-size:18px!important;font-weight:600;line-height:20px}.span-text{font-weight:700!important}.cursor-pointer{cursor:pointer}.additional-styles{padding:25px!important;width:10%!important;border:unset!important;border-radius:20px!important}.clr-red{color:red;font-size:12px}.border-red{border:1px solid red!important}@media screen and (max-width : 475px){.w-40-85{width:85%}.h-86{height:90vh!important}.btn-size{width:100%!important;white-space:nowrap}.additional-styles{width:15%!important;border-radius:10px!important}}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"] }]
431
+ ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"main-container h-85 d-flex align-items-center justify-content-center\"\r\n [ngStyle]=\"{'background-image': 'url(' + backgroundImage + ')'}\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"middle-container w-40-85\" [id]=\"data?.id\" [simpoBackground]=\"data?.styles?.background\"\r\n [simpoAnimation]=\"data?.styles?.animation\" [simpoCorner]=\"data?.styles?.corners\">\r\n <div class=\"head\">{{ currentPage == 'LOGIN' || currentPage == 'OTP' ? \"Sign In\" : currentPage ==\r\n 'FORGOT_PASSWORD' ? \"Forgot Password\" : currentPage == 'OTP_VERIFY' ? \"OTP Verfication\" : \"Sign Up\"}}</div>\r\n <div class=\"field-container\">\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'LOGIN' || currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !showForgotFields\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Registered Email\" [(ngModel)]=\"loginEmail\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <div class=\"field-head\">OTP</div>\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"loginOtpArray[idx]\" (keyup)=\"moveLoginOtpCursor($event, idx)\" [id]=\"'loginOtp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'OTP_VERIFY'\">\r\n <!-- <div class=\"field-head\" *ngIf=\"currentPage == 'OTP' \">OTP</div> -->\r\n <div class=\"field-text-1\">\r\n <div id=\"otp\" class=\"inputs d-flex flex-row justify-content-center mt-2\">\r\n <ng-container *ngFor=\"let _ of [].constructor(4); let idx = index\">\r\n <input class=\"m-2 text-center form-control rounded additional-styles\" type=\"number\" max=\"1\"\r\n [(ngModel)]=\"otpArray[idx]\" (keyup)=\"move($event, idx)\" [id]=\"'otp_'+idx\" #otpInput />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Name</div>\r\n <div class=\"field-text\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Name\" [(ngModel)]=\"investor.fullName\">\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Email</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidEmail\">\r\n <input type=\"email\" placeholder=\"Please Enter Your Email\" [(ngModel)]=\"investor.emailId\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validEmail()\" >\r\n </div>\r\n <!-- <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div> -->\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidEmail\">Invalid Email (Eg: johndoe&#64;gmail.com)</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'SIGN_UP'\">\r\n <div class=\"field-head\">Phone Number</div>\r\n <div class=\"field-text\" [class.border-red]=\"showWarning || invalidPhone\">\r\n <input type=\"text\" placeholder=\"Please Enter Your Phone Number\" [(ngModel)]=\"investor.phoneNumber\" (ngModelChange)=\"verifyPhoneEmail()\" (blur)=\"validPhone()\" >\r\n </div>\r\n <!-- <div class=\"warning-text clr-red\" *ngIf=\"showWarning\">User Already Exist</div> -->\r\n <div class=\"warning-text clr-red\" *ngIf=\"invalidPhone\">Invalid Phone number</div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">New Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"newPassword\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'FORGOT_PASSWORD' && showForgotFields\" >\r\n <div class=\"field-head\">Re-Enter Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType1\" placeholder=\"Please Re-Enter Your Password\" [(ngModel)]=\"reEnteredPassword\">\r\n <mat-icon (click)=\"textType1 = 'text'\" *ngIf=\"textType1 == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType1 = 'password'\" *ngIf=\"textType1 == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"field mb-15\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'SIGN_UP' \">\r\n <div class=\"field-head\">Password</div>\r\n <div class=\"field-text d-flex\">\r\n <input [type]=\"textType\" placeholder=\"Please Enter Your Password\" [(ngModel)]=\"investor.password\">\r\n <mat-icon (click)=\"textType = 'text'\" *ngIf=\"textType == 'password'\">visibility_off</mat-icon>\r\n <mat-icon (click)=\"textType = 'password'\" *ngIf=\"textType == 'text'\">visibility</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'LOGIN'\" (click)=\"currentPage = 'FORGOT_PASSWORD'\">Forgot Password?</div>\r\n <div class=\"forgot-password cursor-pointer\" [style.color]=\"data?.styles?.background?.accentColor\"\r\n *ngIf=\"currentPage == 'OTP_VERIFY' || otpSent\" (click)=\"isSignUp ? sendOtp() : sendOtpForLogin();resend = true\">Resend OTP?</div>\r\n <div class=\"btn-container d-flex align-items-center justify-content-center\">\r\n <button class=\"login-btn cursor-pointer\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage != 'OTP' && (currentPage !== 'FORGOT_PASSWORD' || showForgotFields)\"\r\n (click)=\"buttonClickedEvent()\" [disabled]=\"buttonLoader\" [class.btn-size]=\"currentPage == 'FORGOT_PASSWORD' || currentPage == 'SIGN_UP' || currentPage == 'OTP_VERIFY'\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">{{ currentPage ==\r\n 'LOGIN' ? \"Login\" : currentPage == 'FORGOT_PASSWORD' ? \"Reset Password\" :\r\n currentPage == 'OTP_VERIFY' ? 'Verify OTP' : \"Create Account\"}}</span></button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"sendOtpForLogin()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && !otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Send Otp</span>\r\n </button>\r\n\r\n <button class=\"login-btn cursor-pointer\" (click)=\"verifyOtp()\" [disabled]=\"buttonLoader\" [style.background]=\"data?.styles?.background?.accentColor\" *ngIf=\"(currentPage == 'OTP' || currentPage == 'FORGOT_PASSWORD') && otpSent && !showForgotFields\">\r\n <span *ngIf=\"buttonLoader\" ><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\" >{{currentPage == 'OTP' ? \"Login\" : \"Proceed to Change Password\"}}</span>\r\n </button>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'LOGIN' || currentPage == 'OTP'\">\r\n <div class=\"signup-text\">Don\u2019t have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'SIGN_UP';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;investor.emailId = ''\">Sign\r\n Up</span></div>\r\n <div class=\"signup-text m-5\">or</div>\r\n <div class=\"signup-text\">Login with <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'LOGIN' \"\r\n (click)=\"currentPage = 'OTP'\">OTP</span><span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" *ngIf=\"currentPage == 'OTP'\"\r\n (click)=\"currentPage = 'LOGIN';loginEmail = '';otpSent = false\">Password</span></div>\r\n </div>\r\n <div class=\"another-page\" *ngIf=\"currentPage == 'SIGN_UP' || currentPage == 'FORGOT_PASSWORD'\">\r\n <div class=\"signup-text\">Already have an account? <span class=\"span-text cursor-pointer\"\r\n [style.color]=\"data?.styles?.background?.accentColor\" (click)=\"currentPage = 'LOGIN';loginEmail = '';investor.password = '';investor.phoneNumber = '';otpSent = false;showForgotFields = false\">Sign\r\n In</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans!important}mat-icon{font-family:Material Icons!important}.h-85{height:85vh;position:relative}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.w-40-85{width:40%}.btn-size{width:40%!important}.head{font-size:36px;font-weight:600;line-height:52px;color:#112133;text-align:center;padding:15px;padding-bottom:unset}.field-container{padding:15px}.field-head{margin-bottom:10px;font-size:17px;font-weight:600;line-height:24px;color:#2c2c2c}.field-text{padding:10px;border-radius:20px;font-size:15px;font-weight:400;color:#ababab;background:#fff}.field-text input{width:100%;border:none;appearance:none;outline:unset;background:#fff;color:#000}.forgot-password{text-align:end;font-size:16px;font-weight:600;line-height:24px;margin-bottom:15px}.another-page{margin-top:15px;text-align:center}.signup-text{color:#6b6b6b;font-size:14px;font-weight:400;line-height:24px;margin-bottom:5px}.m-5{margin:5px 0!important}.mb-30{margin-bottom:30px!important}.mb-15{margin-bottom:15px!important}.login-btn{border:unset;padding:12px 18px;border-radius:6px;font-size:18px!important;font-weight:600;line-height:20px}.span-text{font-weight:700!important}.cursor-pointer{cursor:pointer}.additional-styles{padding:25px!important;width:10%!important;border:unset!important;border-radius:20px!important}.clr-red{color:red;font-size:12px}.border-red{border:1px solid red!important}@media screen and (max-width : 475px){.w-40-85{width:85%}.h-86{height:90vh!important}.btn-size{width:100%!important;white-space:nowrap}.additional-styles{width:15%!important;border-radius:10px!important}}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"] }]
431
432
  }], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.RestService }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i4.MessageService }, { type: i5.MatDialog }], propDecorators: { data: [{
432
433
  type: Input
433
434
  }], index: [{
@@ -437,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
437
438
  }], delete: [{
438
439
  type: Input
439
440
  }] } });
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbnVwLXNpZ25pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3NpZ251cC1zaWduaW4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3NpZ251cC1zaWduaW4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBMkIsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxXQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixD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QUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFBO2dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtnQkFDbEIsdUJBQXVCO2dCQUN2Qiw4QkFBOEI7Z0JBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzVDLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDOzhHQTdhVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw0SUFKckIsQ0FBQyxjQUFjLENBQUMsaURDM0M3QiwrOVRBb0lBLHl3RER4R0ksWUFBWSxrYkFDWixvQkFBb0Isb1dBR3BCLGNBQWMsK0VBQ2QsV0FBVyw0OEJBQ1gsT0FBTztnQkFDUCxZQUFZO2dCQUVaLG1CQUFtQiwwR0FDbkIsa0JBQWtCLHlGQUNsQixlQUFlLGtGQUNmLFdBQVc7OzJGQU9GLHFCQUFxQjtrQkF2QmpDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QiwyQkFBMkI7d0JBQzNCLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLFlBQVk7d0JBRVosbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsV0FBVztxQkFFWixhQUNVLENBQUMsY0FBYyxDQUFDO21OQUtsQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTaWduSW5TaWduVXBTdHlsZXNNb2RlbCwgU2lnblVwU2lnbkluTW9kZWwgfSBmcm9tICcuL3NpZ251cC1zaWduaW4ubW9kZWwnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGVsZXRlSG92ZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGVsZXRlLWhvdmVyLWVsZW1lbnQvZGVsZXRlLWhvdmVyLWVsZW1lbnQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEt5Y0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuLi9reWMtZGV0YWlscy9reWMtZGV0YWlscy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdG9yYWdlS2V5cyB9IGZyb20gJy4uLy4uL3N0eWxlcy9pbmRleCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1zaWdudXAtc2lnbmluJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcclxuICAgIERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgLy9EaXJlY3RpdmVzXHJcblxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFRvYXN0TW9kdWxlXHJcblxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWdudXAtc2lnbmluLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lnbnVwU2lnbmluQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBTaWduVXBTaWduSW5Nb2RlbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIHByb3BlcnR5SWQ/OiBudW1iZXI7XHJcbiAgYnV0dG9uTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGV4dFR5cGU6IHN0cmluZyA9IFwicGFzc3dvcmRcIlxyXG4gIHRleHRUeXBlMSA6IHN0cmluZyA9IFwicGFzc3dvcmRcIlxyXG4gIGt5Y0RldGFpbHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFyYW1bJ3R5cGUnXSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3R5cGUnXTtcclxuICAgICAgaWYgKHBhcmFtWydpZCddKVxyXG4gICAgICAgIHRoaXMucHJvcGVydHlJZCA9IHBhcmFtWydpZCddO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5reWNEZXRhaWxzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgY3VycmVudFBhZ2U6ICdMT0dJTicgfCAnU0lHTl9VUCcgfCAnT1RQJyB8ICdGT1JHT1RfUEFTU1dPUkQnIHwgJ09UUF9WRVJJRlknID0gJ0xPR0lOJztcclxuICBreWNEZXRhaWxzU3Vic2NyaXBpdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBiYWNrZ3JvdW5kSW1hZ2U6IGFueSA9IFwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81MDA0MTVjMTczOTQzNDE4NjMxMGltYWdlJTIwMTYucG5nXCJcclxuXHJcbiAgZWRpdFNlY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIG90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgbW92ZShldmVudDogYW55LCBpZHg6IG51bWJlcikge1xyXG5cclxuICAgIGlmIChpc05hTihOdW1iZXIoZXZlbnQua2V5KSkgJiYgZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGV2ZW50LmNvZGUgIT0gXCJCYWNrc3BhY2VcIikge1xyXG4gICAgICB0aGlzLm90cEFycmF5W2lkeF0gPSBldmVudC5rZXk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwQXJyYXlbaWR4XSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm90cF9cIiArIChpZHggLSAxKSk/LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2dpbk90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgbW92ZUxvZ2luT3RwQ3Vyc29yKGV2ZW50OiBhbnksIGlkeDogbnVtYmVyKSB7XHJcblxyXG4gICAgaWYgKGlzTmFOKE51bWJlcihldmVudC5rZXkpKSAmJiBldmVudC5jb2RlICE9IFwiQmFja3NwYWNlXCIpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKSB7XHJcbiAgICAgIHRoaXMubG9naW5PdHBBcnJheVtpZHhdID0gZXZlbnQua2V5O1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luT3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwQXJyYXlbaWR4XSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luT3RwX1wiICsgKGlkeCAtIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ2luRW1haWw6IHN0cmluZyA9ICcnXHJcbiAgaW52ZXN0b3I6IGFueSA9IHtcclxuICAgIFwiZnVsbE5hbWVcIjogXCJcIixcclxuICAgIFwiZW1haWxJZFwiOiBcIlwiLFxyXG4gICAgXCJwaG9uZU51bWJlclwiOiBcIlwiLFxyXG4gICAgXCJwYXNzd29yZFwiOiBcIlwiLFxyXG4gICAgXCJreWNWZXJpZmllZFwiOiBmYWxzZSxcclxuICAgIFwiYWN0aXZlXCI6IHRydWUsXHJcbiAgICBcIm90cFwiOiBcIlwiLFxyXG4gICAgXCJkZWxldGVkXCI6IGZhbHNlXHJcbiAgfVxyXG4gIG90cFNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYnV0dG9uQ2xpY2tlZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdTSUdOX1VQJykge1xyXG4gICAgICB0aGlzLmlzU2lnblVwID0gdHJ1ZVxyXG4gICAgICB0aGlzLnNlbmRPdHAoKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdPVFBfVkVSSUZZJykge1xyXG4gICAgICB0aGlzLnNpZ25VcCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdMT0dJTicpIHtcclxuICAgICAgdGhpcy5sb2dpbldpdGhQYXNzd29yZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgICAgdGhpcy5mb3Jnb3RQYXNzd29yZCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93V2FybmluZyA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGludmFsaWRFbWFpbCA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGludmFsaWRQaG9uZSA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHZlcmlmeVBob25lRW1haWwoKSB7XHJcbiAgICB0aGlzLnNob3dXYXJuaW5nID0gZmFsc2VcclxuICAgIGlmICh0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmludmVzdG9yLmVtYWlsSWQpICYmIHRoaXMuaXNWYWxpZFBob25lKHRoaXMuaW52ZXN0b3IucGhvbmVOdW1iZXIpKSB7XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5RW1haWxQaG9uZSh0aGlzLmludmVzdG9yLnBob25lTnVtYmVyLCB0aGlzLmludmVzdG9yLmVtYWlsSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYXJuaW5nID0gZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICAgICAgZGV0YWlsOiAnVXNlciBBbHJlYWR5IEV4aXN0IHdpdGggdGhpcyBjcmVkZW50aWFscydcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgdmFsaWRFbWFpbCgpe1xyXG4gICAgaWYoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMuaW52ZXN0b3IuZW1haWxJZCkpXHJcbiAgICAgIHRoaXMuaW52YWxpZEVtYWlsID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmludmFsaWRFbWFpbCA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICB2YWxpZFBob25lKCl7XHJcbiAgICBpZighdGhpcy5pc1ZhbGlkUGhvbmUodGhpcy5pbnZlc3Rvci5waG9uZU51bWJlcikpXHJcbiAgICAgIHRoaXMuaW52YWxpZFBob25lID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmludmFsaWRQaG9uZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuXHJcbiAgc2lnblVwKCkge1xyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5pbnZlc3Rvci5vdHAgPSBcIlwiXHJcbiAgICB0aGlzLm90cEFycmF5LmZvckVhY2goKG90cCkgPT4ge1xyXG4gICAgICB0aGlzLmludmVzdG9yLm90cCArPSBvdHA7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zaWduVXAodGhpcy5pbnZlc3Rvcikuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICAgIGRldGFpbDogJ1NpZ24gdXAgU3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaW52ZXN0b3IucGFzc3dvcmQgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5vdHBBcnJheSA9IG5ldyBBcnJheSg0KS5maWxsKCcnKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAnTE9HSU4nO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnU2lnbiBVcCBGYWlsZWQnLFxyXG4gICAgICAgICAgZGV0YWlsOiAnU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBzZW5kT3RwKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmludmVzdG9yLmVtYWlsSWQpKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICBzdW1tYXJ5OiBcIlNpZ24gVXBcIixcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgRW50ZXIgVmFsaWQgRW1haWwgQWRkcmVzcydcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmKCF0aGlzLmlzVmFsaWRQaG9uZSh0aGlzLmludmVzdG9yLnBob25lTnVtYmVyKSl7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICBzdW1tYXJ5OiBcIlNpZ24gVXBcIixcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgRW50ZXIgVmFsaWQgUGhvbmUgTnVtYmVyJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwKHRoaXMuaW52ZXN0b3IuZW1haWxJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAnLFxyXG4gICAgICAgICAgZGV0YWlsOiAnT1RQIFNlbnQgU3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAnT1RQX1ZFUklGWSc7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgRmFpbGVkJyxcclxuICAgICAgICAgIGRldGFpbDogZXJyLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2VuZCBPVFAuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2dpbldpdGhQYXNzd29yZCgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMubG9naW5FbWFpbCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgdmFsaWQgZW1haWwnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW52ZXN0b3IucGFzc3dvcmQubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgcGFzc3dvcmQnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UubG9naW4oeyBlbWFpbDogdGhpcy5sb2dpbkVtYWlsLCBwYXNzd29yZDogdGhpcy5pbnZlc3Rvci5wYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0xvZyBJbicsXHJcbiAgICAgICAgICBkZXRhaWw6ICdMb2dnZWQgaW4gc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLklOVkVTVE9SX0lELCByZXMuaW52ZXN0b3JJZCk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlJZCkge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkZXRhaWxzJ10sIHsgcXVlcnlQYXJhbXM6IHsgaWQ6IHRoaXMucHJvcGVydHlJZCB9IH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEt5Y0RldGFpbHMoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Byb3BlcnR5LWxpc3QnXSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdMb2dpbiBGYWlsZWQnLFxyXG4gICAgICAgICAgZGV0YWlsOiBlcnIuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ludmFsaWQgZW1haWwgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzU2lnblVwOiBib29sZWFuID0gZmFsc2VcclxuICByZXNlbmQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHNlbmRPdHBGb3JMb2dpbigpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMubG9naW5FbWFpbCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdJbnZhaWxkIEVtYWlsIEFkZHJlc3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5yZXNlbmQgPT0gZmFsc2UgJiYgdGhpcy5jdXJyZW50UGFnZSA9PSAnTE9HSU4nKSB7XHJcbiAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwKHRoaXMubG9naW5FbWFpbCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ09UUCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgU2VudCBTdWNjZXNzZnVsbHknXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ0ZhaWxlZCB0byBzZW5kIE9UUC4gUGxlYXNlIHRyeSBhZ2Fpbi4nXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd0ZvcmdvdEZpZWxkczogYm9vbGVhbiA9IGZhbHNlXHJcbiAgbG9nSW5PdHA6IHN0cmluZyA9IFwiXCJcclxuICB2ZXJpZnlPdHAoKSB7XHJcbiAgICBcclxuICAgIGlmKCF0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmxvZ2luRW1haWwpKXtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdJbnZhaWxkIEVtYWlsIEFkZHJlc3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5sb2dJbk90cCA9ICcnO1xyXG4gICAgdGhpcy5sb2dpbk90cEFycmF5LmZvckVhY2goKG90cCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ0luT3RwICs9IG90cDtcclxuICAgIH0pO1xyXG4gICAgLy8gaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgIC8vICAgdGhpcy5zaG93Rm9yZ290RmllbGRzID0gdHJ1ZVxyXG4gICAgLy8gICB0aGlzLm90cFNlbnQgPSBmYWxzZVxyXG4gICAgLy8gICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlXHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5T3RwKHRoaXMubG9naW5FbWFpbCwgdGhpcy5sb2dJbk90cCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0ZvcmdvdEZpZWxkcyA9IHRydWVcclxuICAgICAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnTG9nIEluJyxcclxuICAgICAgICAgIGRldGFpbDogJ0xvZ2dlZCBpbiBzdWNjZXNzZnVsbHknXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vdHBBcnJheSA9IG5ldyBBcnJheSg0KS5maWxsKCcnKVxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLklOVkVTVE9SX0lELCByZXMuaW52ZXN0b3JJZCk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlJZCkge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkZXRhaWxzJ10sIHsgcXVlcnlQYXJhbXM6IHsgaWQ6IHRoaXMucHJvcGVydHlJZCB9IH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEt5Y0RldGFpbHMoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Byb3BlcnR5LWxpc3QnXSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ0ludmFsaWQgT1RQLiBQbGVhc2UgdHJ5IGFnYWluLidcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRFbWFpbChlbWFpbDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xyXG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdChlbWFpbC50cmltKCkpO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFBob25lKHBobm8gOiBzdHJpbmcpIDogYm9vbGVhbntcclxuICAgIGNvbnN0IHBob25lUmVnZXggPSAvXls2Nzg5XVxcZHs5fS9cclxuICAgIHJldHVybiBwaG9uZVJlZ2V4LnRlc3QocGhuby50cmltKCkpXHJcbiAgfVxyXG5cclxuICBnZXRLeWNEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5reWNEZXRhaWxzU3Vic2NyaXBpdGlvbiA9IHRoaXMucmVzdFNlcnZpY2UuZ2V0S3ljRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCEocmVzPy5tZXNzYWdlPy5wYW5WZXJpZmllZCA9PT0gJ1ZBTElEJyAmJiByZXM/Lm1lc3NhZ2U/LmFhZGhhYXJWZXJpZmllZCA9PT0gJ1ZBTElEJykpIHtcclxuICAgICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKEt5Y0RldGFpbHNDb21wb25lbnQsIHsgcGFuZWxDbGFzczogXCJsb2dpbi1zaWdudXBcIiB9KTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBpc01vYmlsZSgpIHtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA0NzU7XHJcbiAgfVxyXG5cclxuICByZUVudGVyZWRQYXNzd29yZDogc3RyaW5nID0gXCJcIlxyXG4gIG5ld1Bhc3N3b3JkOiBzdHJpbmcgPSBcIlwiXHJcbiAgZk90cFNlbnQ6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBjaGVja1Bhc3N3b3JkTWF0Y2gocGFzc3dvcmQ6IHN0cmluZywgcmVFbnRlcmVkUGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgaWYgKHBhc3N3b3JkICE9IHJlRW50ZXJlZFBhc3N3b3JkKVxyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBmb3Jnb3RQYXNzd29yZCgpIHtcclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBcImVtYWlsXCI6IHRoaXMubG9naW5FbWFpbCxcclxuICAgICAgXCJuZXdQYXNzd29yZFwiOiB0aGlzLm5ld1Bhc3N3b3JkLFxyXG4gICAgICBcImNvbmZpcm1QYXNzd29yZFwiOiB0aGlzLnJlRW50ZXJlZFBhc3N3b3JkXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5mb3Jnb3RQYXNzd29yZChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdGb3Jnb3QgUGFzc3dvcmQnLFxyXG4gICAgICAgICAgZGV0YWlsOiAnU3VjY2Vzc2Z1bGx5IENoYW5nZWQgdGhlIHBhc3N3b3JkJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9ICdMT0dJTidcclxuICAgICAgICB0aGlzLnNob3dGb3Jnb3RGaWVsZHMgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5sb2dpbkVtYWlsID0gXCJcIlxyXG4gICAgICAgIHRoaXMubG9nSW5PdHAgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5uZXdQYXNzd29yZD0gXCJcIlxyXG4gICAgICAgIHRoaXMucmVFbnRlcmVkUGFzc3dvcmQgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5sb2dpbk90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdFcnJvcicsXHJcbiAgICAgICAgICBkZXRhaWw6ICdQbGVhc2UgdHJ5IGFnYWluLidcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5sb2dpbkVtYWlsID0gXCJcIlxyXG4gICAgICAgIHRoaXMubG9nSW5PdHAgPSBcIlwiXHJcbiAgICAgICAgLy8gdGhpcy5uZXdQYXNzd29yZD0gXCJcIlxyXG4gICAgICAgIC8vIHRoaXMucmVFbnRlcmVkUGFzc3dvcmQgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5sb2dpbk90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiIFtiYXNlWkluZGV4XT1cIjEwMDAwMDAwMDAwXCIgW2F1dG9aSW5kZXhdPVwidHJ1ZVwiXHJcbiAgICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XHJcblxyXG48c2VjdGlvbiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cIm1haW4tY29udGFpbmVyIGgtODUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcgKyBiYWNrZ3JvdW5kSW1hZ2UgKyAnKSd9XCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIj5cclxuICA8ZGl2IGNsYXNzPVwibWlkZGxlLWNvbnRhaW5lciB3LTQwLTg1XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQmFja2dyb3VuZF09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgW3NpbXBvQW5pbWF0aW9uXT1cImRhdGE/LnN0eWxlcz8uYW5pbWF0aW9uXCIgW3NpbXBvQ29ybmVyXT1cImRhdGE/LnN0eWxlcz8uY29ybmVyc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRcIj57eyBjdXJyZW50UGFnZSA9PSAnTE9HSU4nIHx8IGN1cnJlbnRQYWdlID09ICdPVFAnID8gXCJTaWduIEluXCIgOiBjdXJyZW50UGFnZSA9PVxyXG4gICAgICAnRk9SR09UX1BBU1NXT1JEJyA/IFwiRm9yZ290IFBhc3N3b3JkXCIgOiBjdXJyZW50UGFnZSA9PSAnT1RQX1ZFUklGWScgPyBcIk9UUCBWZXJmaWNhdGlvblwiIDogXCJTaWduIFVwXCJ9fTwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cIihjdXJyZW50UGFnZSA9PSAnTE9HSU4nIHx8IGN1cnJlbnRQYWdlID09ICdPVFAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnKSAmJiAhc2hvd0ZvcmdvdEZpZWxkc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCI+RW1haWw8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dFwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBSZWdpc3RlcmVkIEVtYWlsXCIgWyhuZ01vZGVsKV09XCJsb2dpbkVtYWlsXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cIihjdXJyZW50UGFnZSA9PSAnT1RQJyB8fCBjdXJyZW50UGFnZSA9PSAnRk9SR09UX1BBU1NXT1JEJykgJiYgb3RwU2VudCAmJiAhc2hvd0ZvcmdvdEZpZWxkc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCI+T1RQPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXRleHQtMVwiPlxyXG4gICAgICAgICAgPGRpdiBpZD1cIm90cFwiIGNsYXNzPVwiaW5wdXRzIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgXyBvZiBbXS5jb25zdHJ1Y3Rvcig0KTsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibS0yIHRleHQtY2VudGVyIGZvcm0tY29udHJvbCByb3VuZGVkIGFkZGl0aW9uYWwtc3R5bGVzXCIgdHlwZT1cIm51bWJlclwiIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJsb2dpbk90cEFycmF5W2lkeF1cIiAoa2V5dXApPVwibW92ZUxvZ2luT3RwQ3Vyc29yKCRldmVudCwgaWR4KVwiIFtpZF09XCInbG9naW5PdHBfJytpZHhcIiAjb3RwSW5wdXQgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ09UUF9WRVJJRlknXCI+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmllbGQtaGVhZFwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ09UUCcgXCI+T1RQPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0LTFcIj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJvdHBcIiBjbGFzcz1cImlucHV0cyBkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IF8gb2YgW10uY29uc3RydWN0b3IoNCk7IGxldCBpZHggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIm0tMiB0ZXh0LWNlbnRlciBmb3JtLWNvbnRyb2wgcm91bmRlZCBhZGRpdGlvbmFsLXN0eWxlc1wiIHR5cGU9XCJudW1iZXJcIiBtYXg9XCIxXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3RwQXJyYXlbaWR4XVwiIChrZXl1cCk9XCJtb3ZlKCRldmVudCwgaWR4KVwiIFtpZF09XCInb3RwXycraWR4XCIgI290cElucHV0IC8+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdTSUdOX1VQJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCI+TmFtZTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlBsZWFzZSBFbnRlciBZb3VyIE5hbWVcIiBbKG5nTW9kZWwpXT1cImludmVzdG9yLmZ1bGxOYW1lXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdTSUdOX1VQJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCI+RW1haWw8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dFwiIFtjbGFzcy5ib3JkZXItcmVkXT1cInNob3dXYXJuaW5nIHx8IGludmFsaWRFbWFpbFwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIEVudGVyIFlvdXIgRW1haWxcIiBbKG5nTW9kZWwpXT1cImludmVzdG9yLmVtYWlsSWRcIiAobmdNb2RlbENoYW5nZSk9XCJ2ZXJpZnlQaG9uZUVtYWlsKClcIiAoYmx1cik9XCJ2YWxpZEVtYWlsKClcIiA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhcm5pbmctdGV4dCBjbHItcmVkXCIgKm5nSWY9XCJzaG93V2FybmluZ1wiPlVzZXIgQWxyZWFkeSBFeGlzdDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLXRleHQgY2xyLXJlZFwiICpuZ0lmPVwiaW52YWxpZEVtYWlsXCI+SW52YWxpZCBFbWFpbCAoRWc6IGpvaG5kb2UmIzY0O2dtYWlsLmNvbSk8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5QaG9uZSBOdW1iZXI8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dFwiIFtjbGFzcy5ib3JkZXItcmVkXT1cInNob3dXYXJuaW5nIHx8IGludmFsaWRQaG9uZVwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBQaG9uZSBOdW1iZXJcIiBbKG5nTW9kZWwpXT1cImludmVzdG9yLnBob25lTnVtYmVyXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmVyaWZ5UGhvbmVFbWFpbCgpXCIgKGJsdXIpPVwidmFsaWRQaG9uZSgpXCIgPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLXRleHQgY2xyLXJlZFwiICpuZ0lmPVwic2hvd1dhcm5pbmdcIj5Vc2VyIEFscmVhZHkgRXhpc3Q8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2FybmluZy10ZXh0IGNsci1yZWRcIiAqbmdJZj1cImludmFsaWRQaG9uZVwiPkludmFsaWQgUGhvbmUgbnVtYmVyPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnICYmIHNob3dGb3Jnb3RGaWVsZHNcIiA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5OZXcgUGFzc3dvcmQ8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dCBkLWZsZXhcIj5cclxuICAgICAgICAgIDxpbnB1dCBbdHlwZV09XCJ0ZXh0VHlwZVwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIEVudGVyIFlvdXIgUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cIm5ld1Bhc3N3b3JkXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlID0gJ3RleHQnXCIgKm5nSWY9XCJ0ZXh0VHlwZSA9PSAncGFzc3dvcmQnXCI+dmlzaWJpbGl0eTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlID0gJ3Bhc3N3b3JkJ1wiICpuZ0lmPVwidGV4dFR5cGUgPT0gJ3RleHQnXCI+dmlzaWJpbGl0eV9vZmY8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTE1XCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnRk9SR09UX1BBU1NXT1JEJyAmJiBzaG93Rm9yZ290RmllbGRzXCIgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCI+UmUtRW50ZXIgUGFzc3dvcmQ8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dCBkLWZsZXhcIj5cclxuICAgICAgICAgIDxpbnB1dCBbdHlwZV09XCJ0ZXh0VHlwZTFcIiBwbGFjZWhvbGRlcj1cIlBsZWFzZSBSZS1FbnRlciBZb3VyIFBhc3N3b3JkXCIgWyhuZ01vZGVsKV09XCJyZUVudGVyZWRQYXNzd29yZFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJ0ZXh0VHlwZTEgPSAndGV4dCdcIiAqbmdJZj1cInRleHRUeXBlMSA9PSAncGFzc3dvcmQnXCI+dmlzaWJpbGl0eTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlMSA9ICdwYXNzd29yZCdcIiAqbmdJZj1cInRleHRUeXBlMSA9PSAndGV4dCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnIFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCI+UGFzc3dvcmQ8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dCBkLWZsZXhcIj5cclxuICAgICAgICAgIDxpbnB1dCBbdHlwZV09XCJ0ZXh0VHlwZVwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIEVudGVyIFlvdXIgUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cImludmVzdG9yLnBhc3N3b3JkXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlID0gJ3RleHQnXCIgKm5nSWY9XCJ0ZXh0VHlwZSA9PSAncGFzc3dvcmQnXCI+dmlzaWJpbGl0eTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlID0gJ3Bhc3N3b3JkJ1wiICpuZ0lmPVwidGV4dFR5cGUgPT0gJ3RleHQnXCI+dmlzaWJpbGl0eV9vZmY8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcmdvdC1wYXNzd29yZCBjdXJzb3ItcG9pbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdMT0dJTidcIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnRk9SR09UX1BBU1NXT1JEJ1wiPkZvcmdvdCBQYXNzd29yZD88L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcmdvdC1wYXNzd29yZCBjdXJzb3ItcG9pbnRlclwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdPVFBfVkVSSUZZJyB8fCBvdHBTZW50XCIgKGNsaWNrKT1cImlzU2lnblVwID8gc2VuZE90cCgpIDogc2VuZE90cEZvckxvZ2luKCk7cmVzZW5kID0gdHJ1ZVwiPlJlc2VuZCBPVFA/PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJsb2dpbi1idG4gY3Vyc29yLXBvaW50ZXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJjdXJyZW50UGFnZSAhPSAnT1RQJyAmJiAoY3VycmVudFBhZ2UgIT09ICdGT1JHT1RfUEFTU1dPUkQnIHx8IHNob3dGb3Jnb3RGaWVsZHMpXCJcclxuICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZEV2ZW50KClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGVyXCIgW2NsYXNzLmJ0bi1zaXplXT1cImN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnIHx8IGN1cnJlbnRQYWdlID09ICdTSUdOX1VQJyB8fCBjdXJyZW50UGFnZSA9PSAnT1RQX1ZFUklGWSdcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYnV0dG9uTG9hZGVyXCIgPjxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZS1ub3RjaCBmYS1zcGluXCI+PC9pPiZuYnNwO0xvYWRpbmc8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFidXR0b25Mb2FkZXJcIj57eyBjdXJyZW50UGFnZSA9PVxyXG4gICAgICAgICAgICAnTE9HSU4nID8gXCJMb2dpblwiIDogY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcgID8gXCJSZXNldCBQYXNzd29yZFwiIDpcclxuICAgICAgICAgICAgY3VycmVudFBhZ2UgPT0gJ09UUF9WRVJJRlknID8gJ1ZlcmlmeSBPVFAnIDogXCJDcmVhdGUgQWNjb3VudFwifX08L3NwYW4+PC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJsb2dpbi1idG4gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic2VuZE90cEZvckxvZ2luKClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGVyXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiKGN1cnJlbnRQYWdlID09ICdPVFAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnKSAmJiAhb3RwU2VudCAmJiAhc2hvd0ZvcmdvdEZpZWxkc1wiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJidXR0b25Mb2FkZXJcIiA+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIj48L2k+Jm5ic3A7TG9hZGluZzwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWJ1dHRvbkxvYWRlclwiPlNlbmQgT3RwPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJsb2dpbi1idG4gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidmVyaWZ5T3RwKClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGVyXCIgW3N0eWxlLmJhY2tncm91bmRdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiKGN1cnJlbnRQYWdlID09ICdPVFAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnKSAmJiBvdHBTZW50ICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImJ1dHRvbkxvYWRlclwiID48aSBjbGFzcz1cImZhcyBmYS1jaXJjbGUtbm90Y2ggZmEtc3BpblwiPjwvaT4mbmJzcDtMb2FkaW5nPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYnV0dG9uTG9hZGVyXCIgPnt7Y3VycmVudFBhZ2UgPT0gJ09UUCcgPyBcIkxvZ2luXCIgOiBcIlByb2NlZWQgdG8gQ2hhbmdlIFBhc3N3b3JkXCJ9fTwvc3Bhbj5cclxuICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYW5vdGhlci1wYWdlXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnTE9HSU4nIHx8IGN1cnJlbnRQYWdlID09ICdPVFAnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpZ251cC10ZXh0XCI+RG9u4oCZdCBoYXZlIGFuIGFjY291bnQ/IDxzcGFuIGNsYXNzPVwic3Bhbi10ZXh0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnU0lHTl9VUCc7bG9naW5FbWFpbCA9ICcnO2ludmVzdG9yLnBhc3N3b3JkID0gJyc7aW52ZXN0b3IucGhvbmVOdW1iZXIgPSAnJztvdHBTZW50ID0gZmFsc2U7aW52ZXN0b3IuZW1haWxJZCA9ICcnXCI+U2lnblxyXG4gICAgICAgICAgICBVcDwvc3Bhbj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbnVwLXRleHQgbS01XCI+b3I8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbnVwLXRleHRcIj5Mb2dpbiB3aXRoIDxzcGFuIGNsYXNzPVwic3Bhbi10ZXh0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdMT0dJTicgXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImN1cnJlbnRQYWdlID0gJ09UUCdcIj5PVFA8L3NwYW4+PHNwYW4gY2xhc3M9XCJzcGFuLXRleHQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ09UUCdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnTE9HSU4nO2xvZ2luRW1haWwgPSAnJztvdHBTZW50ID0gZmFsc2VcIj5QYXNzd29yZDwvc3Bhbj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhbm90aGVyLXBhZ2VcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdTSUdOX1VQJyB8fCBjdXJyZW50UGFnZSA9PSAnRk9SR09UX1BBU1NXT1JEJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWdudXAtdGV4dFwiPkFscmVhZHkgaGF2ZSBhbiBhY2NvdW50PyA8c3BhbiBjbGFzcz1cInNwYW4tdGV4dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKGNsaWNrKT1cImN1cnJlbnRQYWdlID0gJ0xPR0lOJztsb2dpbkVtYWlsID0gJyc7aW52ZXN0b3IucGFzc3dvcmQgPSAnJztpbnZlc3Rvci5waG9uZU51bWJlciA9ICcnO290cFNlbnQgPSBmYWxzZTtzaG93Rm9yZ290RmllbGRzID0gZmFsc2VcIj5TaWduXHJcbiAgICAgICAgICAgIEluPC9zcGFuPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbnVwLXNpZ25pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3NpZ251cC1zaWduaW4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3NpZ251cC1zaWduaW4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBMkIsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxXQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixD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b25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTaWduSW5TaWduVXBTdHlsZXNNb2RlbCwgU2lnblVwU2lnbkluTW9kZWwgfSBmcm9tICcuL3NpZ251cC1zaWduaW4ubW9kZWwnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGVsZXRlSG92ZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGVsZXRlLWhvdmVyLWVsZW1lbnQvZGVsZXRlLWhvdmVyLWVsZW1lbnQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEt5Y0RldGFpbHNDb21wb25lbnQgfSBmcm9tICcuLi9reWMtZGV0YWlscy9reWMtZGV0YWlscy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdG9yYWdlS2V5cyB9IGZyb20gJy4uLy4uL3N0eWxlcy9pbmRleCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1zaWdudXAtc2lnbmluJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcclxuICAgIERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgLy9EaXJlY3RpdmVzXHJcblxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFRvYXN0TW9kdWxlXHJcblxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWdudXAtc2lnbmluLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2lnbnVwLXNpZ25pbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lnbnVwU2lnbmluQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBTaWduVXBTaWduSW5Nb2RlbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIHByb3BlcnR5SWQ/OiBudW1iZXI7XHJcbiAgYnV0dG9uTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGV4dFR5cGU6IHN0cmluZyA9IFwicGFzc3dvcmRcIlxyXG4gIHRleHRUeXBlMSA6IHN0cmluZyA9IFwicGFzc3dvcmRcIlxyXG4gIGt5Y0RldGFpbHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFyYW1bJ3R5cGUnXSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3R5cGUnXTtcclxuICAgICAgaWYgKHBhcmFtWydpZCddKVxyXG4gICAgICAgIHRoaXMucHJvcGVydHlJZCA9IHBhcmFtWydpZCddO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5reWNEZXRhaWxzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgY3VycmVudFBhZ2U6ICdMT0dJTicgfCAnU0lHTl9VUCcgfCAnT1RQJyB8ICdGT1JHT1RfUEFTU1dPUkQnIHwgJ09UUF9WRVJJRlknID0gJ0xPR0lOJztcclxuICBreWNEZXRhaWxzU3Vic2NyaXBpdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBiYWNrZ3JvdW5kSW1hZ2U6IGFueSA9IFwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81MDA0MTVjMTczOTQzNDE4NjMxMGltYWdlJTIwMTYucG5nXCJcclxuXHJcbiAgZWRpdFNlY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIG90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgbW92ZShldmVudDogYW55LCBpZHg6IG51bWJlcikge1xyXG5cclxuICAgIGlmIChpc05hTihOdW1iZXIoZXZlbnQua2V5KSkgJiYgZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGV2ZW50LmNvZGUgIT0gXCJCYWNrc3BhY2VcIikge1xyXG4gICAgICB0aGlzLm90cEFycmF5W2lkeF0gPSBldmVudC5rZXk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwQXJyYXlbaWR4XSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm90cF9cIiArIChpZHggLSAxKSk/LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2dpbk90cEFycmF5ID0gbmV3IEFycmF5KDQpLmZpbGwoJycpXHJcbiAgbW92ZUxvZ2luT3RwQ3Vyc29yKGV2ZW50OiBhbnksIGlkeDogbnVtYmVyKSB7XHJcblxyXG4gICAgaWYgKGlzTmFOKE51bWJlcihldmVudC5rZXkpKSAmJiBldmVudC5jb2RlICE9IFwiQmFja3NwYWNlXCIpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSAhPSBcIkJhY2tzcGFjZVwiKSB7XHJcbiAgICAgIHRoaXMubG9naW5PdHBBcnJheVtpZHhdID0gZXZlbnQua2V5O1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luT3RwX1wiICsgKGlkeCArIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09IFwiQmFja3NwYWNlXCIgJiYgIXRoaXMub3RwQXJyYXlbaWR4XSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luT3RwX1wiICsgKGlkeCAtIDEpKT8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ2luRW1haWw6IHN0cmluZyA9ICcnXHJcbiAgaW52ZXN0b3I6IGFueSA9IHtcclxuICAgIFwiZnVsbE5hbWVcIjogXCJcIixcclxuICAgIFwiZW1haWxJZFwiOiBcIlwiLFxyXG4gICAgXCJwaG9uZU51bWJlclwiOiBcIlwiLFxyXG4gICAgXCJwYXNzd29yZFwiOiBcIlwiLFxyXG4gICAgXCJreWNWZXJpZmllZFwiOiBmYWxzZSxcclxuICAgIFwiYWN0aXZlXCI6IHRydWUsXHJcbiAgICBcIm90cFwiOiBcIlwiLFxyXG4gICAgXCJkZWxldGVkXCI6IGZhbHNlXHJcbiAgfVxyXG4gIG90cFNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYnV0dG9uQ2xpY2tlZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdTSUdOX1VQJykge1xyXG4gICAgICB0aGlzLmlzU2lnblVwID0gdHJ1ZVxyXG4gICAgICB0aGlzLnNlbmRPdHAoKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdPVFBfVkVSSUZZJykge1xyXG4gICAgICB0aGlzLnNpZ25VcCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICdMT0dJTicpIHtcclxuICAgICAgdGhpcy5sb2dpbldpdGhQYXNzd29yZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgICAgdGhpcy5mb3Jnb3RQYXNzd29yZCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93V2FybmluZyA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGludmFsaWRFbWFpbCA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGludmFsaWRQaG9uZSA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHZlcmlmeVBob25lRW1haWwoKSB7XHJcbiAgICAvLyB0aGlzLnNob3dXYXJuaW5nID0gZmFsc2VcclxuICAgIGlmICh0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmludmVzdG9yLmVtYWlsSWQpICYmIHRoaXMuaXNWYWxpZFBob25lKHRoaXMuaW52ZXN0b3IucGhvbmVOdW1iZXIpKSB7XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5RW1haWxQaG9uZSh0aGlzLmludmVzdG9yLnBob25lTnVtYmVyLCB0aGlzLmludmVzdG9yLmVtYWlsSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyB0aGlzLnNob3dXYXJuaW5nID0gZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAvLyB0aGlzLnNob3dXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICAgICAgZGV0YWlsOiBgJHtlcnIubWVzc2FnZX1gXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIHZhbGlkRW1haWwoKXtcclxuICAgIGlmKCF0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmludmVzdG9yLmVtYWlsSWQpKVxyXG4gICAgICB0aGlzLmludmFsaWRFbWFpbCA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5pbnZhbGlkRW1haWwgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgdmFsaWRQaG9uZSgpe1xyXG4gICAgaWYoIXRoaXMuaXNWYWxpZFBob25lKHRoaXMuaW52ZXN0b3IucGhvbmVOdW1iZXIpKVxyXG4gICAgICB0aGlzLmludmFsaWRQaG9uZSA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5pbnZhbGlkUGhvbmUgPSBmYWxzZVxyXG4gIH1cclxuXHJcblxyXG4gIHNpZ25VcCgpIHtcclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuaW52ZXN0b3Iub3RwID0gXCJcIlxyXG4gICAgdGhpcy5vdHBBcnJheS5mb3JFYWNoKChvdHApID0+IHtcclxuICAgICAgdGhpcy5pbnZlc3Rvci5vdHAgKz0gb3RwO1xyXG4gICAgfSlcclxuICAgIHRoaXMucmVzdFNlcnZpY2Uuc2lnblVwKHRoaXMuaW52ZXN0b3IpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnU2lnbiBVcCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdTaWduIHVwIFN1Y2Nlc3NmdWxseSdcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmludmVzdG9yLnBhc3N3b3JkID0gXCJcIlxyXG4gICAgICAgIHRoaXMub3RwQXJyYXkgPSBuZXcgQXJyYXkoNCkuZmlsbCgnJylcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gJ0xPR0lOJztcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ1NpZ24gVXAgRmFpbGVkJyxcclxuICAgICAgICAgIGRldGFpbDogJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluLidcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgc2VuZE90cCgpIHtcclxuICAgIGlmICghdGhpcy5pc1ZhbGlkRW1haWwodGhpcy5pbnZlc3Rvci5lbWFpbElkKSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgc3VtbWFyeTogXCJTaWduIFVwXCIsXHJcbiAgICAgICAgZGV0YWlsOiAnUGxlYXNlIEVudGVyIFZhbGlkIEVtYWlsIEFkZHJlc3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZighdGhpcy5pc1ZhbGlkUGhvbmUodGhpcy5pbnZlc3Rvci5waG9uZU51bWJlcikpe1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXHJcbiAgICAgICAgc3VtbWFyeTogXCJTaWduIFVwXCIsXHJcbiAgICAgICAgZGV0YWlsOiAnUGxlYXNlIEVudGVyIFZhbGlkIFBob25lIE51bWJlcidcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzdFNlcnZpY2Uuc2VuZE90cCh0aGlzLmludmVzdG9yLmVtYWlsSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnT1RQJyxcclxuICAgICAgICAgIGRldGFpbDogYE9UUCBTZW50IHRvIHRoaXMgJHt0aGlzLmludmVzdG9yLmVtYWlsSWR9YFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAnT1RQX1ZFUklGWSc7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgRmFpbGVkJyxcclxuICAgICAgICAgIGRldGFpbDogZXJyLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2VuZCBPVFAuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2dpbldpdGhQYXNzd29yZCgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMubG9naW5FbWFpbCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgdmFsaWQgZW1haWwnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW52ZXN0b3IucGFzc3dvcmQubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIFVwJyxcclxuICAgICAgICBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgcGFzc3dvcmQnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UubG9naW4oeyBlbWFpbDogdGhpcy5sb2dpbkVtYWlsLCBwYXNzd29yZDogdGhpcy5pbnZlc3Rvci5wYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0xvZyBJbicsXHJcbiAgICAgICAgICBkZXRhaWw6ICdMb2dnZWQgaW4gc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLklOVkVTVE9SX0lELCByZXMuaW52ZXN0b3JJZCk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlJZCkge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkZXRhaWxzJ10sIHsgcXVlcnlQYXJhbXM6IHsgaWQ6IHRoaXMucHJvcGVydHlJZCB9IH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEt5Y0RldGFpbHMoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Byb3BlcnR5LWxpc3QnXSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdMb2dpbiBGYWlsZWQnLFxyXG4gICAgICAgICAgZGV0YWlsOiBlcnIuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ludmFsaWQgZW1haWwgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzU2lnblVwOiBib29sZWFuID0gZmFsc2VcclxuICByZXNlbmQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHNlbmRPdHBGb3JMb2dpbigpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEVtYWlsKHRoaXMubG9naW5FbWFpbCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdJbnZhaWxkIEVtYWlsIEFkZHJlc3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5yZXNlbmQgPT0gZmFsc2UgJiYgdGhpcy5jdXJyZW50UGFnZSA9PSAnTE9HSU4nKSB7XHJcbiAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwKHRoaXMubG9naW5FbWFpbCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ09UUCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgU2VudCBTdWNjZXNzZnVsbHknXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ0ZhaWxlZCB0byBzZW5kIE9UUC4gUGxlYXNlIHRyeSBhZ2Fpbi4nXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd0ZvcmdvdEZpZWxkczogYm9vbGVhbiA9IGZhbHNlXHJcbiAgbG9nSW5PdHA6IHN0cmluZyA9IFwiXCJcclxuICB2ZXJpZnlPdHAoKSB7XHJcbiAgICBcclxuICAgIGlmKCF0aGlzLmlzVmFsaWRFbWFpbCh0aGlzLmxvZ2luRW1haWwpKXtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgIHN1bW1hcnk6ICdTaWduIEluJyxcclxuICAgICAgICBkZXRhaWw6ICdJbnZhaWxkIEVtYWlsIEFkZHJlc3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5sb2dJbk90cCA9ICcnO1xyXG4gICAgdGhpcy5sb2dpbk90cEFycmF5LmZvckVhY2goKG90cCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ0luT3RwICs9IG90cDtcclxuICAgIH0pO1xyXG4gICAgLy8gaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgIC8vICAgdGhpcy5zaG93Rm9yZ290RmllbGRzID0gdHJ1ZVxyXG4gICAgLy8gICB0aGlzLm90cFNlbnQgPSBmYWxzZVxyXG4gICAgLy8gICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlXHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5T3RwKHRoaXMubG9naW5FbWFpbCwgdGhpcy5sb2dJbk90cCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0ZvcmdvdEZpZWxkcyA9IHRydWVcclxuICAgICAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXHJcbiAgICAgICAgICBzdW1tYXJ5OiAnTG9nIEluJyxcclxuICAgICAgICAgIGRldGFpbDogJ0xvZ2dlZCBpbiBzdWNjZXNzZnVsbHknXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vdHBBcnJheSA9IG5ldyBBcnJheSg0KS5maWxsKCcnKVxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFN0b3JhZ2VLZXlzLklOVkVTVE9SX0lELCByZXMuaW52ZXN0b3JJZCk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlJZCkge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkZXRhaWxzJ10sIHsgcXVlcnlQYXJhbXM6IHsgaWQ6IHRoaXMucHJvcGVydHlJZCB9IH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEt5Y0RldGFpbHMoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Byb3BlcnR5LWxpc3QnXSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ0ludmFsaWQgT1RQLiBQbGVhc2UgdHJ5IGFnYWluLidcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRFbWFpbChlbWFpbDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xyXG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdChlbWFpbC50cmltKCkpO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFBob25lKHBobm8gOiBzdHJpbmcpIDogYm9vbGVhbntcclxuICAgIGNvbnN0IHBob25lUmVnZXggPSAvXls2Nzg5XVxcZHs5fSQvXHJcbiAgICBjb25zb2xlLmxvZyhwaG9uZVJlZ2V4LnRlc3QocGhuby50cmltKCkpKVxyXG4gICAgcmV0dXJuIHBob25lUmVnZXgudGVzdChwaG5vLnRyaW0oKSlcclxuICB9XHJcblxyXG4gIGdldEt5Y0RldGFpbHMoKSB7XHJcbiAgICB0aGlzLmt5Y0RldGFpbHNTdWJzY3JpcGl0aW9uID0gdGhpcy5yZXN0U2VydmljZS5nZXRLeWNEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIShyZXM/Lm1lc3NhZ2U/LnBhblZlcmlmaWVkID09PSAnVkFMSUQnICYmIHJlcz8ubWVzc2FnZT8uYWFkaGFhclZlcmlmaWVkID09PSAnVkFMSUQnKSkge1xyXG4gICAgICAgIHRoaXMubWF0RGlhbG9nLm9wZW4oS3ljRGV0YWlsc0NvbXBvbmVudCwgeyBwYW5lbENsYXNzOiBcImxvZ2luLXNpZ251cFwiIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG4gIHJlRW50ZXJlZFBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiXHJcbiAgbmV3UGFzc3dvcmQ6IHN0cmluZyA9IFwiXCJcclxuICBmT3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIGNoZWNrUGFzc3dvcmRNYXRjaChwYXNzd29yZDogc3RyaW5nLCByZUVudGVyZWRQYXNzd29yZDogc3RyaW5nKSB7XHJcbiAgICBpZiAocGFzc3dvcmQgIT0gcmVFbnRlcmVkUGFzc3dvcmQpXHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGZvcmdvdFBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy5idXR0b25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIFwiZW1haWxcIjogdGhpcy5sb2dpbkVtYWlsLFxyXG4gICAgICBcIm5ld1Bhc3N3b3JkXCI6IHRoaXMubmV3UGFzc3dvcmQsXHJcbiAgICAgIFwiY29uZmlybVBhc3N3b3JkXCI6IHRoaXMucmVFbnRlcmVkUGFzc3dvcmRcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmZvcmdvdFBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0ZvcmdvdCBQYXNzd29yZCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdTdWNjZXNzZnVsbHkgQ2hhbmdlZCB0aGUgcGFzc3dvcmQnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gJ0xPR0lOJ1xyXG4gICAgICAgIHRoaXMuc2hvd0ZvcmdvdEZpZWxkcyA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmxvZ2luRW1haWwgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5sb2dJbk90cCA9IFwiXCJcclxuICAgICAgICB0aGlzLm5ld1Bhc3N3b3JkPSBcIlwiXHJcbiAgICAgICAgdGhpcy5yZUVudGVyZWRQYXNzd29yZCA9IFwiXCJcclxuICAgICAgICB0aGlzLmxvZ2luT3RwQXJyYXkgPSBuZXcgQXJyYXkoNCkuZmlsbCgnJylcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcclxuICAgICAgICAgIGRldGFpbDogJ1BsZWFzZSB0cnkgYWdhaW4uJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcclxuICAgICAgICB0aGlzLmxvZ2luRW1haWwgPSBcIlwiXHJcbiAgICAgICAgdGhpcy5sb2dJbk90cCA9IFwiXCJcclxuICAgICAgICAvLyB0aGlzLm5ld1Bhc3N3b3JkPSBcIlwiXHJcbiAgICAgICAgLy8gdGhpcy5yZUVudGVyZWRQYXNzd29yZCA9IFwiXCJcclxuICAgICAgICB0aGlzLmxvZ2luT3RwQXJyYXkgPSBuZXcgQXJyYXkoNCkuZmlsbCgnJylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG59XHJcbiIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCJcclxuICAgIFtzaG93VHJhbnNmb3JtT3B0aW9uc109XCJpc01vYmlsZSA/ICd0cmFuc2xhdGVZKC0xMDAlKScgOiAnJ1wiPjwvcC10b2FzdD5cclxuXHJcbjxzZWN0aW9uIFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwibWFpbi1jb250YWluZXIgaC04NSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGJhY2tncm91bmRJbWFnZSArICcpJ31cIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtaWRkbGUtY29udGFpbmVyIHctNDAtODVcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICBbc2ltcG9BbmltYXRpb25dPVwiZGF0YT8uc3R5bGVzPy5hbmltYXRpb25cIiBbc2ltcG9Db3JuZXJdPVwiZGF0YT8uc3R5bGVzPy5jb3JuZXJzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiPnt7IGN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCcgPyBcIlNpZ24gSW5cIiA6IGN1cnJlbnRQYWdlID09XHJcbiAgICAgICdGT1JHT1RfUEFTU1dPUkQnID8gXCJGb3Jnb3QgUGFzc3dvcmRcIiA6IGN1cnJlbnRQYWdlID09ICdPVFBfVkVSSUZZJyA/IFwiT1RQIFZlcmZpY2F0aW9uXCIgOiBcIlNpZ24gVXBcIn19PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiKGN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5FbWFpbDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlBsZWFzZSBFbnRlciBZb3VyIFJlZ2lzdGVyZWQgRW1haWxcIiBbKG5nTW9kZWwpXT1cImxvZ2luRW1haWxcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiKGN1cnJlbnRQYWdlID09ICdPVFAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnKSAmJiBvdHBTZW50ICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5PVFA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtdGV4dC0xXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwib3RwXCIgY2xhc3M9XCJpbnB1dHMgZC1mbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBfIG9mIFtdLmNvbnN0cnVjdG9yKDQpOyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJtLTIgdGV4dC1jZW50ZXIgZm9ybS1jb250cm9sIHJvdW5kZWQgYWRkaXRpb25hbC1zdHlsZXNcIiB0eXBlPVwibnVtYmVyXCIgbWF4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvZ2luT3RwQXJyYXlbaWR4XVwiIChrZXl1cCk9XCJtb3ZlTG9naW5PdHBDdXJzb3IoJGV2ZW50LCBpZHgpXCIgW2lkXT1cIidsb2dpbk90cF8nK2lkeFwiICNvdHBJbnB1dCAvPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTE1XCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQX1ZFUklGWSdcIj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmaWVsZC1oZWFkXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQJyBcIj5PVFA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXRleHQtMVwiPlxyXG4gICAgICAgICAgPGRpdiBpZD1cIm90cFwiIGNsYXNzPVwiaW5wdXRzIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgXyBvZiBbXS5jb25zdHJ1Y3Rvcig0KTsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibS0yIHRleHQtY2VudGVyIGZvcm0tY29udHJvbCByb3VuZGVkIGFkZGl0aW9uYWwtc3R5bGVzXCIgdHlwZT1cIm51bWJlclwiIG1heD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvdHBBcnJheVtpZHhdXCIgKGtleXVwKT1cIm1vdmUoJGV2ZW50LCBpZHgpXCIgW2lkXT1cIidvdHBfJytpZHhcIiAjb3RwSW5wdXQgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5OYW1lPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXRleHRcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIEVudGVyIFlvdXIgTmFtZVwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IuZnVsbE5hbWVcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5FbWFpbDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCIgW2NsYXNzLmJvcmRlci1yZWRdPVwic2hvd1dhcm5pbmcgfHwgaW52YWxpZEVtYWlsXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBFbWFpbFwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IuZW1haWxJZFwiIChuZ01vZGVsQ2hhbmdlKT1cInZlcmlmeVBob25lRW1haWwoKVwiIChibHVyKT1cInZhbGlkRW1haWwoKVwiID5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLXRleHQgY2xyLXJlZFwiICpuZ0lmPVwic2hvd1dhcm5pbmdcIj5Vc2VyIEFscmVhZHkgRXhpc3Q8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhcm5pbmctdGV4dCBjbHItcmVkXCIgKm5nSWY9XCJpbnZhbGlkRW1haWxcIj5JbnZhbGlkIEVtYWlsIChFZzogam9obmRvZSYjNjQ7Z21haWwuY29tKTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTE1XCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnU0lHTl9VUCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtaGVhZFwiPlBob25lIE51bWJlcjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0XCIgW2NsYXNzLmJvcmRlci1yZWRdPVwic2hvd1dhcm5pbmcgfHwgaW52YWxpZFBob25lXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlBsZWFzZSBFbnRlciBZb3VyIFBob25lIE51bWJlclwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IucGhvbmVOdW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJ2ZXJpZnlQaG9uZUVtYWlsKClcIiAoYmx1cik9XCJ2YWxpZFBob25lKClcIiA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwid2FybmluZy10ZXh0IGNsci1yZWRcIiAqbmdJZj1cInNob3dXYXJuaW5nXCI+VXNlciBBbHJlYWR5IEV4aXN0PC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YXJuaW5nLXRleHQgY2xyLXJlZFwiICpuZ0lmPVwiaW52YWxpZFBob25lXCI+SW52YWxpZCBQaG9uZSBudW1iZXI8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcgJiYgc2hvd0ZvcmdvdEZpZWxkc1wiID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtaGVhZFwiPk5ldyBQYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBQYXNzd29yZFwiIFsobmdNb2RlbCldPVwibmV3UGFzc3dvcmRcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUgPSAndGV4dCdcIiAqbmdJZj1cInRleHRUeXBlID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlID0gJ3Bhc3N3b3JkJ1wiICpuZ0lmPVwidGV4dFR5cGUgPT0gJ3RleHQnXCI+dmlzaWJpbGl0eTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMTVcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnICYmIHNob3dGb3Jnb3RGaWVsZHNcIiA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5SZS1FbnRlciBQYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlMVwiIHBsYWNlaG9sZGVyPVwiUGxlYXNlIFJlLUVudGVyIFlvdXIgUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInJlRW50ZXJlZFBhc3N3b3JkXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlMSA9ICd0ZXh0J1wiICpuZ0lmPVwidGV4dFR5cGUxID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlMSA9ICdwYXNzd29yZCdcIiAqbmdJZj1cInRleHRUeXBlMSA9PSAndGV4dCdcIj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0xNVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJyB8fCBjdXJyZW50UGFnZSA9PSAnU0lHTl9VUCcgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWhlYWRcIj5QYXNzd29yZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC10ZXh0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGlucHV0IFt0eXBlXT1cInRleHRUeXBlXCIgcGxhY2Vob2xkZXI9XCJQbGVhc2UgRW50ZXIgWW91ciBQYXNzd29yZFwiIFsobmdNb2RlbCldPVwiaW52ZXN0b3IucGFzc3dvcmRcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwidGV4dFR5cGUgPSAndGV4dCdcIiAqbmdJZj1cInRleHRUeXBlID09ICdwYXNzd29yZCdcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInRleHRUeXBlID0gJ3Bhc3N3b3JkJ1wiICpuZ0lmPVwidGV4dFR5cGUgPT0gJ3RleHQnXCI+dmlzaWJpbGl0eTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9yZ290LXBhc3N3b3JkIGN1cnNvci1wb2ludGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJ1wiIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdGT1JHT1RfUEFTU1dPUkQnXCI+Rm9yZ290IFBhc3N3b3JkPzwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9yZ290LXBhc3N3b3JkIGN1cnNvci1wb2ludGVyXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ09UUF9WRVJJRlknIHx8IG90cFNlbnRcIiAoY2xpY2spPVwiaXNTaWduVXAgPyBzZW5kT3RwKCkgOiBzZW5kT3RwRm9yTG9naW4oKTtyZXNlbmQgPSB0cnVlXCI+UmVzZW5kIE9UUD88L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cImN1cnJlbnRQYWdlICE9ICdPVFAnICYmIChjdXJyZW50UGFnZSAhPT0gJ0ZPUkdPVF9QQVNTV09SRCcgfHwgc2hvd0ZvcmdvdEZpZWxkcylcIlxyXG4gICAgICAgIChjbGljayk9XCJidXR0b25DbGlja2VkRXZlbnQoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbY2xhc3MuYnRuLXNpemVdPVwiY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcgfHwgY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnIHx8IGN1cnJlbnRQYWdlID09ICdPVFBfVkVSSUZZJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJidXR0b25Mb2FkZXJcIiA+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIj48L2k+Jm5ic3A7TG9hZGluZzwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWJ1dHRvbkxvYWRlclwiPnt7IGN1cnJlbnRQYWdlID09XHJcbiAgICAgICAgICAgICdMT0dJTicgPyBcIkxvZ2luXCIgOiBjdXJyZW50UGFnZSA9PSAnRk9SR09UX1BBU1NXT1JEJyAgPyBcIlJlc2V0IFBhc3N3b3JkXCIgOlxyXG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9PSAnT1RQX1ZFUklGWScgPyAnVmVyaWZ5IE9UUCcgOiBcIkNyZWF0ZSBBY2NvdW50XCJ9fTwvc3Bhbj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzZW5kT3RwRm9yTG9naW4oKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIoY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmICFvdHBTZW50ICYmICFzaG93Rm9yZ290RmllbGRzXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImJ1dHRvbkxvYWRlclwiID48aSBjbGFzcz1cImZhcyBmYS1jaXJjbGUtbm90Y2ggZmEtc3BpblwiPjwvaT4mbmJzcDtMb2FkaW5nPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYnV0dG9uTG9hZGVyXCI+U2VuZCBPdHA8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ2ZXJpZnlPdHAoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCIoY3VycmVudFBhZ2UgPT0gJ09UUCcgfHwgY3VycmVudFBhZ2UgPT0gJ0ZPUkdPVF9QQVNTV09SRCcpICYmIG90cFNlbnQgJiYgIXNob3dGb3Jnb3RGaWVsZHNcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYnV0dG9uTG9hZGVyXCIgPjxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZS1ub3RjaCBmYS1zcGluXCI+PC9pPiZuYnNwO0xvYWRpbmc8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFidXR0b25Mb2FkZXJcIiA+e3tjdXJyZW50UGFnZSA9PSAnT1RQJyA/IFwiTG9naW5cIiA6IFwiUHJvY2VlZCB0byBDaGFuZ2UgUGFzc3dvcmRcIn19PC9zcGFuPlxyXG4gICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhbm90aGVyLXBhZ2VcIiAqbmdJZj1cImN1cnJlbnRQYWdlID09ICdMT0dJTicgfHwgY3VycmVudFBhZ2UgPT0gJ09UUCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbnVwLXRleHRcIj5Eb27igJl0IGhhdmUgYW4gYWNjb3VudD8gPHNwYW4gY2xhc3M9XCJzcGFuLXRleHQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdTSUdOX1VQJztsb2dpbkVtYWlsID0gJyc7aW52ZXN0b3IucGFzc3dvcmQgPSAnJztpbnZlc3Rvci5waG9uZU51bWJlciA9ICcnO290cFNlbnQgPSBmYWxzZTtpbnZlc3Rvci5lbWFpbElkID0gJydcIj5TaWduXHJcbiAgICAgICAgICAgIFVwPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWdudXAtdGV4dCBtLTVcIj5vcjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWdudXAtdGV4dFwiPkxvZ2luIHdpdGggPHNwYW4gY2xhc3M9XCJzcGFuLXRleHQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ0xPR0lOJyBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnT1RQJ1wiPk9UUDwvc3Bhbj48c3BhbiBjbGFzcz1cInNwYW4tdGV4dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJjdXJyZW50UGFnZSA9PSAnT1RQJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjdXJyZW50UGFnZSA9ICdMT0dJTic7bG9naW5FbWFpbCA9ICcnO290cFNlbnQgPSBmYWxzZVwiPlBhc3N3b3JkPC9zcGFuPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFub3RoZXItcGFnZVwiICpuZ0lmPVwiY3VycmVudFBhZ2UgPT0gJ1NJR05fVVAnIHx8IGN1cnJlbnRQYWdlID09ICdGT1JHT1RfUEFTU1dPUkQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpZ251cC10ZXh0XCI+QWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/IDxzcGFuIGNsYXNzPVwic3Bhbi10ZXh0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAoY2xpY2spPVwiY3VycmVudFBhZ2UgPSAnTE9HSU4nO2xvZ2luRW1haWwgPSAnJztpbnZlc3Rvci5wYXNzd29yZCA9ICcnO2ludmVzdG9yLnBob25lTnVtYmVyID0gJyc7b3RwU2VudCA9IGZhbHNlO3Nob3dGb3Jnb3RGaWVsZHMgPSBmYWxzZVwiPlNpZ25cclxuICAgICAgICAgICAgSW48L3NwYW4+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19