simpo-component-library 3.6.196 → 3.6.197

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 (30) hide show
  1. package/esm2022/lib/ecommerce/sections/address/address.component.mjs +61 -48
  2. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +3 -3
  3. package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +1 -2
  4. package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +13 -5
  5. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +13 -4
  6. package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +3 -3
  7. package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +3 -3
  8. package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +11 -5
  9. package/esm2022/lib/ecommerce/sections/scheme-selection/scheme-selection.component.mjs +1 -2
  10. package/esm2022/lib/ecommerce/sections/store-list/store-list.component.mjs +3 -3
  11. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +8 -7
  12. package/esm2022/lib/elements/schedule-video-call/schedule-video-call.component.mjs +7 -4
  13. package/esm2022/lib/pipes/gender.pipe.mjs +5 -1
  14. package/esm2022/lib/sections/header-section/header-section.component.mjs +9 -3
  15. package/esm2022/lib/services/rest.service.mjs +2 -2
  16. package/fesm2022/simpo-component-library.mjs +127 -79
  17. package/fesm2022/simpo-component-library.mjs.map +1 -1
  18. package/lib/ecommerce/sections/address/address.component.d.ts +5 -0
  19. package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +1 -1
  20. package/lib/ecommerce/sections/cart/cart.component.d.ts +2 -0
  21. package/lib/ecommerce/sections/enrollment-form/enrollment-form.component.d.ts +1 -0
  22. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +1 -1
  23. package/lib/ecommerce/sections/scheme-details/scheme-details.component.d.ts +2 -0
  24. package/lib/elements/pricing-s1/pricing-s1.component.d.ts +1 -1
  25. package/lib/elements/schedule-video-call/schedule-video-call.component.d.ts +1 -1
  26. package/lib/sections/header-section/header-section.component.d.ts +1 -0
  27. package/lib/sections/pricing-section/pricing-section.component.d.ts +1 -1
  28. package/package.json +1 -1
  29. package/simpo-component-library-3.6.197.tgz +0 -0
  30. package/simpo-component-library-3.6.196.tgz +0 -0
@@ -40,7 +40,7 @@ export class EnrollmentFormComponent extends BaseSection {
40
40
  schemeType: "",
41
41
  pwcSchemeCode: ""
42
42
  },
43
- pwcUserCode: "C_000313885",
43
+ pwcUserCode: "",
44
44
  addressDetails: {
45
45
  state: {
46
46
  id: "",
@@ -84,6 +84,7 @@ export class EnrollmentFormComponent extends BaseSection {
84
84
  this.stateData = [];
85
85
  this.cityData = [];
86
86
  this.storeSlabs = [];
87
+ this.validator = false;
87
88
  this.showResult = true;
88
89
  this.isProcessing = false;
89
90
  this.validObject = {
@@ -117,6 +118,13 @@ export class EnrollmentFormComponent extends BaseSection {
117
118
  if (!this.storageService.getUser()) {
118
119
  this.router.navigate(['/login'], { queryParams: { schemes: true } });
119
120
  }
121
+ else {
122
+ let user = this.storageService?.getUser();
123
+ this.enrollementPayload.name = user?.contact?.name;
124
+ this.enrollementPayload.mailId = user?.contact?.email;
125
+ this.enrollementPayload.mobileNumber = user?.contact?.mobile;
126
+ this.enrollementPayload.pwcUserCode = user?.pwcUserCode;
127
+ }
120
128
  }
121
129
  getSchemes() {
122
130
  this.restService.getAllScheme().subscribe((res) => {
@@ -181,6 +189,7 @@ export class EnrollmentFormComponent extends BaseSection {
181
189
  this.validater(ele);
182
190
  }
183
191
  if (Object.values(this.validObject).some(value => !value)) {
192
+ this.validator = true;
184
193
  return;
185
194
  }
186
195
  this.enrollementPayload.pwcStoreCode = this.enrollementPayload.storeDetails?.pwcStoreCode || this.selectedScheme?.pwcStoreCode;
@@ -362,7 +371,7 @@ export class EnrollmentFormComponent extends BaseSection {
362
371
  }
363
372
  }
364
373
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnrollmentFormComponent, deps: [{ token: i1.RestService }, { token: i2.ActivatedRoute }, { token: i3.StorageServiceService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
365
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EnrollmentFormComponent, isStandalone: true, selector: "simpo-enrollment-form", inputs: { data: "data", edit: "edit", customClass: "customClass", delete: "delete", index: "index" }, usesInheritance: true, ngImport: i0, template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\r\n <div class=\"form-container\">\r\n <div class=\"section-title\">Customer Information</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\r\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\" [class.error-border]=\"!validObject['NAME']\">\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\r\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\r\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\" [class.error-border]=\"!validObject['EMAIL']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\r\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\r\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\" [class.error-border]=\"!validObject['MOBILE']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\r\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\r\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\" [class.error-border]=\"!validObject['DOB']\">\r\n </div>\r\n </div>\r\n\r\n <!-- Scheme Information -->\r\n <div class=\"section-title\">Scheme Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\r\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\r\n <option [ngValue]=\"\">Select Scheme</option>\r\n <ng-container *ngFor=\"let scheme of schemesData\">\r\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\r\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\r\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\r\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\r\n <option [ngValue]=\"\">Select Amount Plan</option>\r\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\r\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Information -->\r\n <div class=\"section-title\">Store Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\r\n <option [ngValue]=\"\">Select Store</option>\r\n <ng-container *ngFor=\"let store of storeData\">\r\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\r\n [(ngModel)]=\"enrollementPayload.custodian\">\r\n <option [ngValue]=\"\">Select Custodian</option>\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Enter Your Address -->\r\n <div class=\"section-title\">Enter Your Address</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\" (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\r\n (ngModelChange)=\"getCityByStateId()\">\r\n <option [ngValue]=\"\">Select State</option>\r\n <ng-container *ngFor=\"let state of stateData\">\r\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\r\n <option [ngValue]=\"\">Select City</option>\r\n <ng-container *ngFor=\"let city of cityData\">\r\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\" (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Enter Nominee Details</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\" (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\r\n <!-- <option value=\"\">Select Relationship</option> -->\r\n <option value=\"Spouse\">Spouse</option>\r\n <option value=\"Child\">Child</option>\r\n <option value=\"Mother\">Mother</option>\r\n <option value=\"Father\">Father</option>\r\n <option value=\"Sibling\">Sibling</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\r\n\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\" (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\" [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Account Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\r\n class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\" (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\" [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\" (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\" [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\" (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\" (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\r\n </div>\r\n </div>\r\n <div class=\"d-grid mt-4\">\r\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\r\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\r\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\r\n [buttonData]=\"getButtonContent(0)\">Submit\r\n Enrollment</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"container-fluid d-flex justify-content-center align-items-center min-vh-100\" *ngIf=\"page === 'PAYMENT'\">\r\n <div class=\"card shadow-lg border-0 payment-card\">\r\n <div class=\"card-header bg-primary text-white text-center py-3\">\r\n <h2 class=\"card-title mb-0\">\r\n <i class=\"fas fa-credit-card me-2\"></i>\r\n Payment Simulation\r\n </h2>\r\n </div>\r\n\r\n <div class=\"card-body p-4\">\r\n <div class=\"row g-3 mb-4\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-lg w-100 payment-btn\" (click)=\"simulatePayment('success')\"\r\n [disabled]=\"isProcessing\">\r\n <i class=\"fas fa-check-circle me-2\"></i>\r\n <span class=\"btn-text\">Success</span>\r\n <div class=\"btn-overlay\"></div>\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-danger btn-lg w-100 payment-btn\" (click)=\"simulatePayment('failure')\"\r\n [disabled]=\"isProcessing\">\r\n <i class=\"fas fa-times-circle me-2\"></i>\r\n <span class=\"btn-text\">Failure</span>\r\n <div class=\"btn-overlay\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isProcessing\" class=\"text-center mb-3\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"spinner-border text-primary me-2\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n <span class=\"text-muted\">Processing payment...</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"result\" class=\"alert alert-dismissible fade\" [ngClass]=\"{\r\n 'alert-success': result.type === 'success', \r\n 'alert-danger': result.type === 'failure',\r\n 'show': showResult\r\n }\" role=\"alert\">\r\n <i [class]=\"result.iconClass + ' me-2'\"></i>\r\n <strong>{{ result.title }}</strong> {{ result.message }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-footer bg-light text-center py-3\">\r\n <small class=\"text-muted\">\r\n <i class=\"fas fa-info-circle me-1\"></i>\r\n Click buttons to simulate payment scenarios\r\n </small>\r\n </div>\r\n </div>\r\n </div>\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\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</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i6.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i7.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId"] }] }); }
374
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EnrollmentFormComponent, isStandalone: true, selector: "simpo-enrollment-form", inputs: { data: "data", edit: "edit", customClass: "customClass", delete: "delete", index: "index" }, usesInheritance: true, ngImport: i0, template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\r\n <div class=\"form-container\">\r\n <div class=\"section-title\">Customer Information</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\r\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\"\r\n [class.error-border]=\"!validObject['NAME']\">\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\r\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\r\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\"\r\n [class.error-border]=\"!validObject['EMAIL']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\r\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\r\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\"\r\n [class.error-border]=\"!validObject['MOBILE']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\r\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\r\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\"\r\n [class.error-border]=\"!validObject['DOB']\">\r\n </div>\r\n </div>\r\n\r\n <!-- Scheme Information -->\r\n <div class=\"section-title\">Scheme Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\r\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\r\n <option [ngValue]=\"\">Select Scheme</option>\r\n <ng-container *ngFor=\"let scheme of schemesData\">\r\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\r\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\r\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\r\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\r\n <option [ngValue]=\"\">Select Amount Plan</option>\r\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\r\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Information -->\r\n <div class=\"section-title\">Store Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\r\n <option [ngValue]=\"\">Select Store</option>\r\n <ng-container *ngFor=\"let store of storeData\">\r\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\r\n [(ngModel)]=\"enrollementPayload.custodian\">\r\n <option [ngValue]=\"\">Select Custodian</option>\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Enter Your Address -->\r\n <div class=\"section-title\">Enter Your Address</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\"\r\n (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\r\n (ngModelChange)=\"getCityByStateId()\">\r\n <option [ngValue]=\"\">Select State</option>\r\n <ng-container *ngFor=\"let state of stateData\">\r\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\r\n <option [ngValue]=\"\">Select City</option>\r\n <ng-container *ngFor=\"let city of cityData\">\r\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\"\r\n (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Enter Nominee Details</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\"\r\n (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\r\n <!-- <option value=\"\">Select Relationship</option> -->\r\n <option value=\"Spouse\">Spouse</option>\r\n <option value=\"Child\">Child</option>\r\n <option value=\"Mother\">Mother</option>\r\n <option value=\"Father\">Father</option>\r\n <option value=\"Sibling\">Sibling</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\r\n\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\"\r\n (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\"\r\n [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Account Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\r\n class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\"\r\n (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\"\r\n (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\r\n </div>\r\n </div>\r\n <div class=\"d-grid mt-4\">\r\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\r\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\r\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\r\n [buttonData]=\"getButtonContent(0)\">Submit\r\n Enrollment</button>\r\n </div>\r\n <div *ngIf=\"validator\" [class.error-color]=\"validator\">Fill all mandatory fields to proceed*</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Add this block in your Angular payment step (page === 'PAYMENT') -->\r\n <!-- payment-simulation.component.html -->\r\n <div class=\"container-fluid min-vh-100 d-flex align-items-center justify-content-center bg-light\"\r\n *ngIf=\"page === 'PAYMENT'\">\r\n <div class=\"payment-container\">\r\n\r\n <!-- Header -->\r\n <div class=\"payment-header mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <h1 class=\"payment-title\">Payment Method</h1>\r\n <span class=\"badge bg-success rounded-pill px-3 py-2\">Credit Card</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Credit Card -->\r\n <div class=\"credit-card mb-4\">\r\n <div class=\"card-inner\">\r\n <div class=\"card-shine\"></div>\r\n <div class=\"card-content\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"visa-logo\"></div>\r\n <span class=\"visa-text\">VISA</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cardholder-name mb-4\">\r\n turquoisecoyote\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <div class=\"card-dots\">\r\n <span class=\"dot\" *ngFor=\"let dot of [1,2,3,4,5,6,7,8,9,10,11,12]\"></span>\r\n </div>\r\n <span class=\"card-number\">1111</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- OTP Section -->\r\n <div class=\"otp-section mb-4\">\r\n <p class=\"otp-label\">Enter OTP sent to your xxx xxx 4839</p>\r\n <input type=\"text\" class=\"form-control otp-input\" placeholder=\"Enter OTP\">\r\n <small class=\"text-muted mt-2 d-block\">Hint: OTP is 111000</small>\r\n </div>\r\n\r\n <!-- Simulation Buttons -->\r\n <div class=\"row g-3 mb-4\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-danger btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('failure')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate failure\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('success')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate success\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Processing State -->\r\n <div *ngIf=\"isProcessing\" class=\"d-flex align-items-center justify-content-center py-3\">\r\n <div class=\"spinner-border text-primary me-3\" role=\"status\" style=\"width: 1.5rem; height: 1.5rem;\">\r\n </div>\r\n <span class=\"text-muted\">Processing payment...</span>\r\n </div>\r\n\r\n <!-- Result Alert -->\r\n <div *ngIf=\"result && showResult\" class=\"alert text-center result-alert\" [ngClass]=\"{\r\n 'alert-success': result.type === 'success',\r\n 'alert-danger': result.type === 'failure'\r\n }\">\r\n <strong>{{ result.title }}</strong> {{ result.message }}\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"text-center mt-4\">\r\n <small class=\"text-muted\">\r\n Click buttons to simulate payment scenarios\r\n </small>\r\n </div>\r\n\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\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</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.error-color{color:#e53e3e!important;font-weight:600;font-size:13px}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}.payment-container{width:100%;max-width:430px;padding:20px}.payment-title{font-size:2rem;font-weight:700;color:#333;margin:0}.credit-card{perspective:1000px}.card-inner{background:linear-gradient(135deg,#2d3748,#1a202c);border-radius:20px;padding:30px;position:relative;overflow:hidden;box-shadow:0 20px 40px #0000004d;color:#fff;min-height:200px}.card-shine{position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.1) 45%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.1) 55%,transparent 100%);pointer-events:none}.card-content{position:relative;z-index:2}.visa-logo{width:32px;height:20px;background:#fff;border-radius:3px}.visa-text{font-weight:700;font-size:1.2rem;letter-spacing:2px}.cardholder-name{font-size:1.1rem;letter-spacing:1px;text-transform:lowercase}.card-dots{display:flex;gap:4px}.dot{width:8px;height:8px;background:#fff;border-radius:50%;display:inline-block}.card-number{font-family:Courier New,monospace;font-size:1.3rem;font-weight:700;letter-spacing:3px}.otp-section{margin:30px 0}.otp-label{color:#6c757d;margin-bottom:12px;font-size:.95rem}.otp-input{padding:16px 20px;border-radius:12px;border:2px solid #e9ecef;font-size:1.1rem;transition:all .3s ease}.otp-input:focus{border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.simulation-btn{padding:16px 20px;border-radius:12px;font-weight:700;font-size:1rem;transition:all .3s ease;border:none;white-space:nowrap}.simulation-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #00000026}.simulation-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-danger.simulation-btn{background:linear-gradient(135deg,#dc3545,#c82333)}.btn-success.simulation-btn{background:linear-gradient(135deg,#28a745,#20c997)}.result-alert{border-radius:12px;padding:16px 20px;border:none;font-weight:500;animation:slideInUp .3s ease-out}.alert-success{background:linear-gradient(135deg,#d4edda,#c3e6cb);color:#155724;border-left:4px solid #28a745}.alert-danger{background:linear-gradient(135deg,#f8d7da,#f5c6cb);color:#721c24;border-left:4px solid #dc3545}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.payment-container{padding:15px}.payment-title{font-size:1.5rem}.card-inner{padding:25px;min-height:180px}.simulation-btn{padding:14px 16px;font-size:.9rem}.form-container{width:100%!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i6.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i7.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId"] }] }); }
366
375
  }
367
376
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnrollmentFormComponent, decorators: [{
368
377
  type: Component,
@@ -381,7 +390,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
381
390
  SpacingHorizontalDirective,
382
391
  ButtonEditorDirective,
383
392
  MatIcon
384
- ], template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\r\n <div class=\"form-container\">\r\n <div class=\"section-title\">Customer Information</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\r\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\" [class.error-border]=\"!validObject['NAME']\">\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\r\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\r\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\" [class.error-border]=\"!validObject['EMAIL']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\r\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\r\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\" [class.error-border]=\"!validObject['MOBILE']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\r\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\r\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\" [class.error-border]=\"!validObject['DOB']\">\r\n </div>\r\n </div>\r\n\r\n <!-- Scheme Information -->\r\n <div class=\"section-title\">Scheme Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\r\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\r\n <option [ngValue]=\"\">Select Scheme</option>\r\n <ng-container *ngFor=\"let scheme of schemesData\">\r\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\r\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\r\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\r\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\r\n <option [ngValue]=\"\">Select Amount Plan</option>\r\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\r\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Information -->\r\n <div class=\"section-title\">Store Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\r\n <option [ngValue]=\"\">Select Store</option>\r\n <ng-container *ngFor=\"let store of storeData\">\r\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\r\n [(ngModel)]=\"enrollementPayload.custodian\">\r\n <option [ngValue]=\"\">Select Custodian</option>\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Enter Your Address -->\r\n <div class=\"section-title\">Enter Your Address</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\" (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\r\n (ngModelChange)=\"getCityByStateId()\">\r\n <option [ngValue]=\"\">Select State</option>\r\n <ng-container *ngFor=\"let state of stateData\">\r\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\r\n <option [ngValue]=\"\">Select City</option>\r\n <ng-container *ngFor=\"let city of cityData\">\r\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\" (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Enter Nominee Details</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\" (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\r\n <!-- <option value=\"\">Select Relationship</option> -->\r\n <option value=\"Spouse\">Spouse</option>\r\n <option value=\"Child\">Child</option>\r\n <option value=\"Mother\">Mother</option>\r\n <option value=\"Father\">Father</option>\r\n <option value=\"Sibling\">Sibling</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\r\n\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\" (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\" [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Account Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\r\n class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\" (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\" [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\" (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\" [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\" (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\" (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\r\n </div>\r\n </div>\r\n <div class=\"d-grid mt-4\">\r\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\r\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\r\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\r\n [buttonData]=\"getButtonContent(0)\">Submit\r\n Enrollment</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"container-fluid d-flex justify-content-center align-items-center min-vh-100\" *ngIf=\"page === 'PAYMENT'\">\r\n <div class=\"card shadow-lg border-0 payment-card\">\r\n <div class=\"card-header bg-primary text-white text-center py-3\">\r\n <h2 class=\"card-title mb-0\">\r\n <i class=\"fas fa-credit-card me-2\"></i>\r\n Payment Simulation\r\n </h2>\r\n </div>\r\n\r\n <div class=\"card-body p-4\">\r\n <div class=\"row g-3 mb-4\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-lg w-100 payment-btn\" (click)=\"simulatePayment('success')\"\r\n [disabled]=\"isProcessing\">\r\n <i class=\"fas fa-check-circle me-2\"></i>\r\n <span class=\"btn-text\">Success</span>\r\n <div class=\"btn-overlay\"></div>\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-danger btn-lg w-100 payment-btn\" (click)=\"simulatePayment('failure')\"\r\n [disabled]=\"isProcessing\">\r\n <i class=\"fas fa-times-circle me-2\"></i>\r\n <span class=\"btn-text\">Failure</span>\r\n <div class=\"btn-overlay\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isProcessing\" class=\"text-center mb-3\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"spinner-border text-primary me-2\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n <span class=\"text-muted\">Processing payment...</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"result\" class=\"alert alert-dismissible fade\" [ngClass]=\"{\r\n 'alert-success': result.type === 'success', \r\n 'alert-danger': result.type === 'failure',\r\n 'show': showResult\r\n }\" role=\"alert\">\r\n <i [class]=\"result.iconClass + ' me-2'\"></i>\r\n <strong>{{ result.title }}</strong> {{ result.message }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-footer bg-light text-center py-3\">\r\n <small class=\"text-muted\">\r\n <i class=\"fas fa-info-circle me-1\"></i>\r\n Click buttons to simulate payment scenarios\r\n </small>\r\n </div>\r\n </div>\r\n </div>\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\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</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}\n"] }]
393
+ ], template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\r\n <div class=\"form-container\">\r\n <div class=\"section-title\">Customer Information</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\r\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\"\r\n [class.error-border]=\"!validObject['NAME']\">\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\r\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\r\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\"\r\n [class.error-border]=\"!validObject['EMAIL']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\r\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\r\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\"\r\n [class.error-border]=\"!validObject['MOBILE']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\r\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\r\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\"\r\n [class.error-border]=\"!validObject['DOB']\">\r\n </div>\r\n </div>\r\n\r\n <!-- Scheme Information -->\r\n <div class=\"section-title\">Scheme Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\r\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\r\n <option [ngValue]=\"\">Select Scheme</option>\r\n <ng-container *ngFor=\"let scheme of schemesData\">\r\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\r\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\r\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\r\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\r\n <option [ngValue]=\"\">Select Amount Plan</option>\r\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\r\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Information -->\r\n <div class=\"section-title\">Store Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\r\n <option [ngValue]=\"\">Select Store</option>\r\n <ng-container *ngFor=\"let store of storeData\">\r\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\r\n [(ngModel)]=\"enrollementPayload.custodian\">\r\n <option [ngValue]=\"\">Select Custodian</option>\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Enter Your Address -->\r\n <div class=\"section-title\">Enter Your Address</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\"\r\n (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\r\n (ngModelChange)=\"getCityByStateId()\">\r\n <option [ngValue]=\"\">Select State</option>\r\n <ng-container *ngFor=\"let state of stateData\">\r\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\r\n <option [ngValue]=\"\">Select City</option>\r\n <ng-container *ngFor=\"let city of cityData\">\r\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\"\r\n (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Enter Nominee Details</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\"\r\n (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\r\n <!-- <option value=\"\">Select Relationship</option> -->\r\n <option value=\"Spouse\">Spouse</option>\r\n <option value=\"Child\">Child</option>\r\n <option value=\"Mother\">Mother</option>\r\n <option value=\"Father\">Father</option>\r\n <option value=\"Sibling\">Sibling</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\r\n\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\"\r\n (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\"\r\n [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Account Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\r\n class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\"\r\n (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\"\r\n (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\r\n </div>\r\n </div>\r\n <div class=\"d-grid mt-4\">\r\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\r\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\r\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\r\n [buttonData]=\"getButtonContent(0)\">Submit\r\n Enrollment</button>\r\n </div>\r\n <div *ngIf=\"validator\" [class.error-color]=\"validator\">Fill all mandatory fields to proceed*</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Add this block in your Angular payment step (page === 'PAYMENT') -->\r\n <!-- payment-simulation.component.html -->\r\n <div class=\"container-fluid min-vh-100 d-flex align-items-center justify-content-center bg-light\"\r\n *ngIf=\"page === 'PAYMENT'\">\r\n <div class=\"payment-container\">\r\n\r\n <!-- Header -->\r\n <div class=\"payment-header mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <h1 class=\"payment-title\">Payment Method</h1>\r\n <span class=\"badge bg-success rounded-pill px-3 py-2\">Credit Card</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Credit Card -->\r\n <div class=\"credit-card mb-4\">\r\n <div class=\"card-inner\">\r\n <div class=\"card-shine\"></div>\r\n <div class=\"card-content\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"visa-logo\"></div>\r\n <span class=\"visa-text\">VISA</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cardholder-name mb-4\">\r\n turquoisecoyote\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <div class=\"card-dots\">\r\n <span class=\"dot\" *ngFor=\"let dot of [1,2,3,4,5,6,7,8,9,10,11,12]\"></span>\r\n </div>\r\n <span class=\"card-number\">1111</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- OTP Section -->\r\n <div class=\"otp-section mb-4\">\r\n <p class=\"otp-label\">Enter OTP sent to your xxx xxx 4839</p>\r\n <input type=\"text\" class=\"form-control otp-input\" placeholder=\"Enter OTP\">\r\n <small class=\"text-muted mt-2 d-block\">Hint: OTP is 111000</small>\r\n </div>\r\n\r\n <!-- Simulation Buttons -->\r\n <div class=\"row g-3 mb-4\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-danger btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('failure')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate failure\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('success')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate success\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Processing State -->\r\n <div *ngIf=\"isProcessing\" class=\"d-flex align-items-center justify-content-center py-3\">\r\n <div class=\"spinner-border text-primary me-3\" role=\"status\" style=\"width: 1.5rem; height: 1.5rem;\">\r\n </div>\r\n <span class=\"text-muted\">Processing payment...</span>\r\n </div>\r\n\r\n <!-- Result Alert -->\r\n <div *ngIf=\"result && showResult\" class=\"alert text-center result-alert\" [ngClass]=\"{\r\n 'alert-success': result.type === 'success',\r\n 'alert-danger': result.type === 'failure'\r\n }\">\r\n <strong>{{ result.title }}</strong> {{ result.message }}\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"text-center mt-4\">\r\n <small class=\"text-muted\">\r\n Click buttons to simulate payment scenarios\r\n </small>\r\n </div>\r\n\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\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</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.error-color{color:#e53e3e!important;font-weight:600;font-size:13px}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}.payment-container{width:100%;max-width:430px;padding:20px}.payment-title{font-size:2rem;font-weight:700;color:#333;margin:0}.credit-card{perspective:1000px}.card-inner{background:linear-gradient(135deg,#2d3748,#1a202c);border-radius:20px;padding:30px;position:relative;overflow:hidden;box-shadow:0 20px 40px #0000004d;color:#fff;min-height:200px}.card-shine{position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.1) 45%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.1) 55%,transparent 100%);pointer-events:none}.card-content{position:relative;z-index:2}.visa-logo{width:32px;height:20px;background:#fff;border-radius:3px}.visa-text{font-weight:700;font-size:1.2rem;letter-spacing:2px}.cardholder-name{font-size:1.1rem;letter-spacing:1px;text-transform:lowercase}.card-dots{display:flex;gap:4px}.dot{width:8px;height:8px;background:#fff;border-radius:50%;display:inline-block}.card-number{font-family:Courier New,monospace;font-size:1.3rem;font-weight:700;letter-spacing:3px}.otp-section{margin:30px 0}.otp-label{color:#6c757d;margin-bottom:12px;font-size:.95rem}.otp-input{padding:16px 20px;border-radius:12px;border:2px solid #e9ecef;font-size:1.1rem;transition:all .3s ease}.otp-input:focus{border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.simulation-btn{padding:16px 20px;border-radius:12px;font-weight:700;font-size:1rem;transition:all .3s ease;border:none;white-space:nowrap}.simulation-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #00000026}.simulation-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-danger.simulation-btn{background:linear-gradient(135deg,#dc3545,#c82333)}.btn-success.simulation-btn{background:linear-gradient(135deg,#28a745,#20c997)}.result-alert{border-radius:12px;padding:16px 20px;border:none;font-weight:500;animation:slideInUp .3s ease-out}.alert-success{background:linear-gradient(135deg,#d4edda,#c3e6cb);color:#155724;border-left:4px solid #28a745}.alert-danger{background:linear-gradient(135deg,#f8d7da,#f5c6cb);color:#721c24;border-left:4px solid #dc3545}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.payment-container{padding:15px}.payment-title{font-size:1.5rem}.card-inner{padding:25px;min-height:180px}.simulation-btn{padding:14px 16px;font-size:.9rem}.form-container{width:100%!important}}\n"] }]
385
394
  }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.ActivatedRoute }, { type: i3.StorageServiceService }, { type: i2.Router }], propDecorators: { data: [{
386
395
  type: Input
387
396
  }], edit: [{
@@ -393,4 +402,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
393
402
  }], index: [{
394
403
  type: Input
395
404
  }] } });
396
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsbWVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL2Vucm9sbG1lbnQtZm9ybS9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZW5yb2xsbWVudC1mb3JtL2Vucm9sbG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxp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aWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi8uLi8uLi9zZWN0aW9ucy9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFbnJvbGxtZW50Rm9ybU1vZGVsLCBFbnJvbGxtZW50Rm9ybVN0eWxlTW9kZWwgfSBmcm9tICcuL2Vucm9sbG1lbnQtZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWVucm9sbG1lbnQtZm9ybScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXHJcbiAgICBCdXR0b25FZGl0b3JEaXJlY3RpdmUsXHJcbiAgICBNYXRJY29uXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZW5yb2xsbWVudC1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZW5yb2xsbWVudC1mb3JtLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbnJvbGxtZW50Rm9ybUNvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIHtcclxuXHJcbiAgQElucHV0KCkgZGF0YT86IEVucm9sbG1lbnRGb3JtTW9kZWw7XHJcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XHJcbiAgc3R5bGVzPzogRW5yb2xsbWVudEZvcm1TdHlsZU1vZGVsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZlUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jaGVja1VzZXJMb2dnZWRJbigpO1xyXG4gICAgdGhpcy5nZXRTY2hlbWVzKCk7XHJcbiAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgdGhpcy5nZXRBbGxTdGF0ZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIGNoZWNrVXNlckxvZ2dlZEluKCkge1xyXG4gICAgaWYgKCF0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddLCB7IHF1ZXJ5UGFyYW1zOiB7IHNjaGVtZXM6IHRydWUgfSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBhZ2U6ICdFTlJPTExNRU5UJyB8ICdQQVlNRU5UJyA9ICdFTlJPTExNRU5UJztcclxuXHJcbiAgZW5yb2xsZW1lbnRQYXlsb2FkOiBhbnkgPSB7XHJcbiAgICBuYW1lOiBcIlwiLFxyXG4gICAgbWFpbElkOiBcIlwiLFxyXG4gICAgbW9iaWxlTnVtYmVyOiBcIlwiLFxyXG4gICAgZGF0ZU9mQmlydGg6IFwiXCIsXHJcbiAgICBzY2hlbWVEZXRhaWxzOiB7XHJcbiAgICAgIHNjaGVtZUlkOiBcIlwiLFxyXG4gICAgICBzY2hlbWVOYW1lOiBcIlwiLFxyXG4gICAgICBzY2hlbWVUeXBlOiBcIlwiLFxyXG4gICAgICBwd2NTY2hlbWVDb2RlOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgcHdjVXNlckNvZGU6IFwiQ18wMDAzMTM4ODVcIixcclxuICAgIGFkZHJlc3NEZXRhaWxzOiB7XHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICB9LFxyXG4gICAgICBjaXR5OiB7XHJcbiAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICB9LFxyXG4gICAgICBhZGRyZXNzTGluZTogXCJcIixcclxuICAgICAgcGluQ29kZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BpbmNvZGUnKSB8fCAwLFxyXG4gICAgfSxcclxuICAgIGJhbmtEZXRhaWxzOiB7XHJcbiAgICAgIGJhbmtOYW1lOiBcIlwiLFxyXG4gICAgICBhY2NvdW50TnVtYmVyOiAwLFxyXG4gICAgICBpZnNjQ29kZTogXCJcIixcclxuICAgICAgYWNjb3VudEhvbGRlck5hbWU6IFwiXCJcclxuICAgIH0sXHJcbiAgICBub21pbmVlRGV0YWlsczoge1xyXG4gICAgICBub21pbmVlTmFtZTogXCJcIixcclxuICAgICAgbW9iaWxlOiBcIlwiLFxyXG4gICAgICByZWxhdGlvblNoaXA6IFwiRmF0aGVyXCIsXHJcbiAgICB9LFxyXG4gICAgY3VzdG9kaWFuOiB7XHJcbiAgICAgIHN0YWZmSWQ6IFwiXCIsXHJcbiAgICAgIHN0YWZmTmFtZTogXCJcIixcclxuICAgICAgbW9iaWxlTnVtYmVyOiBcIlwiLFxyXG4gICAgICBlbWFpbDogXCJcIixcclxuICAgICAgc3RhZmZDb2RlOiBcIlwiLFxyXG4gICAgICBwcm9maWxlSW1nVXJsOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgc3RvcmVEZXRhaWxzOiB7fSxcclxuICAgIGVucm9sbGVkR3JvdXA6IHt9LFxyXG4gICAgbW9udGhseUluc3RhbGxtZW50QW1vdW50OiAwLFxyXG4gICAgcHdjU3RvcmVDb2RlOiBcIlwiLFxyXG4gICAgc3Vic2NyaXB0aW9uQ2hhcmdlRGF0ZTogbmV3IERhdGUoKS5nZXREYXRlKClcclxuICB9XHJcblxyXG4gIHNjaGVtZXNEYXRhOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZFNjaGVtZTogYW55O1xyXG4gIGdldFNjaGVtZXMoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFsbFNjaGVtZSgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zY2hlbWVzRGF0YSA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNjaGVtZSA9IHRoaXMuc2NoZW1lc0RhdGFbMF07XHJcbiAgICAgIHRoaXMuc2V0TW9udGhseUluc3RhbGxtZW50QW1vdW50KCk7XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzY2hlbWVzOiBcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBzdG9yZURhdGE6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkU3RvcmU6IGFueTtcclxuICBnZXRBbGxTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFsbFN0b3Jlc09ycmEoMCwgMTAwMDApLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zdG9yZURhdGEgPSByZXM/LmRhdGE/LmRhdGEgfHwgW107XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLnN0b3JlRGV0YWlscyA9IHRoaXMuc3RvcmVEYXRhWzBdO1xyXG4gICAgICB0aGlzLmdldFN0YWZmQnlJZCgpO1xyXG4gICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc3RvcmVzOiBcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBzdGFmZkRhdGE6IGFueSA9IFtdO1xyXG4gIGdldFN0YWZmQnlJZCgpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0c3RhZmZCeVN0b3JlSWQodGhpcy5lbnJvbGxlbWVudFBheWxvYWQuc3RvcmVEZXRhaWxzLnN0b3JlSWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zdGFmZkRhdGEgPSByZXM/LmRhdGEgfHwgW107XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbiA9IHRoaXMuc3RhZmZEYXRhWzBdIHx8IHt9O1xyXG4gICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc3RhZmY6IFwiLCBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdGF0ZURhdGE6IGFueSA9IFtdO1xyXG4gIGdldEFsbFN0YXRlKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRBbGxTdGF0ZSgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zdGF0ZURhdGEgPSByZXM/LmRhdGEgfHwgW107XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlID0gdGhpcy5zdGF0ZURhdGFbMF0gfHwge307XHJcbiAgICAgIHRoaXMuZ2V0Q2l0eUJ5U3RhdGVJZCgpO1xyXG4gICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc3RhdGVzOiBcIiwgZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgY2l0eURhdGE6IGFueSA9IFtdO1xyXG4gIGdldENpdHlCeVN0YXRlSWQoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldENpdHlCeVN0YXRlQnlwYWdpbmF0ZWQodGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGUuaWQsIDAsIDEwMDAwKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY2l0eURhdGEgPSByZXM/LmRhdGEuZGF0YSB8fCBbXTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eSA9IHRoaXMuY2l0eURhdGFbMF0gfHwge307XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBDaXRpZXM6IFwiLCBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZXRNb250aGx5SW5zdGFsbG1lbnRBbW91bnQoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNjaGVtZS5zY2hlbWVUeXBlID09ICdJTkRJVklEVUFMJyAmJiB0aGlzLnNlbGVjdGVkU2NoZW1lLm1pbkluc3RhbGxtZW50QW1vdW50KSB7XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1vbnRobHlJbnN0YWxsbWVudEFtb3VudCA9IHRoaXMuc2VsZWN0ZWRTY2hlbWUubWluSW5zdGFsbG1lbnRBbW91bnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFN0b3JlU2xhYnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0b3JlU2xhYnM6IGFueSA9IFtdO1xyXG4gIGdldFN0b3JlU2xhYnMoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldFN0b3JlQnlTbGFiKHsgc3RvcmVzTGlzdDogdGhpcy5zZWxlY3RlZFNjaGVtZS5zY2hlbWVTbGFic1swXS5zbGFiU3RvcmVzIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zdG9yZVNsYWJzID0gcmVzPy5kYXRhIHx8IFtdO1xyXG4gICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc3RvcmUgc2xhYnM6IFwiLCBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBjcmVhdGVFbnJvbGxtZW50KCkge1xyXG5cclxuICAgIGZvciAobGV0IGVsZSBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbGlkT2JqZWN0KSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlcihlbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMudmFsaWRPYmplY3QpLnNvbWUodmFsdWUgPT4gIXZhbHVlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQucHdjU3RvcmVDb2RlID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuc3RvcmVEZXRhaWxzPy5wd2NTdG9yZUNvZGUgfHwgdGhpcy5zZWxlY3RlZFNjaGVtZT8ucHdjU3RvcmVDb2RlO1xyXG5cclxuICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLnNjaGVtZURldGFpbHMgPSBbJ3NjaGVtZUlkJywgJ3NjaGVtZU5hbWUnLCAnc2NoZW1lVHlwZScsICdwd2NTY2hlbWVDb2RlJ10ucmVkdWNlKChhY2M6IGFueSwga2V5OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTY2hlbWVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLnNlbGVjdGVkU2NoZW1lW2tleV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGtleSA9PSAncHdjU2NoZW1lQ29kZScpIHtcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuc2VsZWN0ZWRTY2hlbWU/LnB3Y0luZGl2aWR1YWxTY2hlbWVDb2RlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTY2hlbWUuc2NoZW1lVHlwZSA9PSAnR1JPVVAnKSB7XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmVucm9sbGVkR3JvdXAuc2NoZW1lSWQgPSB0aGlzLnNlbGVjdGVkU2NoZW1lPy5zY2hlbWVJZDtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zY2hlbWVOYW1lID0gdGhpcy5zZWxlY3RlZFNjaGVtZT8uc2NoZW1lTmFtZTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zdG9yZUlkID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LnN0b3JlRGV0YWlscz8uc3RvcmVJZDtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zdG9yZU5hbWUgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uc3RvcmVEZXRhaWxzPy5zdG9yZU5hbWU7XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1vbnRobHlJbnN0YWxsbWVudEFtb3VudCA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5lbnJvbGxlZEdyb3VwPy5zY2hlbWVTbGFiPy5tb250aGx5SW5zdGFsbG1lbnRBbW91bnQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlID0gWydpZCcsICduYW1lJ10ucmVkdWNlKChhY2M6IGFueSwga2V5OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlPy5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZVtrZXldO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcblxyXG5cclxuICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLmNpdHkgPSBbJ2lkJywgJ25hbWUnXS5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eVtrZXldO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcblxyXG5cclxuICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbiA9IFtcclxuICAgICAgJ3N0YWZmSWQnLCAnc3RhZmZOYW1lJywgJ21vYmlsZU51bWJlcicsICdlbWFpbCcsICdzdGFmZkNvZGUnLCAncHJvZmlsZUltZ1VybCdcclxuICAgIF0ucmVkdWNlKChhY2M6IGFueSwga2V5OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuW2tleV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGtleSA9PSAnc3RhZmZOYW1lJylcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8ucGVyc29uYWxJbmZvPy5uYW1lXHJcbiAgICAgIGlmIChrZXkgPT0gJ21vYmlsZU51bWJlcicpXHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4/LmNvbnRhY3REZXRhaWxzPy5tb2JpbGVcclxuICAgICAgaWYgKGtleSA9PSAnZW1haWwnKVxyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5jb250YWN0RGV0YWlscz8uZW1haWxcclxuICAgICAgaWYgKGtleSA9PSAncHJvZmlsZUltZ1VybCcpXHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4/LnBlcnNvbmFsSW5mbz8ucHJvZmlsZUltYWdlXHJcbiAgICAgIGlmIChrZXkgPT0gJ3N0YWZmQ29kZScpXHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4/LnN0YWZmV29ya0luZm8/LnN0YWZmQ29kZTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxuICAgIHRoaXMucGFnZSA9ICdQQVlNRU5UJztcclxuICB9XHJcblxyXG4gIHN1Y2Nlc3MoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmNyZWF0ZUVucm9sbG1lbnRTY2hlbWUodGhpcy5lbnJvbGxlbWVudFBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKVxyXG4gICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNpbXVsYXRlUGF5bWVudCgnZmFpbHVyZScpO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICByZXN1bHQ6IGFueVxyXG4gIHNob3dSZXN1bHQgPSB0cnVlO1xyXG4gIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuICBzaW11bGF0ZVBheW1lbnQodHlwZTogJ3N1Y2Nlc3MnIHwgJ2ZhaWx1cmUnKSB7XHJcbiAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzdWx0ID0ge31cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIHRoaXMucmVzdWx0ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgdGl0bGU6ICdQYXltZW50IFN1Y2Nlc3NmdWwhJyxcclxuICAgICAgICAgIG1lc3NhZ2U6ICdZb3VyIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuJyxcclxuICAgICAgICAgIGljb25DbGFzczogJ2ZhcyBmYS1jaGVjay1jaXJjbGUnXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnN1Y2Nlc3MoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc3VsdCA9IHtcclxuICAgICAgICAgIHR5cGU6ICdmYWlsdXJlJyxcclxuICAgICAgICAgIHRpdGxlOiAnUGF5bWVudCBGYWlsZWQhJyxcclxuICAgICAgICAgIG1lc3NhZ2U6ICdUaGVyZSB3YXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB5b3VyIHBheW1lbnQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcclxuICAgICAgICAgIGljb25DbGFzczogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSdcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc3VsdCA9IHRydWU7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9LCAyMDAwKTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbklkKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmFjdGlvbj8uYnV0dG9uc1tpbmRleF0/LmlkID8/IFwiXCI7XHJcbiAgfVxyXG4gIGdldEJ1dHRvblN0eWxlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmFjdGlvbj8uYnV0dG9uc1tpbmRleF0/LnN0eWxlcztcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbkNvbnRlbnQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uYWN0aW9uPy5idXR0b25zW2luZGV4XT8uY29udGVudDtcclxuICB9XHJcblxyXG5cclxuICBkZWJvdW5jZVRpbWVyOiBhbnk7XHJcbiAgdmFsaWRhdGVGb3JtKGZpZWxkVHlwZTogc3RyaW5nKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVyKTtcclxuICAgIHRoaXMuZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlcihmaWVsZFR5cGUpXHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuICB2YWxpZE9iamVjdDogYW55ID0ge1xyXG4gICAgTkFNRTogdHJ1ZSxcclxuICAgIEVNQUlMOiB0cnVlLFxyXG4gICAgTU9CSUxFOiB0cnVlLFxyXG4gICAgRE9COiB0cnVlLFxyXG4gICAgU0NIRU1FOiB0cnVlLFxyXG4gICAgTU9OVEhMWV9BTU9VTlQ6IHRydWUsXHJcbiAgICBTVE9SRTogdHJ1ZSxcclxuICAgIEFERFJFU1M6IHRydWUsXHJcbiAgICBTVEFURTogdHJ1ZSxcclxuICAgIENJVFk6IHRydWUsXHJcbiAgICBQSU5DT0RFOiB0cnVlLFxyXG4gICAgTk9NSU5FRV9OQU1FOiB0cnVlLFxyXG4gICAgTk9NSU5FRV9NT0JJTEU6IHRydWUsXHJcbiAgICBOT01JTkVFX1JFTEFUSU9OU0hJUDogdHJ1ZSxcclxuICAgIEJBTktfTkFNRTogdHJ1ZSxcclxuICAgIEFDQ09VTlRfTlVNQkVSOiB0cnVlLFxyXG4gICAgSUZTQ19DT0RFOiB0cnVlLFxyXG4gICAgQUNDT1VOVF9IT0xERVJfTkFNRTogdHJ1ZSxcclxuICB9XHJcbiAgdmFsaWRhdGVyKGZpZWxkVHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlICdOQU1FJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTkFNRSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm5hbWUudHJpbSgpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnRU1BSUwnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5FTUFJTCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQubWFpbElkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdNT0JJTEUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5NT0JJTEUgPSAvXlxcZHsxMH0kLy50ZXN0KHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1vYmlsZU51bWJlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnRE9CJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuRE9CID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5kYXRlT2ZCaXJ0aDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdTQ0hFTUUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5TQ0hFTUUgPSAhIXRoaXMuc2VsZWN0ZWRTY2hlbWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnTU9OVEhMWV9BTU9VTlQnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5NT05USExZX0FNT1VOVCA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5tb250aGx5SW5zdGFsbG1lbnRBbW91bnQgPiAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1NUT1JFJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuU1RPUkUgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5zdG9yZURldGFpbHM/LnN0b3JlSWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQUREUkVTUyc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkFERFJFU1MgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5hZGRyZXNzRGV0YWlscz8uYWRkcmVzc0xpbmUudHJpbSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1NUQVRFJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuU1RBVEUgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5hZGRyZXNzRGV0YWlscz8uc3RhdGU/LmlkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0NJVFknOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5DSVRZID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYWRkcmVzc0RldGFpbHM/LmNpdHk/LmlkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1BJTkNPREUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5QSU5DT0RFID0gL15cXGR7Nn0kLy50ZXN0KHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5hZGRyZXNzRGV0YWlscz8ucGluQ29kZT8udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnTk9NSU5FRV9OQU1FJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTk9NSU5FRV9OQU1FID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/Lm5vbWluZWVEZXRhaWxzPy5ub21pbmVlTmFtZT8udHJpbSgpPy5sZW5ndGggPiAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ05PTUlORUVfTU9CSUxFJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTk9NSU5FRV9NT0JJTEUgPSAvXlxcZHsxMH0kLy50ZXN0KHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5ub21pbmVlRGV0YWlscz8ubW9iaWxlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdOT01JTkVFX1JFTEFUSU9OU0hJUCc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk5PTUlORUVfUkVMQVRJT05TSElQID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8ubm9taW5lZURldGFpbHM/LnJlbGF0aW9uU2hpcD8udHJpbSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0JBTktfTkFNRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkJBTktfTkFNRSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmJhbmtEZXRhaWxzPy5iYW5rTmFtZS50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQUNDT1VOVF9OVU1CRVInOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5BQ0NPVU5UX05VTUJFUiA9IC9eXFxkKyQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmJhbmtEZXRhaWxzPy5hY2NvdW50TnVtYmVyPy50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdJRlNDX0NPREUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5JRlNDX0NPREUgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5iYW5rRGV0YWlscz8uaWZzY0NvZGU/LnRyaW0oKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBQ0NPVU5UX0hPTERFUl9OQU1FJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuQUNDT1VOVF9IT0xERVJfTkFNRSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5iYW5rRGV0YWlscz8uYWNjb3VudEhvbGRlck5hbWU/LnRyaW0oKS5sZW5ndGggPiAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lciBwb3NpdGlvbi1yZWxhdGl2ZVwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIHB5LTVcIiAqbmdJZj1cInBhZ2UgPT09ICdFTlJPTExNRU5UJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkN1c3RvbWVyIEluZm9ybWF0aW9uPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZ1bGxOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RnVsbCBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJmdWxsTmFtZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnTkFNRScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ05BTUUnXVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZW1haWxcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5FbWFpbCBBZGRyZXNzIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiZW1haWxcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm1haWxJZFwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnRU1BSUwnKVwiIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydFTUFJTCddXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibW9iaWxlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TW9iaWxlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZWxcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJtb2JpbGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5tb2JpbGVOdW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ01PQklMRScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ01PQklMRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkYXRlT2ZCaXJ0aFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRhdGUgb2YgQmlydGggPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJkYXRlT2ZCaXJ0aFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmRhdGVPZkJpcnRoXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdET0InKVwiIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydET0InXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBTY2hlbWUgSW5mb3JtYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U2NoZW1lIEluZm9ybWF0aW9uPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzY2hlbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TY2hlbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJzY2hlbWVcIiByZXF1aXJlZCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2NoZW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0TW9udGhseUluc3RhbGxtZW50QW1vdW50KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgU2NoZW1lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNjaGVtZSBvZiBzY2hlbWVzRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzY2hlbWVcIj57e3NjaGVtZS5zY2hlbWVOYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJtb250aGx5QW1vdW50XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TW9udGhseSBBbW91bnQgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cIm1vbnRobHlBbW91bnRcIiByZXF1aXJlZCBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkU2NoZW1lPy5zY2hlbWVUeXBlID09ICdJTkRJVklEVUFMJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm1vbnRobHlJbnN0YWxsbWVudEFtb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInN1YmRpdmlzaW9uXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFNjaGVtZT8uc2NoZW1lVHlwZSA9PSAnR1JPVVAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zY2hlbWVTbGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IEFtb3VudCBQbGFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNsYWIgb2Ygc2VsZWN0ZWRTY2hlbWUuc2NoZW1lU2xhYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwic2xhYlwiPnt7c2xhYi5tb250aGx5SW5zdGFsbG1lbnRBbW91bnQgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gU3RvcmUgSW5mb3JtYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U3RvcmUgSW5mb3JtYXRpb248L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0b3JlTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0b3JlIE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJzdWJkaXZpc2lvblwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLnN0b3JlRGV0YWlsc1wiIChuZ01vZGVsQ2hhbmdlKT1cImdldFN0YWZmQnlJZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IFN0b3JlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIHN0b3JlRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzdG9yZVwiPnt7c3RvcmUuc3RvcmVOYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdWJkaXZpc2lvblwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkN1c3RvZGlhbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1mb3JtLXNlbGVjdFwiIGlkPVwic3ViZGl2aXNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgQ3VzdG9kaWFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YWZmIG9mIHN0YWZmRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzdGFmZlwiPnt7c3RhZmYucGVyc29uYWxJbmZvLm5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRW50ZXIgWW91ciBBZGRyZXNzIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkVudGVyIFlvdXIgQWRkcmVzczwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhZGRyZXNzXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWRkcmVzcyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYWRkcmVzc1wiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuYWRkcmVzc0xpbmVcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0FERFJFU1MnKVwiIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydBRERSRVNTJ11cIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0ZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0YXRlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1mb3JtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZ2V0Q2l0eUJ5U3RhdGVJZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IFN0YXRlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YXRlIG9mIHN0YXRlRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzdGF0ZVwiPnt7c3RhdGUubmFtZSA/PyBcIi1cIn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY2l0eVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNpdHkgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIlwiPlNlbGVjdCBDaXR5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNpdHkgb2YgY2l0eURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiY2l0eVwiPnt7Y2l0eS5uYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaW5jb2RlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGluY29kZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwicGluY29kZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnBpbkNvZGVcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ1BJTkNPREUnKVwiIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydQSU5DT0RFJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RW50ZXIgTm9taW5lZSBEZXRhaWxzPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5vbWluZWVOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RnVsbCBOYW1lIG9mIE5vbWluZWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cIm5vbWluZWVOYW1lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5ub21pbmVlRGV0YWlscy5ub21pbmVlTmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnTk9NSU5FRV9OQU1FJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnTk9NSU5FRV9OQU1FJ11cIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZWxhdGlvbnNoaXBcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TZWxlY3QgUmVsYXRpb25zaGlwIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInJlbGF0aW9uc2hpcFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm5vbWluZWVEZXRhaWxzLnJlbGF0aW9uU2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgUmVsYXRpb25zaGlwPC9vcHRpb24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiU3BvdXNlXCI+U3BvdXNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDaGlsZFwiPkNoaWxkPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJNb3RoZXJcIj5Nb3RoZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkZhdGhlclwiPkZhdGhlcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiU2libGluZ1wiPlNpYmxpbmc8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5vbWluZWVQaG9uZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk1vYmlsZSBOdW1iZXIgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJub21pbmVlUGhvbmVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5ub21pbmVlRGV0YWlscy5tb2JpbGVcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ05PTUlORUVfTU9CSUxFJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnTk9NSU5FRV9NT0JJTEUnXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5BY2NvdW50IEluZm9ybWF0aW9uPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2NvdW50SG9sZGVyXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWNjb3VudCBIb2xkZXIgTmFtZSA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJhY2NvdW50SG9sZGVyXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYWNjb3VudEhvbGRlck5hbWVcIiAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdBQ0NPVU5UX0hPTERFUl9OQU1FJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnQUNDT1VOVF9IT0xERVJfTkFNRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2NvdW50TnVtYmVyXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWNjb3VudCBOdW1iZXIgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJhY2NvdW50TnVtYmVyXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYWNjb3VudE51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnQUNDT1VOVF9OVU1CRVInKVwiIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydBQ0NPVU5UX05VTUJFUiddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJiYW5rTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkJhbmsgTmFtZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImJhbmtOYW1lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYmFua05hbWVcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0JBTktfTkFNRScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0JBTktfTkFNRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJpZnNjQ29kZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPklGU0MgQ29kZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImlmc2NDb2RlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuaWZzY0NvZGVcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0lGU0NfQ09ERScpXCIgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnSUZTQ19DT0RFJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZ3JpZCBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VibWl0XCIgKGNsaWNrKT1cImNyZWF0ZUVucm9sbG1lbnQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2J1dHRvblN0eWxlXT1cImdldEJ1dHRvblN0eWxlKDApXCJcclxuICAgICAgICAgICAgICAgICAgICBbYnV0dG9uSWRdPVwiZ2V0QnV0dG9uSWQoMClcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCIgW2lkXT1cImRhdGE/LmlkK2dldEJ1dHRvbklkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICBbYnV0dG9uRGF0YV09XCJnZXRCdXR0b25Db250ZW50KDApXCI+U3VibWl0XHJcbiAgICAgICAgICAgICAgICAgICAgRW5yb2xsbWVudDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbWluLXZoLTEwMFwiICpuZ0lmPVwicGFnZSA9PT0gJ1BBWU1FTlQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgc2hhZG93LWxnIGJvcmRlci0wIHBheW1lbnQtY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHRleHQtY2VudGVyIHB5LTNcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImNhcmQtdGl0bGUgbWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNyZWRpdC1jYXJkIG1lLTJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudCBTaW11bGF0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMyBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLWxnIHctMTAwIHBheW1lbnQtYnRuXCIgKGNsaWNrKT1cInNpbXVsYXRlUGF5bWVudCgnc3VjY2VzcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrLWNpcmNsZSBtZS0yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tdGV4dFwiPlN1Y2Nlc3M8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLW92ZXJsYXlcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tbGcgdy0xMDAgcGF5bWVudC1idG5cIiAoY2xpY2spPVwic2ltdWxhdGVQYXltZW50KCdmYWlsdXJlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIG1lLTJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi10ZXh0XCI+RmFpbHVyZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tb3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1Byb2Nlc3NpbmdcIiBjbGFzcz1cInRleHQtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnkgbWUtMlwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPlByb2Nlc3NpbmcgcGF5bWVudC4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZXN1bHRcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRpc21pc3NpYmxlIGZhZGVcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2FsZXJ0LXN1Y2Nlc3MnOiByZXN1bHQudHlwZSA9PT0gJ3N1Y2Nlc3MnLCBcclxuICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyJzogcmVzdWx0LnR5cGUgPT09ICdmYWlsdXJlJyxcclxuICAgICAgICAgICAgICAnc2hvdyc6IHNob3dSZXN1bHRcclxuICAgICAgICAgICAgfVwiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJyZXN1bHQuaWNvbkNsYXNzICsgJyBtZS0yJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJlc3VsdC50aXRsZSB9fTwvc3Ryb25nPiB7eyByZXN1bHQubWVzc2FnZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJnLWxpZ2h0IHRleHQtY2VudGVyIHB5LTNcIj5cclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIENsaWNrIGJ1dHRvbnMgdG8gc2ltdWxhdGUgcGF5bWVudCBzY2VuYXJpb3NcclxuICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICAgICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsbWVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL2Vucm9sbG1lbnQtZm9ybS9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZW5yb2xsbWVudC1mb3JtL2Vucm9sbG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxp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QkF0Qm5DLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLE9BQU87cUJBQ1I7c0tBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBOZ01vZHVsZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi8uLi8uLi9zZWN0aW9ucy9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFbnJvbGxtZW50Rm9ybU1vZGVsLCBFbnJvbGxtZW50Rm9ybVN0eWxlTW9kZWwgfSBmcm9tICcuL2Vucm9sbG1lbnQtZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAc2ltcG8tdWkvZWNvbW1lcmNlL3N0eWxlcy91c2VyLm1vZGFsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tZW5yb2xsbWVudC1mb3JtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBDb3JuZXJEaXJlY3RpdmUsXHJcbiAgICBIb3ZlckRpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSxcclxuICAgIE1hdEljb25cclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEVucm9sbG1lbnRGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xyXG5cclxuICBASW5wdXQoKSBkYXRhPzogRW5yb2xsbWVudEZvcm1Nb2RlbDtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGVsZXRlPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBzdHlsZXM/OiBFbnJvbGxtZW50Rm9ybVN0eWxlTW9kZWw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNoZWNrVXNlckxvZ2dlZEluKCk7XHJcbiAgICB0aGlzLmdldFNjaGVtZXMoKTtcclxuICAgIHRoaXMuZ2V0QWxsU3RvcmVzKCk7XHJcbiAgICB0aGlzLmdldEFsbFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja1VzZXJMb2dnZWRJbigpIHtcclxuICAgIGlmICghdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCkpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSwgeyBxdWVyeVBhcmFtczogeyBzY2hlbWVzOiB0cnVlIH0gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgIHVzZXIgID0gdGhpcy5zdG9yYWdlU2VydmljZT8uZ2V0VXNlcigpXHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm5hbWUgPSB1c2VyPy5jb250YWN0Py5uYW1lXHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1haWxJZCA9IHVzZXI/LmNvbnRhY3Q/LmVtYWlsXHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1vYmlsZU51bWJlciA9IHVzZXI/LmNvbnRhY3Q/Lm1vYmlsZVxyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5wd2NVc2VyQ29kZSA9IHVzZXI/LnB3Y1VzZXJDb2RlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYWdlOiAnRU5ST0xMTUVOVCcgfCAnUEFZTUVOVCcgPSAnRU5ST0xMTUVOVCc7XHJcblxyXG4gIGVucm9sbGVtZW50UGF5bG9hZDogYW55ID0ge1xyXG4gICAgbmFtZTogXCJcIixcclxuICAgIG1haWxJZDogXCJcIixcclxuICAgIG1vYmlsZU51bWJlcjogXCJcIixcclxuICAgIGRhdGVPZkJpcnRoOiBcIlwiLFxyXG4gICAgc2NoZW1lRGV0YWlsczoge1xyXG4gICAgICBzY2hlbWVJZDogXCJcIixcclxuICAgICAgc2NoZW1lTmFtZTogXCJcIixcclxuICAgICAgc2NoZW1lVHlwZTogXCJcIixcclxuICAgICAgcHdjU2NoZW1lQ29kZTogXCJcIlxyXG4gICAgfSxcclxuICAgIHB3Y1VzZXJDb2RlOiBcIlwiLFxyXG4gICAgYWRkcmVzc0RldGFpbHM6IHtcclxuICAgICAgc3RhdGU6IHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH0sXHJcbiAgICAgIGNpdHk6IHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH0sXHJcbiAgICAgIGFkZHJlc3NMaW5lOiBcIlwiLFxyXG4gICAgICBwaW5Db2RlOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGluY29kZScpIHx8IDAsXHJcbiAgICB9LFxyXG4gICAgYmFua0RldGFpbHM6IHtcclxuICAgICAgYmFua05hbWU6IFwiXCIsXHJcbiAgICAgIGFjY291bnROdW1iZXI6IDAsXHJcbiAgICAgIGlmc2NDb2RlOiBcIlwiLFxyXG4gICAgICBhY2NvdW50SG9sZGVyTmFtZTogXCJcIlxyXG4gICAgfSxcclxuICAgIG5vbWluZWVEZXRhaWxzOiB7XHJcbiAgICAgIG5vbWluZWVOYW1lOiBcIlwiLFxyXG4gICAgICBtb2JpbGU6IFwiXCIsXHJcbiAgICAgIHJlbGF0aW9uU2hpcDogXCJGYXRoZXJcIixcclxuICAgIH0sXHJcbiAgICBjdXN0b2RpYW46IHtcclxuICAgICAgc3RhZmZJZDogXCJcIixcclxuICAgICAgc3RhZmZOYW1lOiBcIlwiLFxyXG4gICAgICBtb2JpbGVOdW1iZXI6IFwiXCIsXHJcbiAgICAgIGVtYWlsOiBcIlwiLFxyXG4gICAgICBzdGFmZkNvZGU6IFwiXCIsXHJcbiAgICAgIHByb2ZpbGVJbWdVcmw6IFwiXCJcclxuICAgIH0sXHJcbiAgICBzdG9yZURldGFpbHM6IHt9LFxyXG4gICAgZW5yb2xsZWRHcm91cDoge30sXHJcbiAgICBtb250aGx5SW5zdGFsbG1lbnRBbW91bnQ6IDAsXHJcbiAgICBwd2NTdG9yZUNvZGU6IFwiXCIsXHJcbiAgICBzdWJzY3JpcHRpb25DaGFyZ2VEYXRlOiBuZXcgRGF0ZSgpLmdldERhdGUoKVxyXG4gIH1cclxuXHJcbiAgc2NoZW1lc0RhdGE6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkU2NoZW1lOiBhbnk7XHJcbiAgZ2V0U2NoZW1lcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsU2NoZW1lKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNjaGVtZXNEYXRhID0gcmVzPy5kYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2NoZW1lID0gdGhpcy5zY2hlbWVzRGF0YVswXTtcclxuICAgICAgdGhpcy5zZXRNb250aGx5SW5zdGFsbG1lbnRBbW91bnQoKTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNjaGVtZXM6IFwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHN0b3JlRGF0YTogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZTogYW55O1xyXG4gIGdldEFsbFN0b3JlcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsU3RvcmVzT3JyYSgwLCAxMDAwMCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlRGF0YSA9IHJlcz8uZGF0YT8uZGF0YSB8fCBbXTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuc3RvcmVEZXRhaWxzID0gdGhpcy5zdG9yZURhdGFbMF07XHJcbiAgICAgIHRoaXMuZ2V0U3RhZmZCeUlkKCk7XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzdG9yZXM6IFwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHN0YWZmRGF0YTogYW55ID0gW107XHJcbiAgZ2V0U3RhZmZCeUlkKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRzdGFmZkJ5U3RvcmVJZCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5zdG9yZURldGFpbHMuc3RvcmVJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0YWZmRGF0YSA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuID0gdGhpcy5zdGFmZkRhdGFbMF0gfHwge307XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzdGFmZjogXCIsIGVycm9yKTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIHN0YXRlRGF0YTogYW55ID0gW107XHJcbiAgZ2V0QWxsU3RhdGUoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFsbFN0YXRlKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0YXRlRGF0YSA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGUgPSB0aGlzLnN0YXRlRGF0YVswXSB8fCB7fTtcclxuICAgICAgdGhpcy5nZXRDaXR5QnlTdGF0ZUlkKCk7XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzdGF0ZXM6IFwiLCBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBjaXR5RGF0YTogYW55ID0gW107XHJcbiAgZ2V0Q2l0eUJ5U3RhdGVJZCgpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0Q2l0eUJ5U3RhdGVCeXBhZ2luYXRlZCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZS5pZCwgMCwgMTAwMDApLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jaXR5RGF0YSA9IHJlcz8uZGF0YS5kYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5ID0gdGhpcy5jaXR5RGF0YVswXSB8fCB7fTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIENpdGllczogXCIsIGVycm9yKTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIHNldE1vbnRobHlJbnN0YWxsbWVudEFtb3VudCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2NoZW1lLnNjaGVtZVR5cGUgPT0gJ0lORElWSURVQUwnICYmIHRoaXMuc2VsZWN0ZWRTY2hlbWUubWluSW5zdGFsbG1lbnRBbW91bnQpIHtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9udGhseUluc3RhbGxtZW50QW1vdW50ID0gdGhpcy5zZWxlY3RlZFNjaGVtZS5taW5JbnN0YWxsbWVudEFtb3VudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0U3RvcmVTbGFicygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcmVTbGFiczogYW55ID0gW107XHJcbiAgZ2V0U3RvcmVTbGFicygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0U3RvcmVCeVNsYWIoeyBzdG9yZXNMaXN0OiB0aGlzLnNlbGVjdGVkU2NoZW1lLnNjaGVtZVNsYWJzWzBdLnNsYWJTdG9yZXMgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlU2xhYnMgPSByZXM/LmRhdGEgfHwgW107XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzdG9yZSBzbGFiczogXCIsIGVycm9yKTtcclxuICAgICAgfSlcclxuICB9XHJcbiAgdmFsaWRhdG9yOiBib29sZWFuID0gZmFsc2VcclxuICBjcmVhdGVFbnJvbGxtZW50KCkge1xyXG5cclxuICAgIGZvciAobGV0IGVsZSBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbGlkT2JqZWN0KSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlcihlbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMudmFsaWRPYmplY3QpLnNvbWUodmFsdWUgPT4gIXZhbHVlKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRvciA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5wd2NTdG9yZUNvZGUgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5zdG9yZURldGFpbHM/LnB3Y1N0b3JlQ29kZSB8fCB0aGlzLnNlbGVjdGVkU2NoZW1lPy5wd2NTdG9yZUNvZGU7XHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuc2NoZW1lRGV0YWlscyA9IFsnc2NoZW1lSWQnLCAnc2NoZW1lTmFtZScsICdzY2hlbWVUeXBlJywgJ3B3Y1NjaGVtZUNvZGUnXS5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNjaGVtZVtrZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuc2VsZWN0ZWRTY2hlbWVba2V5XTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoa2V5ID09ICdwd2NTY2hlbWVDb2RlJykge1xyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5zZWxlY3RlZFNjaGVtZT8ucHdjSW5kaXZpZHVhbFNjaGVtZUNvZGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNjaGVtZS5zY2hlbWVUeXBlID09ICdHUk9VUCcpIHtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zY2hlbWVJZCA9IHRoaXMuc2VsZWN0ZWRTY2hlbWU/LnNjaGVtZUlkO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnNjaGVtZU5hbWUgPSB0aGlzLnNlbGVjdGVkU2NoZW1lPy5zY2hlbWVOYW1lO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnN0b3JlSWQgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uc3RvcmVEZXRhaWxzPy5zdG9yZUlkO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnN0b3JlTmFtZSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5zdG9yZURldGFpbHM/LnN0b3JlTmFtZTtcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9udGhseUluc3RhbGxtZW50QW1vdW50ID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmVucm9sbGVkR3JvdXA/LnNjaGVtZVNsYWI/Lm1vbnRobHlJbnN0YWxsbWVudEFtb3VudDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGUgPSBbJ2lkJywgJ25hbWUnXS5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGU/LltrZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlW2tleV07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxuXHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eSA9IFsnaWQnLCAnbmFtZSddLnJlZHVjZSgoYWNjOiBhbnksIGtleTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5Py5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5W2tleV07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxuXHJcblxyXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuID0gW1xyXG4gICAgICAnc3RhZmZJZCcsICdzdGFmZk5hbWUnLCAnbW9iaWxlTnVtYmVyJywgJ2VtYWlsJywgJ3N0YWZmQ29kZScsICdwcm9maWxlSW1nVXJsJ1xyXG4gICAgXS5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW5ba2V5XTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoa2V5ID09ICdzdGFmZk5hbWUnKVxyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5wZXJzb25hbEluZm8/Lm5hbWVcclxuICAgICAgaWYgKGtleSA9PSAnbW9iaWxlTnVtYmVyJylcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8uY29udGFjdERldGFpbHM/Lm1vYmlsZVxyXG4gICAgICBpZiAoa2V5ID09ICdlbWFpbCcpXHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4/LmNvbnRhY3REZXRhaWxzPy5lbWFpbFxyXG4gICAgICBpZiAoa2V5ID09ICdwcm9maWxlSW1nVXJsJylcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8ucGVyc29uYWxJbmZvPy5wcm9maWxlSW1hZ2VcclxuICAgICAgaWYgKGtleSA9PSAnc3RhZmZDb2RlJylcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8uc3RhZmZXb3JrSW5mbz8uc3RhZmZDb2RlO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwge30pO1xyXG4gICAgdGhpcy5wYWdlID0gJ1BBWU1FTlQnO1xyXG4gIH1cclxuXHJcbiAgc3VjY2VzcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuY3JlYXRlRW5yb2xsbWVudFNjaGVtZSh0aGlzLmVucm9sbGVtZW50UGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcm9maWxlJ10pXHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2ltdWxhdGVQYXltZW50KCdmYWlsdXJlJyk7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHJlc3VsdDogYW55XHJcbiAgc2hvd1Jlc3VsdCA9IHRydWU7XHJcbiAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG4gIHNpbXVsYXRlUGF5bWVudCh0eXBlOiAnc3VjY2VzcycgfCAnZmFpbHVyZScpIHtcclxuICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd1Jlc3VsdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXN1bHQgPSB7fVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHQgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXHJcbiAgICAgICAgICB0aXRsZTogJ1BheW1lbnQgU3VjY2Vzc2Z1bCEnLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ1lvdXIgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseS4nLFxyXG4gICAgICAgICAgaWNvbkNsYXNzOiAnZmFzIGZhLWNoZWNrLWNpcmNsZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc3VjY2VzcygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzdWx0ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ2ZhaWx1cmUnLFxyXG4gICAgICAgICAgdGl0bGU6ICdQYXltZW50IEZhaWxlZCEnLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHdhcyBhbiBlcnJvciBwcm9jZXNzaW5nIHlvdXIgcGF5bWVudC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxyXG4gICAgICAgICAgaWNvbkNsYXNzOiAnZmFzIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgfSwgMTAwKTtcclxuICAgIH0sIDIwMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uSWQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uYWN0aW9uPy5idXR0b25zW2luZGV4XT8uaWQgPz8gXCJcIjtcclxuICB9XHJcbiAgZ2V0QnV0dG9uU3R5bGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uYWN0aW9uPy5idXR0b25zW2luZGV4XT8uc3R5bGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29udGVudChpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5hY3Rpb24/LmJ1dHRvbnNbaW5kZXhdPy5jb250ZW50O1xyXG4gIH1cclxuXHJcblxyXG4gIGRlYm91bmNlVGltZXI6IGFueTtcclxuICB2YWxpZGF0ZUZvcm0oZmllbGRUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVyKGZpZWxkVHlwZSlcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG4gIHZhbGlkT2JqZWN0OiBhbnkgPSB7XHJcbiAgICBOQU1FOiB0cnVlLFxyXG4gICAgRU1BSUw6IHRydWUsXHJcbiAgICBNT0JJTEU6IHRydWUsXHJcbiAgICBET0I6IHRydWUsXHJcbiAgICBTQ0hFTUU6IHRydWUsXHJcbiAgICBNT05USExZX0FNT1VOVDogdHJ1ZSxcclxuICAgIFNUT1JFOiB0cnVlLFxyXG4gICAgQUREUkVTUzogdHJ1ZSxcclxuICAgIFNUQVRFOiB0cnVlLFxyXG4gICAgQ0lUWTogdHJ1ZSxcclxuICAgIFBJTkNPREU6IHRydWUsXHJcbiAgICBOT01JTkVFX05BTUU6IHRydWUsXHJcbiAgICBOT01JTkVFX01PQklMRTogdHJ1ZSxcclxuICAgIE5PTUlORUVfUkVMQVRJT05TSElQOiB0cnVlLFxyXG4gICAgQkFOS19OQU1FOiB0cnVlLFxyXG4gICAgQUNDT1VOVF9OVU1CRVI6IHRydWUsXHJcbiAgICBJRlNDX0NPREU6IHRydWUsXHJcbiAgICBBQ0NPVU5UX0hPTERFUl9OQU1FOiB0cnVlLFxyXG4gIH1cclxuICB2YWxpZGF0ZXIoZmllbGRUeXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ05BTUUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OQU1FID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubmFtZS50cmltKCkubGVuZ3RoID4gMDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdFTUFJTCc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkVNQUlMID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8udGVzdCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5tYWlsSWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ01PQklMRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk1PQklMRSA9IC9eXFxkezEwfSQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9iaWxlTnVtYmVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdET0InOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5ET0IgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmRhdGVPZkJpcnRoO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1NDSEVNRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LlNDSEVNRSA9ICEhdGhpcy5zZWxlY3RlZFNjaGVtZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdNT05USExZX0FNT1VOVCc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk1PTlRITFlfQU1PVU5UID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/Lm1vbnRobHlJbnN0YWxsbWVudEFtb3VudCA+IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnU1RPUkUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5TVE9SRSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LnN0b3JlRGV0YWlscz8uc3RvcmVJZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBRERSRVNTJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuQUREUkVTUyA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmFkZHJlc3NEZXRhaWxzPy5hZGRyZXNzTGluZS50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnU1RBVEUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5TVEFURSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmFkZHJlc3NEZXRhaWxzPy5zdGF0ZT8uaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQ0lUWSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkNJVFkgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5hZGRyZXNzRGV0YWlscz8uY2l0eT8uaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnUElOQ09ERSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LlBJTkNPREUgPSAvXlxcZHs2fSQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmFkZHJlc3NEZXRhaWxzPy5waW5Db2RlPy50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdOT01JTkVFX05BTUUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OT01JTkVFX05BTUUgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8ubm9taW5lZURldGFpbHM/Lm5vbWluZWVOYW1lPy50cmltKCk/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnTk9NSU5FRV9NT0JJTEUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OT01JTkVFX01PQklMRSA9IC9eXFxkezEwfSQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/Lm5vbWluZWVEZXRhaWxzPy5tb2JpbGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ05PTUlORUVfUkVMQVRJT05TSElQJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTk9NSU5FRV9SRUxBVElPTlNISVAgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5ub21pbmVlRGV0YWlscz8ucmVsYXRpb25TaGlwPy50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQkFOS19OQU1FJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuQkFOS19OQU1FID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYmFua0RldGFpbHM/LmJhbmtOYW1lLnRyaW0oKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBQ0NPVU5UX05VTUJFUic6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkFDQ09VTlRfTlVNQkVSID0gL15cXGQrJC8udGVzdCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYmFua0RldGFpbHM/LmFjY291bnROdW1iZXI/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0lGU0NfQ09ERSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LklGU0NfQ09ERSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmJhbmtEZXRhaWxzPy5pZnNjQ29kZT8udHJpbSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FDQ09VTlRfSE9MREVSX05BTUUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5BQ0NPVU5UX0hPTERFUl9OQU1FID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmJhbmtEZXRhaWxzPy5hY2NvdW50SG9sZGVyTmFtZT8udHJpbSgpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidG90YWwtY29udGFpbmVyIHBvc2l0aW9uLXJlbGF0aXZlXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgcHktNVwiICpuZ0lmPVwicGFnZSA9PT0gJ0VOUk9MTE1FTlQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+Q3VzdG9tZXIgSW5mb3JtYXRpb248L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZnVsbE5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5GdWxsIE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImZ1bGxOYW1lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5uYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdOQU1FJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydOQU1FJ11cIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RW1haWwgQWRkcmVzcyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImVtYWlsXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5tYWlsSWRcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0VNQUlMJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydFTUFJTCddXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibW9iaWxlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TW9iaWxlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZWxcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJtb2JpbGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5tb2JpbGVOdW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ01PQklMRScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ01PQklMRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkYXRlT2ZCaXJ0aFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRhdGUgb2YgQmlydGggPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJkYXRlT2ZCaXJ0aFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmRhdGVPZkJpcnRoXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdET0InKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydET0InXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBTY2hlbWUgSW5mb3JtYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U2NoZW1lIEluZm9ybWF0aW9uPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzY2hlbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TY2hlbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJzY2hlbWVcIiByZXF1aXJlZCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2NoZW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0TW9udGhseUluc3RhbGxtZW50QW1vdW50KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgU2NoZW1lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNjaGVtZSBvZiBzY2hlbWVzRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzY2hlbWVcIj57e3NjaGVtZS5zY2hlbWVOYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJtb250aGx5QW1vdW50XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TW9udGhseSBBbW91bnQgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cIm1vbnRobHlBbW91bnRcIiByZXF1aXJlZCBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkU2NoZW1lPy5zY2hlbWVUeXBlID09ICdJTkRJVklEVUFMJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm1vbnRobHlJbnN0YWxsbWVudEFtb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInN1YmRpdmlzaW9uXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFNjaGVtZT8uc2NoZW1lVHlwZSA9PSAnR1JPVVAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zY2hlbWVTbGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IEFtb3VudCBQbGFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNsYWIgb2Ygc2VsZWN0ZWRTY2hlbWUuc2NoZW1lU2xhYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwic2xhYlwiPnt7c2xhYi5tb250aGx5SW5zdGFsbG1lbnRBbW91bnQgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gU3RvcmUgSW5mb3JtYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U3RvcmUgSW5mb3JtYXRpb248L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0b3JlTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0b3JlIE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJzdWJkaXZpc2lvblwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLnN0b3JlRGV0YWlsc1wiIChuZ01vZGVsQ2hhbmdlKT1cImdldFN0YWZmQnlJZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IFN0b3JlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIHN0b3JlRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzdG9yZVwiPnt7c3RvcmUuc3RvcmVOYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdWJkaXZpc2lvblwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkN1c3RvZGlhbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1mb3JtLXNlbGVjdFwiIGlkPVwic3ViZGl2aXNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgQ3VzdG9kaWFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YWZmIG9mIHN0YWZmRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzdGFmZlwiPnt7c3RhZmYucGVyc29uYWxJbmZvLm5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRW50ZXIgWW91ciBBZGRyZXNzIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkVudGVyIFlvdXIgQWRkcmVzczwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhZGRyZXNzXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWRkcmVzcyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYWRkcmVzc1wiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuYWRkcmVzc0xpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnQUREUkVTUycpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0FERFJFU1MnXVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0YXRlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RhdGUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJnZXRDaXR5QnlTdGF0ZUlkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgU3RhdGU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RhdGUgb2Ygc3RhdGVEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cInN0YXRlXCI+e3tzdGF0ZS5uYW1lID8/IFwiLVwifX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjaXR5XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q2l0eSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IENpdHk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2l0eSBvZiBjaXR5RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJjaXR5XCI+e3tjaXR5Lm5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBpbmNvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QaW5jb2RlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJwaW5jb2RlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMucGluQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnUElOQ09ERScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ1BJTkNPREUnXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5FbnRlciBOb21pbmVlIERldGFpbHM8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibm9taW5lZU5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5GdWxsIE5hbWUgb2YgTm9taW5lZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwibm9taW5lZU5hbWVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm5vbWluZWVEZXRhaWxzLm5vbWluZWVOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ05PTUlORUVfTkFNRScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ05PTUlORUVfTkFNRSddXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVsYXRpb25zaGlwXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VsZWN0IFJlbGF0aW9uc2hpcCA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJyZWxhdGlvbnNoaXBcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5ub21pbmVlRGV0YWlscy5yZWxhdGlvblNoaXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IFJlbGF0aW9uc2hpcDwvb3B0aW9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlNwb3VzZVwiPlNwb3VzZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ2hpbGRcIj5DaGlsZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTW90aGVyXCI+TW90aGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJGYXRoZXJcIj5GYXRoZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlNpYmxpbmdcIj5TaWJsaW5nPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJub21pbmVlUGhvbmVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Nb2JpbGUgTnVtYmVyIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwibm9taW5lZVBob25lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubm9taW5lZURldGFpbHMubW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdOT01JTkVFX01PQklMRScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ05PTUlORUVfTU9CSUxFJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+QWNjb3VudCBJbmZvcm1hdGlvbjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYWNjb3VudEhvbGRlclwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFjY291bnQgSG9sZGVyIE5hbWUgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYWNjb3VudEhvbGRlclwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmJhbmtEZXRhaWxzLmFjY291bnRIb2xkZXJOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdBQ0NPVU5UX0hPTERFUl9OQU1FJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnQUNDT1VOVF9IT0xERVJfTkFNRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2NvdW50TnVtYmVyXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWNjb3VudCBOdW1iZXIgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJhY2NvdW50TnVtYmVyXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYWNjb3VudE51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnQUNDT1VOVF9OVU1CRVInKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydBQ0NPVU5UX05VTUJFUiddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJiYW5rTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkJhbmsgTmFtZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImJhbmtOYW1lXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYmFua05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0JBTktfTkFNRScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0JBTktfTkFNRSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJpZnNjQ29kZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPklGU0MgQ29kZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImlmc2NDb2RlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuaWZzY0NvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0lGU0NfQ09ERScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0lGU0NfQ09ERSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWdyaWQgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Ym1pdFwiIChjbGljayk9XCJjcmVhdGVFbnJvbGxtZW50KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtidXR0b25TdHlsZV09XCJnZXRCdXR0b25TdHlsZSgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2J1dHRvbklkXT1cImdldEJ1dHRvbklkKDApXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiIFtpZF09XCJkYXRhPy5pZCtnZXRCdXR0b25JZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2J1dHRvbkRhdGFdPVwiZ2V0QnV0dG9uQ29udGVudCgwKVwiPlN1Ym1pdFxyXG4gICAgICAgICAgICAgICAgICAgIEVucm9sbG1lbnQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0b3JcIiBbY2xhc3MuZXJyb3ItY29sb3JdPVwidmFsaWRhdG9yXCI+RmlsbCBhbGwgbWFuZGF0b3J5IGZpZWxkcyB0byBwcm9jZWVkKjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBBZGQgdGhpcyBibG9jayBpbiB5b3VyIEFuZ3VsYXIgcGF5bWVudCBzdGVwIChwYWdlID09PSAnUEFZTUVOVCcpIC0tPlxyXG4gICAgPCEtLSBwYXltZW50LXNpbXVsYXRpb24uY29tcG9uZW50Lmh0bWwgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIG1pbi12aC0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJnLWxpZ2h0XCJcclxuICAgICAgICAqbmdJZj1cInBhZ2UgPT09ICdQQVlNRU5UJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LWNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LWhlYWRlciBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInBheW1lbnQtdGl0bGVcIj5QYXltZW50IE1ldGhvZDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zdWNjZXNzIHJvdW5kZWQtcGlsbCBweC0zIHB5LTJcIj5DcmVkaXQgQ2FyZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ3JlZGl0IENhcmQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcmVkaXQtY2FyZCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbm5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXNoaW5lXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aXNhLWxvZ29cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc2EtdGV4dFwiPlZJU0E8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZGhvbGRlci1uYW1lIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cnF1b2lzZWNveW90ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1kb3RzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiAqbmdGb3I9XCJsZXQgZG90IG9mIFsxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMl1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1udW1iZXJcIj4xMTExPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gT1RQIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdHAtc2VjdGlvbiBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm90cC1sYWJlbFwiPkVudGVyIE9UUCBzZW50IHRvIHlvdXIgeHh4IHh4eCA0ODM5PC9wPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgb3RwLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBPVFBcIj5cclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgbXQtMiBkLWJsb2NrXCI+SGludDogT1RQIGlzIDExMTAwMDwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBTaW11bGF0aW9uIEJ1dHRvbnMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tbGcgdy0xMDAgc2ltdWxhdGlvbi1idG5cIiAoY2xpY2spPVwic2ltdWxhdGVQYXltZW50KCdmYWlsdXJlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNpbXVsYXRlIGZhaWx1cmVcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyBidG4tbGcgdy0xMDAgc2ltdWxhdGlvbi1idG5cIiAoY2xpY2spPVwic2ltdWxhdGVQYXltZW50KCdzdWNjZXNzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNpbXVsYXRlIHN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUHJvY2Vzc2luZyBTdGF0ZSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUHJvY2Vzc2luZ1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnkgbWUtM1wiIHJvbGU9XCJzdGF0dXNcIiBzdHlsZT1cIndpZHRoOiAxLjVyZW07IGhlaWdodDogMS41cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj5Qcm9jZXNzaW5nIHBheW1lbnQuLi48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBSZXN1bHQgQWxlcnQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZXN1bHQgJiYgc2hvd1Jlc3VsdFwiIGNsYXNzPVwiYWxlcnQgdGV4dC1jZW50ZXIgcmVzdWx0LWFsZXJ0XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgJ2FsZXJ0LXN1Y2Nlc3MnOiByZXN1bHQudHlwZSA9PT0gJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlcic6IHJlc3VsdC50eXBlID09PSAnZmFpbHVyZSdcclxuICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJlc3VsdC50aXRsZSB9fTwvc3Ryb25nPiB7eyByZXN1bHQubWVzc2FnZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRm9vdGVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIENsaWNrIGJ1dHRvbnMgdG8gc2ltdWxhdGUgcGF5bWVudCBzY2VuYXJpb3NcclxuICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgICAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICAgICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==