simpo-component-library 3.6.989 → 3.6.991
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.
- package/esm2022/lib/directive/button-editor.directive.mjs +1 -1
- package/esm2022/lib/directive/image-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/image-editor.directive.mjs +1 -1
- package/esm2022/lib/directive/image-position.directive.mjs +1 -1
- package/esm2022/lib/directive/merge-header.directive.mjs +1 -1
- package/esm2022/lib/directive/spacing-around.directive.mjs +1 -1
- package/esm2022/lib/directive/video-directive.directive.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/address/address.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/brands-with-image-background-columns/brands-with-image-background-columns.component.mjs +35 -0
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/categories-with-image-background-columns/categories-with-image-background-columns.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-brand/featured-brand.component.mjs +168 -0
- package/esm2022/lib/ecommerce/sections/featured-brand/featured-brand.modal.mjs +2 -0
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +7 -8
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/schemes/schemes.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +34 -10
- package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
- package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
- package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -3
- package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +1 -1
- package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +1 -1
- package/esm2022/lib/elements/editor-service.service.mjs +1 -1
- package/esm2022/lib/elements/link-editor/link-editor.component.mjs +3 -3
- package/esm2022/lib/elements/media-selector/media-selector.component.mjs +3 -3
- package/esm2022/lib/elements/pricing-s1/pricing-s1.component.mjs +3 -3
- package/esm2022/lib/elements/text-editor/text-editor.component.mjs +9 -9
- package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +1 -1
- package/esm2022/lib/pipes/gender.pipe.mjs +1 -1
- package/esm2022/lib/sections/BaseSection.mjs +1 -1
- package/esm2022/lib/sections/appointment-form/appointment-booking/appointment-booking/appointment-booking.component.mjs +3 -3
- package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +3 -3
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +3 -3
- package/esm2022/lib/sections/brand-story-section/brand-story-section.component.mjs +3 -3
- package/esm2022/lib/sections/brand-story-section/brand-story-section.modal.mjs +1 -1
- package/esm2022/lib/sections/button-grid-section/button-grid-section.component.mjs +3 -3
- package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +3 -3
- package/esm2022/lib/sections/condensed-and-gradient/condensed-and-gradient.component.mjs +3 -3
- package/esm2022/lib/sections/countdown-banner/countdown-banner.component.model.mjs +1 -1
- package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.component.mjs +3 -3
- package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.modal.mjs +1 -1
- package/esm2022/lib/sections/faq-section/faq-section.component.mjs +3 -3
- package/esm2022/lib/sections/feature-experience-section/feature-experience-section.component.mjs +3 -3
- package/esm2022/lib/sections/feature-experience-section/feature-experience-section.modal.mjs +1 -1
- package/esm2022/lib/sections/features-section/features-section.component.mjs +3 -3
- package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
- package/esm2022/lib/sections/four-features-centered-image/four-features-centered-image.component.mjs +3 -3
- package/esm2022/lib/sections/four-features-centered-image/four-features-centered-image.modal.mjs +1 -1
- package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
- package/esm2022/lib/sections/image-background/image-background/image-background.component.mjs +3 -3
- package/esm2022/lib/sections/image-background/image-background/image-background.component.model.mjs +1 -1
- package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-grid-hotspot/image-grid-hotspot.component.mjs +3 -3
- package/esm2022/lib/sections/image-grid-hotspot/image-grid-hotspot.model.mjs +1 -1
- package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
- package/esm2022/lib/sections/image-section/image-section.component.mjs +3 -3
- package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
- package/esm2022/lib/sections/new-services/new-services.component.mjs +3 -3
- package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +3 -3
- package/esm2022/lib/sections/news-letter-component/news-letter-component.component.mjs +3 -3
- package/esm2022/lib/sections/overlapping-image/overlapping-image.component.mjs +3 -3
- package/esm2022/lib/sections/overlapping-image/overlapping-image.component.modal.mjs +1 -1
- package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +3 -3
- package/esm2022/lib/sections/process-modern/process-modern.component.mjs +3 -3
- package/esm2022/lib/sections/process-section/process-section.component.mjs +3 -3
- package/esm2022/lib/sections/product-info-section/product-info-section.component.mjs +3 -3
- package/esm2022/lib/sections/product-info-section/product-info-section.component.modal.mjs +1 -1
- package/esm2022/lib/sections/scheme-detail/scheme-detail.component.mjs +3 -3
- package/esm2022/lib/sections/service-section/service-section.component.mjs +3 -3
- package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
- package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
- package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-masonry/testimonial-masonry.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-masonry/testimonial-masonry.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-slider/testimonial-slider.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-slider/testimonial-slider.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +3 -3
- package/esm2022/lib/sections/video-carousel-section/video-carousel-section.component.mjs +3 -3
- package/esm2022/lib/sections/video-carousel-section/video-carousel.model.mjs +1 -1
- package/esm2022/lib/sections/video-grid-section/video-grid-section.model.mjs +1 -1
- package/esm2022/lib/sections/video-showcase/video-showcase.component.mjs +3 -3
- package/esm2022/lib/services/events.service.mjs +2 -1
- package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
- package/esm2022/lib/services/storage.service.mjs +5 -9
- package/esm2022/lib/styles/gradient-extension.mjs +1 -1
- package/esm2022/lib/styles/style.model.mjs +1 -1
- package/esm2022/lib/styles/text-size.extension.mjs +1 -1
- package/esm2022/lib/styles/types.mjs +1 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/simpo-component-library.mjs +325 -135
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/ecommerce/sections/brands-with-image-background-columns/brands-with-image-background-columns.component.d.ts +17 -0
- package/lib/ecommerce/sections/featured-brand/featured-brand.component.d.ts +42 -0
- package/lib/ecommerce/sections/featured-brand/featured-brand.modal.d.ts +25 -0
- package/lib/services/events.service.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/simpo-component-library-3.6.991.tgz +0 -0
- package/simpo-component-library-3.6.989.tgz +0 -0
package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs
CHANGED
|
@@ -844,7 +844,7 @@ export class AuthenticationRequiredComponent extends BaseSection {
|
|
|
844
844
|
this.router.navigate(['']);
|
|
845
845
|
}
|
|
846
846
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthenticationRequiredComponent, deps: [{ token: i1.RestService }, { token: i2.Router }, { token: i3.MessageService }, { token: i4.StorageServiceService }, { token: i5.MatDialog }, { token: i2.ActivatedRoute }, { token: i0.ElementRef }, { token: i6.AnalyticsService }, { token: i5.MatDialogRef, optional: true }, { token: i7.MatBottomSheetRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
847
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthenticationRequiredComponent, isStandalone: true, selector: "simpo-authentication-required", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], viewQueries: [{ propertyName: "inputs", predicate: ["otpInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div [spacingAround]=\"stylesLayout\">\r\n <div class=\"login_card d-flex align-items-center justify-content-center flex-column\"\r\n [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"area w-100\">\r\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n </ul>\r\n </div>\r\n\r\n <!-- ===== AUTH CARD ===== -->\r\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [class.single-pane]=\"!data?.content?.image?.showImage\"\r\n [simpoCorner]=\"styles?.corners\">\r\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"auth-card\" [class.single-pane]=\"!data?.content?.image?.showImage\" [id]=\"data?.id\"\r\n [simpoPositionLayoutDirective]=\"styles?.positionLayout\">\r\n <div class=\"auth-image\" *ngIf=\"data?.content?.image?.showImage\">\r\n <img loading=\"lazy\" [src]=\"data?.content?.image?.url\" [attr.alt]=\"data?.content?.image?.altText || ''\"\r\n class=\"auth-hero-image\" [simpoImageDirective]=\"styles?.image\" [appImageEditor]=\"edit ?? false\"\r\n [imageData]=\"data?.content?.image\" [sectionId]=\"data?.id\"\r\n [class]=\"data?.id+(data?.content?.image?.id || '')\" [id]=\"data?.id\"\r\n [simpoObjectPosition]=\"data?.content?.image?.position\">\r\n </div>\r\n <div class=\"auth-form\">\r\n <ng-container [ngSwitch]=\"authScreen\">\r\n <ng-container *ngSwitchCase=\"'PHONE'\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"icon d-flex justify-content-center align-items-center cursor-pointer\"\r\n (click)=\"backToHome()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </div>\r\n <div\r\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\r\n </div>\r\n </div>\r\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\r\n\r\n <div class=\"login-input-section mt-4\">\r\n <p class=\"text-center mb-3\" style=\"font-size:14px; color:#555;\">Unlock coupons, profile and much\r\n more\r\n </p>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-email-phone-input\">Email / Mobile Number</label>\r\n <input id=\"auth-email-phone-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\r\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\r\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\" (keyup.enter)=\"sendOTP()\" />\r\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter a valid email or\r\n 10-digit\r\n mobile number*</span>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[2]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[2]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[2]?.id ?? ''\"\r\n (click)=\"sendOTP()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content?.label\r\n :\r\n 'SEND\r\n OTP' }}\r\n </button>\r\n\r\n <div class=\"mt-3 text-center\">\r\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\r\n (click)=\"authScreen = 'PASSWORD'\">\r\n Login with Password\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'OTP'\">\r\n <div\r\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\r\n </div>\r\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\r\n\r\n <div class=\"login-input-section mt-4\">\r\n <p class=\"text-center mb-3 clr-black\" style=\"font-size:14px;\">\r\n Enter 6-digit OTP sent to {{emailOrNumber}}\r\n </p>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between otp_input gap-1 mb-3\">\r\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\r\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\r\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\r\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center mb-3\">\r\n <span *ngIf=\"resendCountdown > 0\" class=\"clr-black fs-13\"\r\n style=\"font-weight:700; letter-spacing:0.04em;\">\r\n RESEND IN {{formatCountdown(resendCountdown)}}\r\n </span>\r\n <span *ngIf=\"resendCountdown === 0\" class=\"cursor-pointer clr-black fs-13\"\r\n style=\"font-weight:700; letter-spacing:0.04em; text-decoration:underline;\"\r\n (click)=\"resendOTPNew()\">\r\n RESEND OTP\r\n </span>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[1]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[1]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[1]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[1]?.id ?? ''\"\r\n (click)=\"verifyOTPNew()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content?.label\r\n :\r\n 'VERIFY OTP' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'REGISTER'\">\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">REGISTER</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"auth-fullname-input\">Full Name</label>\r\n <input id=\"auth-fullname-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\"\r\n placeholder=\"Jane Doe\">\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-phone-input\">Phone Number</label>\r\n <div class=\"d-flex align-items-center w-100 password-input-container\">\r\n <span class=\"clr-black\"\r\n style=\"font-size:14px; font-weight:500; padding: 0 8px 0 12px; white-space:nowrap;\">+91\r\n |</span>\r\n <input id=\"auth-reg-phone-input\" type=\"tel\" class=\"b-none clr-black w-90\"\r\n [(ngModel)]=\"phoneNumber\" placeholder=\"9876543210\" maxlength=\"10\" inputmode=\"numeric\"\r\n style=\"outline:none; font-size:14px;\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-email-input\">Email</label>\r\n <input id=\"auth-email-input\" type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\"\r\n placeholder=\"janedoe@gmail.com\" (ngModelChange)=\"onEmailChange()\"\r\n [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-password-input\">Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-reg-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\">\r\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\r\n (click)=\"passwordHidden = !passwordHidden\">\r\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-conf-password-input\">Confirm Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-reg-conf-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"confPassword\" placeholder=\"Confirm Password\">\r\n </div>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\r\n (click)=\"registerUser()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\r\n :\r\n 'CONTINUE' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'PASSWORD'\">\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">LOGIN</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"auth-pwd-email-input\">Email / Mobile Number</label>\r\n <input id=\"auth-pwd-email-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\r\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\r\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter valid email or\r\n 10-digit\r\n mobile number*</span>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-login-password-input\">Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-login-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\"\r\n (keyup.enter)=\"loginWithPassword()\">\r\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\r\n (click)=\"passwordHidden = !passwordHidden\">\r\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\r\n (click)=\"loginWithPassword()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\r\n :\r\n 'LOGIN' }}\r\n </button>\r\n\r\n <div class=\"mt-3 text-center\">\r\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\r\n (click)=\"authScreen = 'PHONE'\">\r\n Login with OTP\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\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 <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\r\n</section>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:min(860px,92vw);margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.main-panel.single-pane{width:450px}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0;position:relative;transition:all .4s ease;margin:unset!important;overflow:hidden}.auth-card{display:flex;align-items:stretch;min-height:420px}.auth-card.single-pane{min-height:unset}.auth-image{flex:0 0 48%;background:#f2f2f2}.auth-hero-image{width:100%;height:100%;display:block;object-fit:cover}.auth-form{flex:1;display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:1.5rem}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:radial-gradient(circle at 30% 30%,rgba(var(--accent-rgb, 102, 126, 234),.22),rgba(var(--accent-rgb, 102, 126, 234),.06));box-shadow:0 0 20px 4px rgba(var(--accent-rgb, 102, 126, 234),.15),inset 0 0 12px #ffffff1f;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:50%;border:1px solid rgba(var(--accent-rgb, 102, 126, 234),.18);animation:floatUp 25s linear infinite,pulse 4s ease-in-out infinite alternate;bottom:-150px}.circles li:nth-child(1){left:10%;width:90px;height:90px;animation-delay:0s;animation-duration:22s}.circles li:nth-child(2){left:25%;width:30px;height:30px;animation-delay:3s;animation-duration:14s}.circles li:nth-child(3){left:45%;width:60px;height:60px;animation-delay:6s;animation-duration:18s}.circles li:nth-child(4){left:65%;width:110px;height:110px;animation-delay:1s;animation-duration:28s}.circles li:nth-child(5){left:80%;width:25px;height:25px;animation-delay:4s;animation-duration:12s}.circles li:nth-child(6){left:55%;width:70px;height:70px;animation-delay:9s;animation-duration:20s}.circles li:nth-child(7){left:35%;width:140px;height:140px;animation-delay:2s;animation-duration:32s}.circles li:nth-child(8){left:70%;width:40px;height:40px;animation-delay:12s;animation-duration:40s}.circles li:nth-child(9){left:5%;width:20px;height:20px;animation-delay:5s;animation-duration:30s}.circles li:nth-child(10){left:90%;width:55px;height:55px;animation-delay:7s;animation-duration:24s}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:.8}20%{opacity:1}80%{opacity:.7}to{transform:translateY(-110vh) rotate(540deg);opacity:0}}@keyframes pulse{0%{box-shadow:0 0 12px 2px rgba(var(--accent-rgb, 102, 126, 234),.1)}to{box-shadow:0 0 32px 10px rgba(var(--accent-rgb, 102, 126, 234),.28)}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}.login_card{padding:10px}}@media screen and (max-width: 900px){.main-panel{width:min(760px,94vw)}}@media screen and (max-width: 768px){.main-panel,.main-panel.single-pane{width:100%;margin:1.25rem auto}.auth-card{flex-direction:column;min-height:unset}.auth-image{width:100%;min-height:220px}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}.login_card{height:100vh}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i10.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i12.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i13.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingAroundDirective, selector: "[spacingAround]", inputs: ["spacingAround", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId", "itemIndex"] }, { kind: "directive", type: ImageEditorDirective, selector: "[appImageEditor]", inputs: ["appImageEditor", "imageData", "sectionId", "showIcon", "iconData", "itemIndex"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: ObjectPositionDirective, selector: "[simpoObjectPosition]", inputs: ["simpoObjectPosition"] }, { kind: "directive", type: PositionLayoutDirectiveDirective, selector: "[simpoPositionLayoutDirective]", inputs: ["simpoPositionLayoutDirective"] }] }); }
|
|
847
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthenticationRequiredComponent, isStandalone: true, selector: "simpo-authentication-required", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], viewQueries: [{ propertyName: "inputs", predicate: ["otpInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\n\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\n <div [spacingAround]=\"stylesLayout\">\n <div class=\"login_card d-flex align-items-center justify-content-center flex-column\"\n [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\n <div class=\"area w-100\">\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n </ul>\n </div>\n\n <!-- ===== AUTH CARD ===== -->\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [class.single-pane]=\"!data?.content?.image?.showImage\"\n [simpoCorner]=\"styles?.corners\">\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\n <div class=\"auth-card\" [class.single-pane]=\"!data?.content?.image?.showImage\" [id]=\"data?.id\"\n [simpoPositionLayoutDirective]=\"styles?.positionLayout\">\n <div class=\"auth-image\" *ngIf=\"data?.content?.image?.showImage\">\n <img loading=\"lazy\" [src]=\"data?.content?.image?.url\" [attr.alt]=\"data?.content?.image?.altText || ''\"\n class=\"auth-hero-image\" [simpoImageDirective]=\"styles?.image\" [appImageEditor]=\"edit ?? false\"\n [imageData]=\"data?.content?.image\" [sectionId]=\"data?.id\"\n [class]=\"data?.id+(data?.content?.image?.id || '')\" [id]=\"data?.id\"\n [simpoObjectPosition]=\"data?.content?.image?.position\">\n </div>\n <div class=\"auth-form\">\n <ng-container [ngSwitch]=\"authScreen\">\n <ng-container *ngSwitchCase=\"'PHONE'\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"icon d-flex justify-content-center align-items-center cursor-pointer\"\n (click)=\"backToHome()\">\n <mat-icon>arrow_back</mat-icon>\n </div>\n <div\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\n </div>\n </div>\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\n\n <div class=\"login-input-section mt-4\">\n <p class=\"text-center mb-3\" style=\"font-size:14px; color:#555;\">Unlock coupons, profile and much\n more\n </p>\n\n <div class=\"input-box\">\n <label for=\"auth-email-phone-input\">Email / Mobile Number</label>\n <input id=\"auth-email-phone-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\" (keyup.enter)=\"sendOTP()\" />\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter a valid email or\n 10-digit\n mobile number*</span>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[2]?.content\"\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[2]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[2]?.id ?? ''\"\n (click)=\"sendOTP()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content?.label\n :\n 'SEND\n OTP' }}\n </button>\n\n <div class=\"mt-3 text-center\">\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\n (click)=\"authScreen = 'PASSWORD'\">\n Login with Password\n </span>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'OTP'\">\n <div\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\n </div>\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\n\n <div class=\"login-input-section mt-4\">\n <p class=\"text-center mb-3 clr-black\" style=\"font-size:14px;\">\n Enter 6-digit OTP sent to {{emailOrNumber}}\n </p>\n\n <div class=\"d-flex align-items-center justify-content-between otp_input gap-1 mb-3\">\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\n </div>\n </div>\n\n <div class=\"text-center mb-3\">\n <span *ngIf=\"resendCountdown > 0\" class=\"clr-black fs-13\"\n style=\"font-weight:700; letter-spacing:0.04em;\">\n RESEND IN {{formatCountdown(resendCountdown)}}\n </span>\n <span *ngIf=\"resendCountdown === 0\" class=\"cursor-pointer clr-black fs-13\"\n style=\"font-weight:700; letter-spacing:0.04em; text-decoration:underline;\"\n (click)=\"resendOTPNew()\">\n RESEND OTP\n </span>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[1]?.content\"\n [buttonStyle]=\"data?.action?.buttons[1]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[1]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[1]?.id ?? ''\"\n (click)=\"verifyOTPNew()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content?.label\n :\n 'VERIFY OTP' }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'REGISTER'\">\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 fs-20-fw-600 clr-black\">REGISTER</p>\n </div>\n\n <div class=\"d-flex w-100 signup-input-container flex-column\">\n <div class=\"input-box\">\n <label for=\"auth-fullname-input\">Full Name</label>\n <input id=\"auth-fullname-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\"\n placeholder=\"Jane Doe\">\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-phone-input\">Phone Number</label>\n <div class=\"d-flex align-items-center w-100 password-input-container\">\n <span class=\"clr-black\"\n style=\"font-size:14px; font-weight:500; padding: 0 8px 0 12px; white-space:nowrap;\">+91\n |</span>\n <input id=\"auth-reg-phone-input\" type=\"tel\" class=\"b-none clr-black w-90\"\n [(ngModel)]=\"phoneNumber\" placeholder=\"9876543210\" maxlength=\"10\" inputmode=\"numeric\"\n style=\"outline:none; font-size:14px;\" />\n </div>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-email-input\">Email</label>\n <input id=\"auth-email-input\" type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\"\n placeholder=\"janedoe@gmail.com\" (ngModelChange)=\"onEmailChange()\"\n [style.borderColor]=\"!emailCheck ? '' : 'red'\">\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-password-input\">Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-reg-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\">\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\n (click)=\"passwordHidden = !passwordHidden\">\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\n </mat-icon>\n </div>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-conf-password-input\">Confirm Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-reg-conf-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"confPassword\" placeholder=\"Confirm Password\">\n </div>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\n (click)=\"registerUser()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\n :\n 'CONTINUE' }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'PASSWORD'\">\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 fs-20-fw-600 clr-black\">LOGIN</p>\n </div>\n\n <div class=\"d-flex w-100 signup-input-container flex-column\">\n <div class=\"input-box\">\n <label for=\"auth-pwd-email-input\">Email / Mobile Number</label>\n <input id=\"auth-pwd-email-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\">\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter valid email or\n 10-digit\n mobile number*</span>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-login-password-input\">Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-login-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\"\n (keyup.enter)=\"loginWithPassword()\">\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\n (click)=\"passwordHidden = !passwordHidden\">\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\n </mat-icon>\n </div>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\n (click)=\"loginWithPassword()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\n :\n 'LOGIN' }}\n </button>\n\n <div class=\"mt-3 text-center\">\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\n (click)=\"authScreen = 'PHONE'\">\n Login with OTP\n </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n\n</section>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:min(860px,92vw);margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.main-panel.single-pane{width:450px}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0;position:relative;transition:all .4s ease;margin:unset!important;overflow:hidden}.auth-card{display:flex;align-items:stretch;min-height:420px}.auth-card.single-pane{min-height:unset}.auth-image{flex:0 0 48%;background:#f2f2f2}.auth-hero-image{width:100%;height:100%;display:block;object-fit:cover}.auth-form{flex:1;display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:1.5rem}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:radial-gradient(circle at 30% 30%,rgba(var(--accent-rgb, 102, 126, 234),.22),rgba(var(--accent-rgb, 102, 126, 234),.06));box-shadow:0 0 20px 4px rgba(var(--accent-rgb, 102, 126, 234),.15),inset 0 0 12px #ffffff1f;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:50%;border:1px solid rgba(var(--accent-rgb, 102, 126, 234),.18);animation:floatUp 25s linear infinite,pulse 4s ease-in-out infinite alternate;bottom:-150px}.circles li:nth-child(1){left:10%;width:90px;height:90px;animation-delay:0s;animation-duration:22s}.circles li:nth-child(2){left:25%;width:30px;height:30px;animation-delay:3s;animation-duration:14s}.circles li:nth-child(3){left:45%;width:60px;height:60px;animation-delay:6s;animation-duration:18s}.circles li:nth-child(4){left:65%;width:110px;height:110px;animation-delay:1s;animation-duration:28s}.circles li:nth-child(5){left:80%;width:25px;height:25px;animation-delay:4s;animation-duration:12s}.circles li:nth-child(6){left:55%;width:70px;height:70px;animation-delay:9s;animation-duration:20s}.circles li:nth-child(7){left:35%;width:140px;height:140px;animation-delay:2s;animation-duration:32s}.circles li:nth-child(8){left:70%;width:40px;height:40px;animation-delay:12s;animation-duration:40s}.circles li:nth-child(9){left:5%;width:20px;height:20px;animation-delay:5s;animation-duration:30s}.circles li:nth-child(10){left:90%;width:55px;height:55px;animation-delay:7s;animation-duration:24s}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:.8}20%{opacity:1}80%{opacity:.7}to{transform:translateY(-110vh) rotate(540deg);opacity:0}}@keyframes pulse{0%{box-shadow:0 0 12px 2px rgba(var(--accent-rgb, 102, 126, 234),.1)}to{box-shadow:0 0 32px 10px rgba(var(--accent-rgb, 102, 126, 234),.28)}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}.login_card{padding:10px}}@media screen and (max-width: 900px){.main-panel{width:min(760px,94vw)}}@media screen and (max-width: 768px){.main-panel,.main-panel.single-pane{width:100%;margin:1.25rem auto}.auth-card{flex-direction:column;min-height:unset}.auth-image{width:100%;min-height:220px}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}.login_card{height:100vh}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i10.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i12.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i13.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingAroundDirective, selector: "[spacingAround]", inputs: ["spacingAround", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId", "itemIndex"] }, { kind: "directive", type: ImageEditorDirective, selector: "[appImageEditor]", inputs: ["appImageEditor", "imageData", "sectionId", "showIcon", "iconData", "itemIndex"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: ObjectPositionDirective, selector: "[simpoObjectPosition]", inputs: ["simpoObjectPosition"] }, { kind: "directive", type: PositionLayoutDirectiveDirective, selector: "[simpoPositionLayoutDirective]", inputs: ["simpoPositionLayoutDirective"] }] }); }
|
|
848
848
|
}
|
|
849
849
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthenticationRequiredComponent, decorators: [{
|
|
850
850
|
type: Component,
|
|
@@ -870,7 +870,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
870
870
|
ImageDirectiveDirective,
|
|
871
871
|
ObjectPositionDirective,
|
|
872
872
|
PositionLayoutDirectiveDirective
|
|
873
|
-
], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div [spacingAround]=\"stylesLayout\">\r\n <div class=\"login_card d-flex align-items-center justify-content-center flex-column\"\r\n [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"area w-100\">\r\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n </ul>\r\n </div>\r\n\r\n <!-- ===== AUTH CARD ===== -->\r\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [class.single-pane]=\"!data?.content?.image?.showImage\"\r\n [simpoCorner]=\"styles?.corners\">\r\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"auth-card\" [class.single-pane]=\"!data?.content?.image?.showImage\" [id]=\"data?.id\"\r\n [simpoPositionLayoutDirective]=\"styles?.positionLayout\">\r\n <div class=\"auth-image\" *ngIf=\"data?.content?.image?.showImage\">\r\n <img loading=\"lazy\" [src]=\"data?.content?.image?.url\" [attr.alt]=\"data?.content?.image?.altText || ''\"\r\n class=\"auth-hero-image\" [simpoImageDirective]=\"styles?.image\" [appImageEditor]=\"edit ?? false\"\r\n [imageData]=\"data?.content?.image\" [sectionId]=\"data?.id\"\r\n [class]=\"data?.id+(data?.content?.image?.id || '')\" [id]=\"data?.id\"\r\n [simpoObjectPosition]=\"data?.content?.image?.position\">\r\n </div>\r\n <div class=\"auth-form\">\r\n <ng-container [ngSwitch]=\"authScreen\">\r\n <ng-container *ngSwitchCase=\"'PHONE'\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"icon d-flex justify-content-center align-items-center cursor-pointer\"\r\n (click)=\"backToHome()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </div>\r\n <div\r\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\r\n </div>\r\n </div>\r\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\r\n\r\n <div class=\"login-input-section mt-4\">\r\n <p class=\"text-center mb-3\" style=\"font-size:14px; color:#555;\">Unlock coupons, profile and much\r\n more\r\n </p>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-email-phone-input\">Email / Mobile Number</label>\r\n <input id=\"auth-email-phone-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\r\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\r\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\" (keyup.enter)=\"sendOTP()\" />\r\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter a valid email or\r\n 10-digit\r\n mobile number*</span>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[2]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[2]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[2]?.id ?? ''\"\r\n (click)=\"sendOTP()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content?.label\r\n :\r\n 'SEND\r\n OTP' }}\r\n </button>\r\n\r\n <div class=\"mt-3 text-center\">\r\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\r\n (click)=\"authScreen = 'PASSWORD'\">\r\n Login with Password\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'OTP'\">\r\n <div\r\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\r\n </div>\r\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\r\n\r\n <div class=\"login-input-section mt-4\">\r\n <p class=\"text-center mb-3 clr-black\" style=\"font-size:14px;\">\r\n Enter 6-digit OTP sent to {{emailOrNumber}}\r\n </p>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between otp_input gap-1 mb-3\">\r\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\r\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\r\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\r\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center mb-3\">\r\n <span *ngIf=\"resendCountdown > 0\" class=\"clr-black fs-13\"\r\n style=\"font-weight:700; letter-spacing:0.04em;\">\r\n RESEND IN {{formatCountdown(resendCountdown)}}\r\n </span>\r\n <span *ngIf=\"resendCountdown === 0\" class=\"cursor-pointer clr-black fs-13\"\r\n style=\"font-weight:700; letter-spacing:0.04em; text-decoration:underline;\"\r\n (click)=\"resendOTPNew()\">\r\n RESEND OTP\r\n </span>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[1]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[1]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[1]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[1]?.id ?? ''\"\r\n (click)=\"verifyOTPNew()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content?.label\r\n :\r\n 'VERIFY OTP' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'REGISTER'\">\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">REGISTER</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"auth-fullname-input\">Full Name</label>\r\n <input id=\"auth-fullname-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\"\r\n placeholder=\"Jane Doe\">\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-phone-input\">Phone Number</label>\r\n <div class=\"d-flex align-items-center w-100 password-input-container\">\r\n <span class=\"clr-black\"\r\n style=\"font-size:14px; font-weight:500; padding: 0 8px 0 12px; white-space:nowrap;\">+91\r\n |</span>\r\n <input id=\"auth-reg-phone-input\" type=\"tel\" class=\"b-none clr-black w-90\"\r\n [(ngModel)]=\"phoneNumber\" placeholder=\"9876543210\" maxlength=\"10\" inputmode=\"numeric\"\r\n style=\"outline:none; font-size:14px;\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-email-input\">Email</label>\r\n <input id=\"auth-email-input\" type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\"\r\n placeholder=\"janedoe@gmail.com\" (ngModelChange)=\"onEmailChange()\"\r\n [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-password-input\">Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-reg-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\">\r\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\r\n (click)=\"passwordHidden = !passwordHidden\">\r\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-conf-password-input\">Confirm Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-reg-conf-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"confPassword\" placeholder=\"Confirm Password\">\r\n </div>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\r\n (click)=\"registerUser()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\r\n :\r\n 'CONTINUE' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'PASSWORD'\">\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">LOGIN</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"auth-pwd-email-input\">Email / Mobile Number</label>\r\n <input id=\"auth-pwd-email-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\r\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\r\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter valid email or\r\n 10-digit\r\n mobile number*</span>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-login-password-input\">Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-login-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\"\r\n (keyup.enter)=\"loginWithPassword()\">\r\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\r\n (click)=\"passwordHidden = !passwordHidden\">\r\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\r\n (click)=\"loginWithPassword()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\r\n :\r\n 'LOGIN' }}\r\n </button>\r\n\r\n <div class=\"mt-3 text-center\">\r\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\r\n (click)=\"authScreen = 'PHONE'\">\r\n Login with OTP\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\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 <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\r\n</section>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:min(860px,92vw);margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.main-panel.single-pane{width:450px}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0;position:relative;transition:all .4s ease;margin:unset!important;overflow:hidden}.auth-card{display:flex;align-items:stretch;min-height:420px}.auth-card.single-pane{min-height:unset}.auth-image{flex:0 0 48%;background:#f2f2f2}.auth-hero-image{width:100%;height:100%;display:block;object-fit:cover}.auth-form{flex:1;display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:1.5rem}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:radial-gradient(circle at 30% 30%,rgba(var(--accent-rgb, 102, 126, 234),.22),rgba(var(--accent-rgb, 102, 126, 234),.06));box-shadow:0 0 20px 4px rgba(var(--accent-rgb, 102, 126, 234),.15),inset 0 0 12px #ffffff1f;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:50%;border:1px solid rgba(var(--accent-rgb, 102, 126, 234),.18);animation:floatUp 25s linear infinite,pulse 4s ease-in-out infinite alternate;bottom:-150px}.circles li:nth-child(1){left:10%;width:90px;height:90px;animation-delay:0s;animation-duration:22s}.circles li:nth-child(2){left:25%;width:30px;height:30px;animation-delay:3s;animation-duration:14s}.circles li:nth-child(3){left:45%;width:60px;height:60px;animation-delay:6s;animation-duration:18s}.circles li:nth-child(4){left:65%;width:110px;height:110px;animation-delay:1s;animation-duration:28s}.circles li:nth-child(5){left:80%;width:25px;height:25px;animation-delay:4s;animation-duration:12s}.circles li:nth-child(6){left:55%;width:70px;height:70px;animation-delay:9s;animation-duration:20s}.circles li:nth-child(7){left:35%;width:140px;height:140px;animation-delay:2s;animation-duration:32s}.circles li:nth-child(8){left:70%;width:40px;height:40px;animation-delay:12s;animation-duration:40s}.circles li:nth-child(9){left:5%;width:20px;height:20px;animation-delay:5s;animation-duration:30s}.circles li:nth-child(10){left:90%;width:55px;height:55px;animation-delay:7s;animation-duration:24s}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:.8}20%{opacity:1}80%{opacity:.7}to{transform:translateY(-110vh) rotate(540deg);opacity:0}}@keyframes pulse{0%{box-shadow:0 0 12px 2px rgba(var(--accent-rgb, 102, 126, 234),.1)}to{box-shadow:0 0 32px 10px rgba(var(--accent-rgb, 102, 126, 234),.28)}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}.login_card{padding:10px}}@media screen and (max-width: 900px){.main-panel{width:min(760px,94vw)}}@media screen and (max-width: 768px){.main-panel,.main-panel.single-pane{width:100%;margin:1.25rem auto}.auth-card{flex-direction:column;min-height:unset}.auth-image{width:100%;min-height:220px}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}.login_card{height:100vh}\n"] }]
|
|
873
|
+
], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\n\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\n <div [spacingAround]=\"stylesLayout\">\n <div class=\"login_card d-flex align-items-center justify-content-center flex-column\"\n [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\n <div class=\"area w-100\">\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n </ul>\n </div>\n\n <!-- ===== AUTH CARD ===== -->\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [class.single-pane]=\"!data?.content?.image?.showImage\"\n [simpoCorner]=\"styles?.corners\">\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\n <div class=\"auth-card\" [class.single-pane]=\"!data?.content?.image?.showImage\" [id]=\"data?.id\"\n [simpoPositionLayoutDirective]=\"styles?.positionLayout\">\n <div class=\"auth-image\" *ngIf=\"data?.content?.image?.showImage\">\n <img loading=\"lazy\" [src]=\"data?.content?.image?.url\" [attr.alt]=\"data?.content?.image?.altText || ''\"\n class=\"auth-hero-image\" [simpoImageDirective]=\"styles?.image\" [appImageEditor]=\"edit ?? false\"\n [imageData]=\"data?.content?.image\" [sectionId]=\"data?.id\"\n [class]=\"data?.id+(data?.content?.image?.id || '')\" [id]=\"data?.id\"\n [simpoObjectPosition]=\"data?.content?.image?.position\">\n </div>\n <div class=\"auth-form\">\n <ng-container [ngSwitch]=\"authScreen\">\n <ng-container *ngSwitchCase=\"'PHONE'\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"icon d-flex justify-content-center align-items-center cursor-pointer\"\n (click)=\"backToHome()\">\n <mat-icon>arrow_back</mat-icon>\n </div>\n <div\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\n </div>\n </div>\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\n\n <div class=\"login-input-section mt-4\">\n <p class=\"text-center mb-3\" style=\"font-size:14px; color:#555;\">Unlock coupons, profile and much\n more\n </p>\n\n <div class=\"input-box\">\n <label for=\"auth-email-phone-input\">Email / Mobile Number</label>\n <input id=\"auth-email-phone-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\" (keyup.enter)=\"sendOTP()\" />\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter a valid email or\n 10-digit\n mobile number*</span>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[2]?.content\"\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[2]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[2]?.id ?? ''\"\n (click)=\"sendOTP()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content?.label\n :\n 'SEND\n OTP' }}\n </button>\n\n <div class=\"mt-3 text-center\">\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\n (click)=\"authScreen = 'PASSWORD'\">\n Login with Password\n </span>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'OTP'\">\n <div\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\n </div>\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\n\n <div class=\"login-input-section mt-4\">\n <p class=\"text-center mb-3 clr-black\" style=\"font-size:14px;\">\n Enter 6-digit OTP sent to {{emailOrNumber}}\n </p>\n\n <div class=\"d-flex align-items-center justify-content-between otp_input gap-1 mb-3\">\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\n </div>\n </div>\n\n <div class=\"text-center mb-3\">\n <span *ngIf=\"resendCountdown > 0\" class=\"clr-black fs-13\"\n style=\"font-weight:700; letter-spacing:0.04em;\">\n RESEND IN {{formatCountdown(resendCountdown)}}\n </span>\n <span *ngIf=\"resendCountdown === 0\" class=\"cursor-pointer clr-black fs-13\"\n style=\"font-weight:700; letter-spacing:0.04em; text-decoration:underline;\"\n (click)=\"resendOTPNew()\">\n RESEND OTP\n </span>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[1]?.content\"\n [buttonStyle]=\"data?.action?.buttons[1]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[1]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[1]?.id ?? ''\"\n (click)=\"verifyOTPNew()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content?.label\n :\n 'VERIFY OTP' }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'REGISTER'\">\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 fs-20-fw-600 clr-black\">REGISTER</p>\n </div>\n\n <div class=\"d-flex w-100 signup-input-container flex-column\">\n <div class=\"input-box\">\n <label for=\"auth-fullname-input\">Full Name</label>\n <input id=\"auth-fullname-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\"\n placeholder=\"Jane Doe\">\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-phone-input\">Phone Number</label>\n <div class=\"d-flex align-items-center w-100 password-input-container\">\n <span class=\"clr-black\"\n style=\"font-size:14px; font-weight:500; padding: 0 8px 0 12px; white-space:nowrap;\">+91\n |</span>\n <input id=\"auth-reg-phone-input\" type=\"tel\" class=\"b-none clr-black w-90\"\n [(ngModel)]=\"phoneNumber\" placeholder=\"9876543210\" maxlength=\"10\" inputmode=\"numeric\"\n style=\"outline:none; font-size:14px;\" />\n </div>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-email-input\">Email</label>\n <input id=\"auth-email-input\" type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\"\n placeholder=\"janedoe@gmail.com\" (ngModelChange)=\"onEmailChange()\"\n [style.borderColor]=\"!emailCheck ? '' : 'red'\">\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-password-input\">Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-reg-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\">\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\n (click)=\"passwordHidden = !passwordHidden\">\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\n </mat-icon>\n </div>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-conf-password-input\">Confirm Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-reg-conf-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"confPassword\" placeholder=\"Confirm Password\">\n </div>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\n (click)=\"registerUser()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\n :\n 'CONTINUE' }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'PASSWORD'\">\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 fs-20-fw-600 clr-black\">LOGIN</p>\n </div>\n\n <div class=\"d-flex w-100 signup-input-container flex-column\">\n <div class=\"input-box\">\n <label for=\"auth-pwd-email-input\">Email / Mobile Number</label>\n <input id=\"auth-pwd-email-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\">\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter valid email or\n 10-digit\n mobile number*</span>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-login-password-input\">Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-login-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\"\n (keyup.enter)=\"loginWithPassword()\">\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\n (click)=\"passwordHidden = !passwordHidden\">\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\n </mat-icon>\n </div>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\n (click)=\"loginWithPassword()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\n :\n 'LOGIN' }}\n </button>\n\n <div class=\"mt-3 text-center\">\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\n (click)=\"authScreen = 'PHONE'\">\n Login with OTP\n </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n\n</section>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:min(860px,92vw);margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.main-panel.single-pane{width:450px}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0;position:relative;transition:all .4s ease;margin:unset!important;overflow:hidden}.auth-card{display:flex;align-items:stretch;min-height:420px}.auth-card.single-pane{min-height:unset}.auth-image{flex:0 0 48%;background:#f2f2f2}.auth-hero-image{width:100%;height:100%;display:block;object-fit:cover}.auth-form{flex:1;display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:1.5rem}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:radial-gradient(circle at 30% 30%,rgba(var(--accent-rgb, 102, 126, 234),.22),rgba(var(--accent-rgb, 102, 126, 234),.06));box-shadow:0 0 20px 4px rgba(var(--accent-rgb, 102, 126, 234),.15),inset 0 0 12px #ffffff1f;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:50%;border:1px solid rgba(var(--accent-rgb, 102, 126, 234),.18);animation:floatUp 25s linear infinite,pulse 4s ease-in-out infinite alternate;bottom:-150px}.circles li:nth-child(1){left:10%;width:90px;height:90px;animation-delay:0s;animation-duration:22s}.circles li:nth-child(2){left:25%;width:30px;height:30px;animation-delay:3s;animation-duration:14s}.circles li:nth-child(3){left:45%;width:60px;height:60px;animation-delay:6s;animation-duration:18s}.circles li:nth-child(4){left:65%;width:110px;height:110px;animation-delay:1s;animation-duration:28s}.circles li:nth-child(5){left:80%;width:25px;height:25px;animation-delay:4s;animation-duration:12s}.circles li:nth-child(6){left:55%;width:70px;height:70px;animation-delay:9s;animation-duration:20s}.circles li:nth-child(7){left:35%;width:140px;height:140px;animation-delay:2s;animation-duration:32s}.circles li:nth-child(8){left:70%;width:40px;height:40px;animation-delay:12s;animation-duration:40s}.circles li:nth-child(9){left:5%;width:20px;height:20px;animation-delay:5s;animation-duration:30s}.circles li:nth-child(10){left:90%;width:55px;height:55px;animation-delay:7s;animation-duration:24s}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:.8}20%{opacity:1}80%{opacity:.7}to{transform:translateY(-110vh) rotate(540deg);opacity:0}}@keyframes pulse{0%{box-shadow:0 0 12px 2px rgba(var(--accent-rgb, 102, 126, 234),.1)}to{box-shadow:0 0 32px 10px rgba(var(--accent-rgb, 102, 126, 234),.28)}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}.login_card{padding:10px}}@media screen and (max-width: 900px){.main-panel{width:min(760px,94vw)}}@media screen and (max-width: 768px){.main-panel,.main-panel.single-pane{width:100%;margin:1.25rem auto}.auth-card{flex-direction:column;min-height:unset}.auth-image{width:100%;min-height:220px}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}.login_card{height:100vh}\n"] }]
|
|
874
874
|
}], ctorParameters: () => [{ type: i1.RestService }, { type: i2.Router }, { type: i3.MessageService }, { type: i4.StorageServiceService }, { type: i5.MatDialog }, { type: i2.ActivatedRoute }, { type: i0.ElementRef }, { type: i6.AnalyticsService }, { type: i5.MatDialogRef, decorators: [{
|
|
875
875
|
type: Optional
|
|
876
876
|
}] }, { type: i7.MatBottomSheetRef, decorators: [{
|
|
@@ -887,4 +887,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
887
887
|
type: ViewChildren,
|
|
888
888
|
args: ['otpInput']
|
|
889
889
|
}] } });
|
|
890
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBRXhELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdEQUF3RCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFrQzFHLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxXQUFXO0lBNEM5RCxZQUNtQixXQUF3QixFQUN4QixNQUFjLEVBQ2QsY0FBOEIsRUFDOUIsY0FBcUMsRUFDckMsU0FBb0IsRUFDcEIsY0FBOEIsRUFDdkMsVUFBc0IsRUFDYixnQkFBa0MsRUFFdEIsU0FBd0QsRUFDeEQsY0FBa0U7UUFFL0YsS0FBSyxFQUFFLENBQUM7UUFaUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ2IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUV0QixjQUFTLEdBQVQsU0FBUyxDQUErQztRQUN4RCxtQkFBYyxHQUFkLGNBQWMsQ0FBb0Q7UUEvQ2pHLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFFdEIsZUFBVSxHQUE4QyxPQUFPLENBQUM7UUFFekQsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLFFBQUcsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUMxQixJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNuQixJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztTQUNwQixDQUFDLENBQUM7UUFFSCxtQkFBbUI7UUFDbkIsb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFFNUIsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDeEIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGVBQVUsR0FBa0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvRCxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQiwwQkFBcUIsR0FBVyxDQUFDLENBQUM7UUFDbEMscUJBQWdCLEdBQUc7WUFDeEIsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUM5QyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ2hELEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDaEQsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtTQUM5QyxDQUFBO1FBbUJELGtCQUFhLEdBQVEsSUFBSSxDQUFDO1FBQzFCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBQ3pDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBK1V6QixjQUFTLEdBQXVCLEtBQUssQ0FBQztRQUN0QyxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFRLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQTZWN0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQWE1QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQW1CL0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFPN0Isa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBZ0VwQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQWh5QjVCLDRFQUE0RTtJQUM5RSxDQUFDO0lBV0QsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3ZELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO2dCQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDN0MsQ0FBQztZQUNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFBO1lBQ3JDLENBQUM7UUFFSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwRCxJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxLQUFLLE1BQU0sQ0FBQztJQUU1QyxDQUFDO0lBQ0QsZUFBZSxLQUFLLENBQUM7SUFFckIsc0ZBQXNGO0lBQzlFLGVBQWU7UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FBQztRQUM5RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakQsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sS0FBSyxDQUFDLENBQUMsZ0RBQWdEO0lBQ2hFLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUs7WUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQzthQUNwRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVTtZQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25FLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7O1lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVk7UUFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQWtCLEVBQUU7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLHNEQUFzRCxFQUFFLENBQUMsQ0FBQztnQkFDekksT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ2hHLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLElBQUksSUFBSSxDQUFDO2dCQUM3RCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEosQ0FBQyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ2hHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hKLENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFHO2dCQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7Z0JBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDOUIsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUN6QixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ2hFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUVqQyxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO29CQUU3Qix3Q0FBd0M7b0JBQ3hDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUN4QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUNsQyxDQUFDO29CQUVELE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztvQkFDNUUsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUM1RixDQUFDO29CQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO29CQUMzQixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO29CQUN6RyxJQUFJLElBQUksQ0FBQyxpQkFBaUI7d0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7eUJBQzVGLElBQUksSUFBSSxDQUFDLG1CQUFtQjt3QkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7eUJBQ2pFLElBQUksSUFBSSxDQUFDLFNBQVM7d0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDekksSUFBSSxJQUFJLENBQUMsdUJBQXVCO3dCQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzt5QkFDMUUsSUFBSSxJQUFJLENBQUMsV0FBVzt3QkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7O3dCQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7WUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbEcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSw2QkFBNkIsRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSw2Q0FBNkMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pJLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixFQUFFLENBQUMsQ0FBQztnQkFDaEgsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7Z0JBQy9HLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxjQUFjLEdBQVE7Z0JBQ3hCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDOUIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUU7Z0JBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ2xDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7Z0JBQ2pDLFlBQVksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pELFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUk7YUFDckQsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzVFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDLENBQUM7Z0JBQzVILElBQUksSUFBSSxDQUFDLGlCQUFpQjtvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDNUYsSUFBSSxJQUFJLENBQUMsU0FBUztvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUN6SSxJQUFJLElBQUksQ0FBQyxXQUFXO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7b0JBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMvRyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsc0RBQXNELEVBQUUsQ0FBQyxDQUFDO2dCQUN6SSxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7Z0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN6RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7Z0JBRXpHLElBQUksSUFBSSxDQUFDLGlCQUFpQjtvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDNUYsSUFBSSxJQUFJLENBQUMsbUJBQW1CO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztxQkFDakUsSUFBSSxJQUFJLENBQUMsU0FBUztvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUN6SSxJQUFJLElBQUksQ0FBQyx1QkFBdUI7b0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO3FCQUMxRSxJQUFJLElBQUksQ0FBQyxXQUFXO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7b0JBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDekcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFhO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFvQixFQUFFLEtBQWE7UUFDM0MsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsU0FBNkI7UUFDaEQsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7WUFFdEQsS0FBSyxPQUFPO2dCQUNWLE9BQU8sT0FBTyxDQUFDO1lBRWpCLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLE9BQU8sQ0FBQztZQUVqQixLQUFLLGVBQWU7Z0JBQ2xCLE9BQU8sUUFBUSxDQUFDO1lBRWxCO2dCQUNFLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksU0FBUztRQUNYLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRTFCLHVDQUF1QztRQUN2QyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0IsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFOUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUV4RCxPQUFPLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUVuQyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRW5CLElBQUksRUFBRSxDQUFDLG9CQUFvQixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN4QixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTlELE9BQU8sS0FBSztZQUNWLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLEVBQUUsQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLG9CQUFvQixHQUFHO1lBQzVFLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsb0JBQW9CLEdBQUcsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFLRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQVcsRUFBRSxnQkFBcUI7UUFDdkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUM1Rix5REFBeUQ7WUFDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2hCLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGNBQWM7UUFFWixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSw2Q0FBNkMsRUFBRSxDQUFDLENBQUM7WUFDdkksT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRztZQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLHNDQUFzQztZQUNyRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7WUFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFdBQVcsRUFBRSxVQUFVO1NBQ3hCLENBQUE7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN0RSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELG1DQUFtQztZQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLElBQUksSUFBSSxDQUFDLGlCQUFpQjtnQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ2xFLElBQUksSUFBSSxDQUFDLG1CQUFtQjtnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNsSCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7WUFDekMsQ0FBQztpQkFDSSxJQUFJLElBQUksQ0FBQyxXQUFXO2dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7O2dCQUU1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUNDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELFNBQVM7UUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSw2Q0FBNkMsRUFBRSxDQUFDLENBQUM7WUFDdkksT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLE9BQU8sR0FBRztnQkFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxzQ0FBc0M7Z0JBQ3JFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtnQkFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNoQyxXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFBO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDdEYsQ0FBQztnQkFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7Z0JBQ3pHLElBQUksSUFBSSxDQUFDLGlCQUFpQjtvQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ2xFLElBQUksSUFBSSxDQUFDLG1CQUFtQjtvQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3FCQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTO29CQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNsSCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO29CQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7Z0JBQ3pDLENBQUM7cUJBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVztvQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztvQkFFNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFDQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzFHLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUNELGFBQWE7UUFDWCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDMUIsT0FBTztZQUNULE1BQU0sT0FBTyxHQUFRO2dCQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQUE7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUN2RixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFDRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsK0JBQStCLEVBQUUsQ0FBQyxDQUFDO2dCQUNySCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO2dCQUMvSCxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sVUFBVSxHQUFzQjtnQkFDcEMsYUFBYSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTthQUNyRCxDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxjQUFjLEdBQUc7Z0JBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixZQUFZLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQzNDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO2dCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ3BCLFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7YUFDbkQsQ0FBQTtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMzRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELDBFQUEwRTtnQkFDMUUsb0NBQW9DO2dCQUVwQyxPQUFPO2dCQUNQLHdCQUF3QjtnQkFDeEIsdURBQXVEO2dCQUN2RCxNQUFNO2dCQUNOLEtBQUs7Z0JBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFN0QsbUNBQW1DO2dCQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLG1DQUFtQyxFQUFFLENBQUMsQ0FBQztnQkFDbEgsSUFBSSxJQUFJLENBQUMsaUJBQWlCO29CQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDbEUsSUFBSSxJQUFJLENBQUMsU0FBUztvQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDbEgsSUFBSSxJQUFJLENBQUMsV0FBVztvQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztvQkFFNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQU0sY0FBYztnQkFDakQscUJBQXFCO2dCQUNyQixxQkFBcUI7Z0JBQ3JCLCtDQUErQztnQkFDL0MsZ0VBQWdFO2dCQUNoRSxxQ0FBcUM7Z0JBQ3JDLGtEQUFrRDtnQkFDbEQsa0NBQWtDO2dCQUNsQyx3QkFBd0I7Z0JBRXhCLDhCQUE4QjtnQkFDOUIsb0RBQW9EO2dCQUNwRCx3QkFBd0I7Z0JBQ3hCLDBEQUEwRDtnQkFDMUQsOERBQThEO2dCQUM5RCxpQkFBaUI7Z0JBQ2pCLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTixLQUFLO1lBQ1AsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtnQkFDeEcsQ0FBQztxQkFDSSxDQUFDO29CQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3pHLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBQ0QsZUFBZTtRQUViLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUN0QixPQUFPO1FBRVQsTUFBTSxVQUFVLEdBQXNCO1lBQ3BDLGFBQWEsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7U0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksY0FBYyxHQUFHO1lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDcEIsVUFBVSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtTQUNuRCxDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFFM0UsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQTtZQUNoRixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztZQUMzRyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsV0FBVztRQUVULElBQUksSUFBSSxDQUFDLFdBQVc7WUFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFO2dCQUMxQixPQUFPO1lBQ1QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUM3RCxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsTUFBTSxFQUFFLHNDQUFzQztnQkFDOUMsSUFBSSxFQUFFLEtBQUs7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO1lBRTNDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUN0QixRQUFRLEVBQUUsT0FBTztnQkFDakIsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFvQjtRQUNqQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksUUFBUSxHQUFHLEVBQUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQW9CO1FBQzlCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsYUFBYTtRQUNYLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLFFBQVEsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZFLEtBQUssQ0FBQztnQkFDSixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2RSxLQUFLLENBQUM7Z0JBQ0osT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkUsS0FBSyxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFO2dCQUNFLE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFVBQVUsR0FBRyxrREFBa0QsQ0FBQztRQUN0RSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzNDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sYUFBYSxHQUFHLHdEQUF3RCxDQUFDO1FBRS9FLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsT0FBTyxDQUFDO1FBRTlCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBR0QsY0FBYztRQUNaLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFJRCxvQkFBb0I7UUFDbEIsTUFBTSxVQUFVLEdBQUcsa0RBQWtELENBQUM7UUFDdEUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEcsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBSUQscUJBQXFCO1FBQ25CLFlBQVksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNoRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQWlCLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDckcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNPLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUMxQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7SUFDNUMsQ0FBQztJQUNELGNBQWM7UUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFN0UsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxJQUFJLENBQUMsUUFBUTtvQkFBRSxPQUFPO2dCQUUxQixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBRS9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFFaEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBRWxDLFNBQXlCLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRywrQkFBK0IsT0FBTyxnQkFBZ0IsT0FBTyxvQkFBb0IsQ0FBQztZQUNqSSxDQUFDLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNsQixTQUF5QixDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsNkJBQTZCLENBQUM7Z0JBQzdFLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBR0QsdUJBQXVCLENBQUMsTUFBYztRQUNwQyxJQUFJLGFBQWEsR0FBVSxFQUFFLENBQUE7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNuRCxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMscUJBQTBCLEVBQUUsRUFBRTtnQkFDbEQsYUFBYSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3BELElBQUksYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDO29CQUM1QixPQUFNO2dCQUVSLElBQUksT0FBTyxHQUE4QixJQUFJLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBQzNHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0EvMkJVLCtCQUErQjttR0FBL0IsK0JBQStCLHNKQUovQixDQUFDLGNBQWMsQ0FBQyx3SUM5RDdCLGkraEJBbVJVLHEvTkQ1T04sWUFBWSx5aEJBQ1osV0FBVyxpeEJBQ1gsV0FBVyx3V0FDWCxhQUFhLG9MQUNiLHdCQUF3Qiw4QkFDeEIsb0JBQW9CLHFXQUNwQixtQkFBbUIsa05BR25CLGtCQUFrQix5RkFDbEIsbUJBQW1CLDBHQUNuQix3QkFBd0Isc0lBQ3hCLG1CQUFtQixtRkFDbkIsZUFBZSxtRkFDZixjQUFjLGdGQUNkLGdCQUFnQixxRkFDaEIsc0JBQXNCLHlHQUN0QixxQkFBcUIsc0xBQ3JCLG9CQUFvQix3SkFDcEIsdUJBQXVCLG1HQUN2Qix1QkFBdUIsbUdBQ3ZCLGdDQUFnQzs7NEZBTXZCLCtCQUErQjtrQkEvQjNDLFNBQVM7K0JBQ0UsK0JBQStCLGNBQzdCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFFcEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIsb0JBQW9CO3dCQUNwQix1QkFBdUI7d0JBQ3ZCLHVCQUF1Qjt3QkFDdkIsZ0NBQWdDO3FCQUNqQyxhQUNVLENBQUMsY0FBYyxDQUFDOzswQkEwRHhCLFFBQVE7OzBCQUNSLFFBQVE7eUNBckRGLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkErRG9CLE1BQU07c0JBQS9CLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPcHRpb25hbCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XG5pbXBvcnQgeyBEZXZpY2VJbmZvIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3VzZXIubW9kYWwnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJvdHRvbVNoZWV0UmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Nb2RlbCwgQXV0aGVudGljYXRpb25TdHlsZXNNb2RlbCB9IGZyb20gJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQubW9kZWwnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWFyb3VuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcbmltcG9ydCB7IEJ1dHRvbk1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBCdXR0b25FZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWVkaXRvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZUVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Bvc2l0aW9uLWxheW91dC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBvLWF1dGhlbnRpY2F0aW9uLXJlcXVpcmVkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUb2FzdE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNpbXBvQnV0dG9uQ29tcG9uZW50LFxuXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxuICAgIEhvdmVyRGlyZWN0aXZlLFxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSxcbiAgICBCdXR0b25FZGl0b3JEaXJlY3RpdmUsXG4gICAgSW1hZ2VFZGl0b3JEaXJlY3RpdmUsXG4gICAgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUsXG4gICAgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUsXG4gICAgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25SZXF1aXJlZENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIHtcbiAgLy8gcHJpdmF0ZSBlbWFpbFRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBkYXRhPzogQXV0aGVudGljYXRpb25Nb2RlbCB8IGFueTtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xuICBzdHlsZXM/OiBBdXRoZW50aWNhdGlvblN0eWxlc01vZGVsO1xuICBidXR0b24/OiBCdXR0b25Nb2RlbFxuICBidXR0b25JZDogc3RyaW5nID0gJyc7XG5cbiAgYXV0aFNjcmVlbjogJ1BIT05FJyB8ICdPVFAnIHwgJ1JFR0lTVEVSJyB8ICdQQVNTV09SRCcgPSAnUEhPTkUnO1xuICBwcml2YXRlIG1vYmlsZVRpbWVyOiBhbnk7XG4gIHB1YmxpYyBlbWFpbDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIG1vYmlsZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHBob25lTnVtYmVyOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgb3RwOiBzdHJpbmcgPSBcIlwiO1xuICBvdHBDb250cm9scyA9IG5ldyBGb3JtQXJyYXkoW1xuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpXG4gIF0pO1xuXG4gIC8vIFJlc2VuZCBjb3VudGRvd25cbiAgcmVzZW5kQ291bnRkb3duOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHJlc2VuZEludGVydmFsOiBhbnk7XG4gIGlzRXhpc3RpbmdVc2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgY29uZlBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdXNlck5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBidXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBidXNpbmVzc0lkOiBzdHJpbmcgfCBudWxsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpO1xuICBwdWJsaWMgaXNPVFBWZXJpZmllZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcGFzc3dvcmRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aENvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aCA9IFtcbiAgICB7IHR5cGU6IFwibWluaW11bSA4IGNoYXJhY3RlclwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIFVQUEVSQ0FTRVwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIGxvd2VyY2FzZVwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIG51bWJlclwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG5cbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgYm90dG9tc2hlZXRSZWY6IE1hdEJvdHRvbVNoZWV0UmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwidXNlciBhdXRoZW50aWNhdGluZyBiYWNrXCIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpXG4gIH1cblxuICBzaWduVXBFbmFibGVkOiBhbnkgPSB0cnVlO1xuICBwcm9jZWVkVG9DaGVja291dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm9jZWVkVG9FbnJvbGxtZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHRyeUF0SG9tZTogYm9vbGVhbiA9IGZhbHNlO1xuICB0cnlBdEhvbWVNb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgbmF2aWdhdGVUb1NjaGVtZURldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudFBhZ2U6IHN0cmluZyA9IFwiXCI7XG4gIEBWaWV3Q2hpbGRyZW4oJ290cElucHV0JykgaW5wdXRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ2NhcnQnXSlcbiAgICAgICAgdGhpcy5wcm9jZWVkVG9DaGVja291dCA9IHRydWU7XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3JlZGlyZWN0VG8nXSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3JlZGlyZWN0VG8nXTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbSAmJiBwYXJhbVsnc2NoZW1lcyddKSB7XG4gICAgICAgIHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3RyeUF0SG9tZSddKSB7XG4gICAgICAgIHRoaXMudHJ5QXRIb21lID0gdHJ1ZVxuICAgICAgICB0aGlzLnRyeUF0SG9tZU1vZGUgPSBwYXJhbVsnbW9kZSddID8/IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3NjaGVtZURldGFpbCddKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1NjaGVtZURldGFpbHMgPSB0cnVlXG4gICAgICB9XG5cbiAgICB9KVxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XG4gICAgdGhpcy5idXR0b24gPSB0aGlzLmRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXTtcbiAgICB0aGlzLmJ1dHRvbklkID0gKHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5pZCA6ICcnKSArICh0aGlzLmJ1dHRvbiA/IHRoaXMuYnV0dG9uLmlkIDogJycpO1xuICAgIHRoaXMuc2V0QWNjZW50UmdiVmFyKCk7XG5cbiAgICBsZXQgZW5hYmxlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzaWduVXBFbmFibGVkJyk7XG4gICAgaWYgKGVuYWJsZWQgIT0gbnVsbClcbiAgICAgIHRoaXMuc2lnblVwRW5hYmxlZCA9IGVuYWJsZWQgPT09ICd0cnVlJztcblxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHsgfVxuXG4gIC8qKiBTZXRzIC0tYWNjZW50LXJnYiBDU1MgdmFyaWFibGUgc28gYW5pbWF0ZWQgY2lyY2xlcyBtYXRjaCB0aGUgdXNlcidzIGJyYW5kIGNvbG9yICovXG4gIHByaXZhdGUgc2V0QWNjZW50UmdiVmFyKCkge1xuICAgIGNvbnN0IGhleCA9IHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA/PyAnIzY2N2VlYSc7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBpZiAoY2xlYW5IZXgubGVuZ3RoID09PSA2KSB7XG4gICAgICBjb25zdCByID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XG4gICAgICBjb25zdCBnID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWNjZW50LXJnYicsIGAke3J9LCAke2d9LCAke2J9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhbkdvQmFjaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIHBob25lIGlzIHRoZSBmaXJzdCBzY3JlZW47IG5vIGJhY2sgZnJvbSBwaG9uZVxuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIGlmICh0aGlzLmF1dGhTY3JlZW4gPT09ICdPVFAnKSB0aGlzLmF1dGhTY3JlZW4gPSAnUEhPTkUnO1xuICAgIGVsc2UgaWYgKHRoaXMuYXV0aFNjcmVlbiA9PT0gJ1JFR0lTVEVSJykgdGhpcy5hdXRoU2NyZWVuID0gJ09UUCc7XG4gIH1cblxuICBjbG9zZUF1dGgoKSB7XG4gICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIGVsc2UgaWYgKHRoaXMuYm90dG9tc2hlZXRSZWYpIHRoaXMuYm90dG9tc2hlZXRSZWYuZGlzbWlzcygpO1xuICAgIGVsc2UgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnXSk7XG4gIH1cblxuICBmb3JtYXRDb3VudGRvd24oc2VjczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzZWNzIC8gNjApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBzID0gKHNlY3MgJSA2MCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHttfToke3N9YDtcbiAgfVxuXG4gIHN0YXJ0UmVzZW5kVGltZXIoc2Vjb25kczogbnVtYmVyID0gNjApIHtcbiAgICB0aGlzLnJlc2VuZENvdW50ZG93biA9IHNlY29uZHM7XG4gICAgaWYgKHRoaXMucmVzZW5kSW50ZXJ2YWwpIGNsZWFySW50ZXJ2YWwodGhpcy5yZXNlbmRJbnRlcnZhbCk7XG4gICAgdGhpcy5yZXNlbmRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kQ291bnRkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNlbmRDb3VudGRvd24gPD0gMCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZW5kSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLnJlc2VuZENvdW50ZG93biA9IDA7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBzZW5kT1RQKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBJbnB1dCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIG9yIDEwLWRpZ2l0IG1vYmlsZSBudW1iZXInIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwVjIodGhpcy5lbWFpbE9yTnVtYmVyLCB0aGlzLmJ1c2luZXNzSWQgPz8gJycpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzRXhpc3RpbmdVc2VyID0gcmVzcG9uc2U/LmRhdGE/LmlzRXhpc3RpbmdVc2VyID8/IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dGhTY3JlZW4gPSAnT1RQJztcbiAgICAgICAgdGhpcy5zdGFydFJlc2VuZFRpbWVyKDYwKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQIFNlbnQnLCBkZXRhaWw6IHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlID8/ICgnT1RQIHNlbnQgdG8gJyArIHRoaXMuZW1haWxPck51bWJlcikgfSk7XG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNlbmRPVFBOZXcoKSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwVjIodGhpcy5lbWFpbE9yTnVtYmVyLCB0aGlzLmJ1c2luZXNzSWQgPz8gJycpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zdGFydFJlc2VuZFRpbWVyKDYwKTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ09UUCBSZXNlbnQnLCBkZXRhaWw6IHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlID8/ICgnTmV3IE9UUCBzZW50IHRvICcgKyB0aGlzLmVtYWlsT3JOdW1iZXIpIH0pO1xuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeU9UUE5ldygpIHtcbiAgICBpZiAoIXRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xuICAgICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA8IDYpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ09UUCBSZXF1aXJlZCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciB0aGUgNi1kaWdpdCBPVFAnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/ICcnLFxuICAgICAgICBpZGVudGlmaWVyOiB0aGlzLmVtYWlsT3JOdW1iZXIsXG4gICAgICAgIG90cDogdGhpcy5vbmVUaW1lUGFzc3dvcmQsXG4gICAgICAgIGRldmljZUluZm86IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeU90cFYyKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBmbG93ID0gcmVzcG9uc2UuZGF0YT8uZmxvdztcblxuICAgICAgICBpZiAoZmxvdyA9PT0gJ1NJR05VUCcpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmF1dGhTY3JlZW4gPSAnUkVHSVNURVInO1xuXG4gICAgICAgICAgLy8gUHJlZmlsbCBlbWFpbCBvciBwaG9uZSBiYXNlZCBvbiByZWdleFxuICAgICAgICAgIGlmICgvXls2LTldXFxkezl9JC8udGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpKSB7XG4gICAgICAgICAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5lbWFpbE9yTnVtYmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5lbWFpbE9yTnVtYmVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmbG93ID09PSAnTE9HSU4nKSB7XG4gICAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKTtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VyPy5yZWZlcnJhbERldGFpbHMpO1xuICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXRtX3VfaWQnKSkge1xuICAgICAgICAgICAgdGhpcy5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEudXNlcj8udXNlcklkLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXRtX3VfaWQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKTtcbiAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnTG9nZ2VkIEluJywgZGV0YWlsOiAnTG9nZ2VkIGluIHN1Y2Nlc3NmdWxseScgfSk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzY2hlbWUtZGV0YWlsJ10pO1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICAgICAgZWxzZSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgICAgICAgfVxuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJVc2VyKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMudXNlck5hbWUgfHwgdGhpcy51c2VyTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdOYW1lIFJlcXVpcmVkJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbW9iaWxlUmVnZXggPSAvXls2LTldXFxkezl9JC87XG4gICAgICBpZiAoIW1vYmlsZVJlZ2V4LnRlc3QodGhpcy5waG9uZU51bWJlcikpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgMTAtZGlnaXQgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wYXNzd29yZCB8fCB0aGlzLnBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1Bhc3N3b3JkIFJlcXVpcmVkJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgcGFzc3dvcmQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wYXNzd29yZCAhPT0gdGhpcy5jb25mUGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1Bhc3N3b3JkIE1pc21hdGNoJywgZGV0YWlsOiAnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgICBsZXQgdmVyaWZ5U2lnbkRhdGE6IGFueSA9IHtcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5lbWFpbE9yTnVtYmVyLFxuICAgICAgICBuYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBtb2JpbGU6IHRoaXMucGhvbmVOdW1iZXIsXG4gICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICBjb25maXJtUGFzc3dvcmQ6IHRoaXMuY29uZlBhc3N3b3JkLFxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gJycsXG4gICAgICAgIGJ1c2luZXNzTmFtZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JOYW1lJykgPz8gJycsXG4gICAgICAgIHJlZmVycmFsSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpID8/IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmNvbXBsZXRlU2lnbnVwVjIodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpIHtcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdXZWxjb21lIScsIGRldGFpbDogJ1lvdXIgYWNjb3VudCBoYXMgYmVlbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScgfSk7XG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICBlbHNlIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdSZWdpc3RyYXRpb24gRXJyb3InLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2luV2l0aFBhc3N3b3JkKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBJbnB1dCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIG9yIDEwLWRpZ2l0IG1vYmlsZSBudW1iZXInIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucGFzc3dvcmQgfHwgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdQYXNzd29yZCBSZXF1aXJlZCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHBhc3N3b3JkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5lbWFpbE9yTnVtYmVyLFxuICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/ICcnLFxuICAgICAgICBkZXZpY2VJbmZvOiBudWxsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmxvZ2luV2l0aFBhc3N3b3JkTmV3KHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpIHtcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBzdWNjZXNzZnVsbHknIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMubmF2aWdhdGVUb1NjaGVtZURldGFpbHMpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gRmFpbGVkJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMub3RwQ29udHJvbHMuYXQoaW5kZXgpLnZhbHVlIHx8ICcnO1xuICAgIGlmICghL15bMC05XSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICB0aGlzLm90cENvbnRyb2xzLmF0KGluZGV4KS5zZXRWYWx1ZSgnJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDUpIHtcbiAgICAgIHRoaXMuaW5wdXRzLnRvQXJyYXkoKVtpbmRleCArIDFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgJiYgaW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmlucHV0cy50b0FycmF5KClbaW5kZXggLSAxXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIGdldEdyYWRpZW50RGlyZWN0aW9uKGRpcmVjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnRE9XTic6XG4gICAgICAgIHJldHVybiAnJzsgLy8gZGVmYXVsdCB0b3Ag4oaSIGJvdHRvbSAobm8gYW5nbGUgbmVlZGVkKVxuXG4gICAgICBjYXNlICdSSUdIVCc6XG4gICAgICAgIHJldHVybiAnOTBkZWcnO1xuXG4gICAgICBjYXNlICdESUFHT05BTF9SSUdIVCc6XG4gICAgICAgIHJldHVybiAnNDVkZWcnO1xuXG4gICAgICBjYXNlICdESUFHT05BTF9MRUZUJzpcbiAgICAgICAgcmV0dXJuICcxMzVkZWcnO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7IC8vIGZhbGxiYWNrXG4gICAgfVxuICB9XG4gIGdldCBmb250Q29sb3IoKTogc3RyaW5nIHtcbiAgICBsZXQgY29sb3IgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3I7XG4gICAgaWYgKCFjb2xvcikgcmV0dXJuICcjMDAwJztcblxuICAgIC8vIGlmIGdyYWRpZW50LCBleHRyYWN0IGZpcnN0IGhleCBjb2xvclxuICAgIGNvbnN0IGdyYWRpZW50TWF0Y2ggPSBjb2xvci5tYXRjaCgvIyhbMC05YS1mQS1GXXs2fSkvKTtcbiAgICBpZiAoZ3JhZGllbnRNYXRjaCkge1xuICAgICAgY29sb3IgPSBncmFkaWVudE1hdGNoWzBdO1xuICAgIH1cblxuICAgIGNvbG9yID0gY29sb3IucmVwbGFjZSgnIycsICcnKTtcblxuICAgIGNvbnN0IHIgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMCwgMiksIDE2KTtcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoY29sb3Iuc3Vic3RyaW5nKDIsIDQpLCAxNik7XG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZyg0LCA2KSwgMTYpO1xuXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcblxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMTI4ID8gJyMwMDAnIDogJyNmZmYnO1xuICB9XG4gIGdldCBhY2NlbnRCYWNrZ3JvdW5kKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmcgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZDtcblxuICAgIGlmICghYmcpIHJldHVybiAnJztcblxuICAgIGlmIChiZy5hY2NlbnRCYWNrZ3JvdW5kVHlwZSA9PT0gJ1NvbGlkJykge1xuICAgICAgcmV0dXJuIGJnLmFjY2VudENvbG9yO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gdGhpcy5nZXRHcmFkaWVudERpcmVjdGlvbihiZy5ncmFkaWVudERpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gYW5nbGVcbiAgICAgID8gYGxpbmVhci1ncmFkaWVudCgke2FuZ2xlfSwgJHtiZy5hY2NlbnRDb2xvcn0sICR7Ymcuc2Vjb25kYXJ5QWNjZW50Q29sb3J9KWBcbiAgICAgIDogYGxpbmVhci1ncmFkaWVudCgke2JnLmFjY2VudENvbG9yfSwgJHtiZy5zZWNvbmRhcnlBY2NlbnRDb2xvcn0pYDtcbiAgfVxuICBnZXRGb3JtT3RwKCkge1xuICAgIHJldHVybiB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xuICB9XG4gIGxvZ2luVHlwZTogXCJQQVNTV09SRFwiIHwgXCJPVFBcIiA9IFwiT1RQXCI7XG4gIGdlbmVyYXRlT3RwOiBib29sZWFuID0gdHJ1ZTtcbiAgZ2VuZXJhdGVkT3RwOiBhbnkgPSBudWxsO1xuICBvbmVUaW1lUGFzc3dvcmQ6IHN0cmluZyA9IFwiXCI7XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgbG9naW4oKSB7XG4gICAgaWYgKCF0aGlzLmVkaXQpIHtcbiAgICAgIGlmICh0aGlzLmxvZ2luVHlwZSA9PSBcIk9UUFwiKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5T1RQKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZlcmlmeVBhc3N3b3JkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW5kVXNlclJlZmZlcmFsRGV0YWlscyh1c2VySWQ6IGFueSwgcmVmZXJyYWxVbmlxdWVJZDogYW55KSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZCwgcmVmZXJyYWxVbmlxdWVJZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcInJlc3BvbnNlXCIsIHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKVxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpO1xuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKVxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICB9KVxuICB9XG5cbiAgdmVyaWZ5UGFzc3dvcmQoKSB7XG5cbiAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgRW1haWwvTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3IgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuYnVzaW5lc3NJZCA/PyBcIjFmMTI1MGIxLTQ2N2UtNjdiYy1hZDg5LTgxM2E0NGVkMGUwZlwiLFxuICAgICAgZW1haWw6IHRoaXMuZW1haWxPck51bWJlci50b0xvd2VyQ2FzZSgpLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICByZXF1ZXN0VHlwZTogXCJQQVNTV09SRFwiXG4gICAgfVxuXG4gICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnNpZ25pblBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKSB7XG4gICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxuICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLm1lcmdlQW5vbnltb3VzVXNlcih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3N1Y2Nlc3MnKTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBTdWNjZXNzZnVsbHknIH0pO1xuICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xuICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KVxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xuICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NjaGVtZS1kZXRhaWwnXSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KVxuICB9XG4gIHZlcmlmeU9UUCgpIHtcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICghdGhpcy5pc0VtYWlsT3JOdW1iZXJWYWxpZCgpKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBFbWFpbC9Nb2JpbGUnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBvciBtb2JpbGUgbnVtYmVyJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSB0aGlzLm90cENvbnRyb2xzPy52YWx1ZT8uam9pbignJykgfHwgJyc7XG4gICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gXCIxZjA3Y2QwOS1jZjYxLTYwMDgtOTg1NC0wNTRiOThhMTYyN2FcIixcbiAgICAgICAgZW1haWw6IHRoaXMuZW1haWxPck51bWJlci50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBlbnRlcmVkT3RwOiB0aGlzLm9uZVRpbWVQYXNzd29yZCxcbiAgICAgICAgcmVxdWVzdFR5cGU6IFwiT1RQXCJcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdFNlcnZpY2Uuc2lnbmluUGFzc3dvcmQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFJlZmVycmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnJlZmVycmFsRGV0YWlscyk7XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKSB7XG4gICAgICAgICAgdGhpcy5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEudXNlcklkLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5tZXJnZUFub255bW91c1VzZXIodXNlckRldGFpbHMudXNlcklkKTtcbiAgICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSBcIlwiO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdMb2dnZWQgSW4nLCBkZXRhaWw6ICdMb2dnZWQgaW4gU3VjY2Vzc2Z1bGx5JyB9KTtcbiAgICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudClcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSlcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lLWFwcG9pbnRtZW50J10sIHRoaXMudHJ5QXRIb21lTW9kZSA/IHsgcXVlcnlQYXJhbXM6IHsgbW9kZTogdGhpcy50cnlBdEhvbWVNb2RlIH0gfSA6IHt9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBcIlBsZWFzZSBlbnRlciBPVFBcIiB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgc2VuZFNpZ251cE9UUCgpIHtcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaXNPVFBWZXJpZmllZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm1vYmlsZVRpbWVyKVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW9iaWxlVGltZXIpO1xuICAgIHRoaXMubW9iaWxlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1vYmlsZS5sZW5ndGggIT0gMTApXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgICBtb2JpbGU6IHRoaXMubW9iaWxlLFxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbCxcbiAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICAgIGNvdW50cnlDb2RlOiAnOTEnXG4gICAgICB9XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLnNlbmRTaWdudXBPVFAocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzT1RQVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFNlbnQnIH0pO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnT1RQIFJlcXVlc3QnLCBkZXRhaWw6IGVyci5lcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgfSwgODAwKTtcbiAgfVxuICBjcmVhdGVBY2NvdW50KCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbFZhbGlkKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIEVtYWlsJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcycgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc1Bhc3N3b3JkVmFsaWQpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgUGFzc3dvcmQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5tb2JpbGVOdW1iZXJWYWxpZCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBNb2JpbGUgTnVtYmVyJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2aWNlSW5mbzogRGV2aWNlSW5mbyB8IG51bGwgPSB7XG4gICAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgbGV0IHZlcmlmeVNpZ25EYXRhID0ge1xuICAgICAgICBuYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQsXG4gICAgICAgIGJ1c2luZXNzTmFtZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JOYW1lJyksXG4gICAgICAgIG1vYmlsZTogdGhpcy5tb2JpbGUsXG4gICAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICBjb3VudHJ5Q29kZTogXCIrOTFcIixcbiAgICAgICAgZW50ZXJlZE90cDogdGhpcy5vdHAsXG4gICAgICAgIHJlZmVycmFsSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikgPz8gXCJcIlxuICAgICAgfVxuICAgICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICAvLyB0aGlzLnJlc3RTZXJ2aWNlLmdlbmVyYXRlVG9rZW4obG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JJZCcpKS5zdWJzY3JpYmUoe1xuICAgICAgICAvLyAgIG5leHQ6ICh0b2tlblJlc3BvbnNlOiBhbnkpID0+IHtcblxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhdGluZyB0b2tlbjonLCBlcnJvcik7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KVxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xuICAgICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XG4gICAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG5cbiAgICAgICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1NpZ24gVXAnLCBkZXRhaWw6ICdZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnIH0pO1xuICAgICAgICBpZiAodGhpcy5wcm9jZWVkVG9DaGVja291dClcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pOyAgICAgIC8vIFN3YWwuZmlyZSh7XG4gICAgICAgIC8vICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgIC8vICAgdGl0bGU6IFwiSHVycmF5XCIsXG4gICAgICAgIC8vICAgdGV4dDogXCJZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIixcbiAgICAgICAgLy8gICBzaG93Q2FuY2VsQnV0dG9uOiAhKHVzZXJEZXRhaWxzLmNvbnRhY3Q/Lm5hbWU/Lmxlbmd0aCA+IDApLFxuICAgICAgICAvLyAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkkgbG92ZWQgaXRcIixcbiAgICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiBcIkZpbGwgb3RoZXIgYmFzaWMgZGV0YWlsc1wiLFxuICAgICAgICAvLyAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiM5MjhjOGNcIixcbiAgICAgICAgLy8gfSkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgLy8gICBpZiAocmVzdWx0LmlzRGlzbWlzc2VkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKFVzZXJCYXNpY0luZm9Db21wb25lbnQsIHtcbiAgICAgICAgLy8gICAgICAgaGVpZ2h0OiAnNTB2aCcsXG4gICAgICAgIC8vICAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCA+IDQ3NSA/ICc0MHZ3JyA6ICc5NXZ3JyxcbiAgICAgICAgLy8gICAgICAgbWF4V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzEwMHZ3JyA6ICc4MHZ3JyxcbiAgICAgICAgLy8gICAgICAgZGF0YToge31cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSlcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1NpZ251cCBlcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1NpZ251cCBlcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuICB2ZXJpZnlTaWdudXBPVFAoKSB7XG5cbiAgICBpZiAodGhpcy5vdHAubGVuZ3RoICE9IDYpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvIHwgbnVsbCA9IHtcbiAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXG4gICAgfTtcblxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHZlcmlmeVNpZ25EYXRhID0ge1xuICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICBjb3VudHJ5Q29kZTogXCI5MVwiLFxuICAgICAgZW50ZXJlZE90cDogdGhpcy5vdHAsXG4gICAgICByZWZlcnJhbElkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpID8/IFwiXCJcbiAgICB9XG4gICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xuICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpO1xuICAgICAgfVxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFZlcmlmaWVkJyB9KTtcbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdVc2VyIGFscmVhZHkgZXhpc3RzJyB9KVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIE9UUCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciB2YWxpZCBvdHAnIH0pO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgZW50ZXJNb2JpbGUoKSB7XG5cbiAgICBpZiAodGhpcy5tb2JpbGVUaW1lcilcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vYmlsZVRpbWVyKTtcbiAgICB0aGlzLm1vYmlsZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tb2JpbGUubGVuZ3RoICE9IDEwKVxuICAgICAgICByZXR1cm47XG4gICAgICB0aGlzLmdlbmVyYXRlT1RQKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIGdlbmVyYXRlT1RQKCkge1xuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5yZXN0U2VydmljZS5nZW5lcmF0ZU9UUCh0aGlzLm1vYmlsZSA/PyBcIlwiLCBcIjkxXCIpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgc3VtbWFyeTogJ09UUCBTZW50JyxcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgc2VudCB0byBtb2JpbGUuIFZhbGlkIGZvciAzIG1pbnMnLFxuICAgICAgICAgIGxpZmU6IDEwMDAwXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/LmVycm9yPy5tZXNzYWdlO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnT1RQIFJlcXVlc3QnLFxuICAgICAgICAgIGRldGFpbDogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIGxpZmU6IDEwMDAwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQuY2hhckNvZGU7XG4gICAgaWYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1Nykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU9UUChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm90cC5sZW5ndGggPT0gNikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgY2hlY2tTdHJlbmd0aCgpIHtcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA9IDA7XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgKz0gKC9bQS1aXS8udGVzdCh0aGlzLnBhc3N3b3JkKSkgPyAxIDogMDtcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAoL1thLXpdLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICgvXFxkLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICh0aGlzLnBhc3N3b3JkLmxlbmd0aCA+IDggPyAxIDogMCk7XG4gIH1cbiAgZ2V0U3RyZW5ndGhDb2xvcihpbmRleDogbnVtYmVyKSB7XG4gICAgc3dpdGNoICh0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gKGluZGV4IDwgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgPyBcInRvbWF0b1wiIDogXCIjZDNkM2QzYmFcIik7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwib3JhbmdlXCIgOiBcIiNkM2QzZDNiYVwiKTtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIChpbmRleCA8IHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ID8gXCJ5ZWxsb3dcIiA6IFwiI2QzZDNkM2JhXCIpO1xuICAgICAgY2FzZSA0OlxuICAgICAgICByZXR1cm4gKGluZGV4IDwgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgPyBcImxpZ2h0Z3JlZW5cIiA6IFwiI2QzZDNkM2JhXCIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiI2QzZDNkM2JhXCI7XG4gICAgfVxuICB9XG4gIGVtYWlsRGVib3VuY2VUaW1lcjogYW55O1xuICBvbkVtYWlsQ2hhbmdlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmVtYWlsRGVib3VuY2VUaW1lcik7XG4gICAgdGhpcy5lbWFpbERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNFbWFpbFZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuICBlbWFpbENoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRW1haWxWYWxpZCgpIHtcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICAgIHRoaXMuZW1haWxDaGVjayA9ICFlbWFpbFJlZ2V4LnRlc3QodGhpcy5lbWFpbCk7XG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsKTtcbiAgfVxuICBwYXNzd29yZERlYm91bmNlVGltZXI6IGFueTtcbiAgb25QYXNzd29yZENoYW5nZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5wYXNzd29yZERlYm91bmNlVGltZXIpO1xuICAgIHRoaXMucGFzc3dvcmREZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzUGFzc3dvcmRWYWxpZCgpO1xuICAgIH0sIDIwMCk7XG4gIH1cbiAgcGFzc3dvcmRDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1Bhc3N3b3JkVmFsaWQoKSB7XG4gICAgY29uc3QgcGFzc3dvcmRSZWdleCA9IC9eKD89LipbYS16XSkoPz0uKltBLVpdKSg/PS4qXFxkKSg/PS4qW15BLVphLXpcXGRdKS57OCx9JC87XG5cbiAgICBjb25zdCBpc1ZhbGlkID0gcGFzc3dvcmRSZWdleC50ZXN0KHRoaXMucGFzc3dvcmQpO1xuXG4gICAgLy8gWW91IHdhbnQgRkFMU0Ugd2hlbiB2YWxpZFxuICAgIHRoaXMucGFzc3dvcmRDaGVjayA9ICFpc1ZhbGlkO1xuXG4gICAgcmV0dXJuIHRoaXMucGFzc3dvcmRDaGVjaztcbiAgfVxuXG4gIG1vYmlsZURlYm91bmNlVGltZXI6IGFueTtcbiAgb25Nb2JpbGVDaGFuZ2UoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubW9iaWxlRGVib3VuY2VUaW1lcik7XG4gICAgdGhpcy5tb2JpbGVEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1vYmlsZU51bWJlclZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuICBtb2JpbGVDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2JpbGVOdW1iZXJWYWxpZCgpIHtcbiAgICBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzYtOV1cXGR7OX0kLztcbiAgICB0aGlzLm1vYmlsZUNoZWNrID0gIW1vYmlsZVJlZ2V4LnRlc3QodGhpcy5tb2JpbGUpO1xuICAgIHJldHVybiBtb2JpbGVSZWdleC50ZXN0KHRoaXMubW9iaWxlKTtcbiAgfVxuXG4gIGVtYWlsT3JOdW1iZXI6IHN0cmluZyA9IFwiXCI7XG4gIGVtYWlsT3JOdW1iZXJDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VtYWlsT3JOdW1iZXJWYWxpZCgpIHtcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICAgIGNvbnN0IG1vYmlsZVJlZ2V4ID0gL15bNi05XVxcZHs5fSQvO1xuICAgIHRoaXMuZW1haWxPck51bWJlckNoZWNrID0gIWVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpICYmICFtb2JpbGVSZWdleC50ZXN0KHRoaXMuZW1haWxPck51bWJlcik7XG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpIHx8IG1vYmlsZVJlZ2V4LnRlc3QodGhpcy5lbWFpbE9yTnVtYmVyKTtcbiAgfVxuXG5cbiAgZW1haWxPck51bWJlckRlYm91bmNlVGltZXI6IGFueTtcbiAgb25FbWFpbE9yTnVtYmVyQ2hhbmdlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmVtYWlsT3JOdW1iZXJEZWJvdW5jZVRpbWVyKTtcbiAgICB0aGlzLmVtYWlsT3JOdW1iZXJEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzRW1haWxPck51bWJlclZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNDc1O1xuICB9XG5cbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XG4gIH1cblxuICBnZXQgYWNjZW50Q29sb3IoKSB7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgPyB0aGlzLnN0eWxlcy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA6ICcjNjY3ZWVhJztcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWNjZW50LWNvbG9yJywgY29sb3IpO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY2NlbnQtc2hhZG93JywgdGhpcy5oZXhUb1JnYmEoY29sb3IsIDAuNCkpO1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBwcml2YXRlIGhleFRvUmdiYShoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zbGljZSgxLCAzKSwgMTYpO1xuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KTtcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7YWxwaGF9KWA7XG4gIH1cbiAgc2V0dXAzREVmZmVjdHMoKSB7XG4gICAgY29uc3QgbWFpblBhbmVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1haW4tcGFuZWwnKTtcblxuICAgIGlmIChtYWluUGFuZWwpIHtcbiAgICAgIG1haW5QYW5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAoZTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IG1haW5QYW5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlclggPSByZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHJlY3QuaGVpZ2h0IC8gMjtcblxuICAgICAgICBjb25zdCByb3RhdGVYID0gKHkgLSBjZW50ZXJZKSAvIDIwO1xuICAgICAgICBjb25zdCByb3RhdGVZID0gKGNlbnRlclggLSB4KSAvIDIwO1xuXG4gICAgICAgIChtYWluUGFuZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9IGBwZXJzcGVjdGl2ZSgxMjAwcHgpIHJvdGF0ZVgoJHtyb3RhdGVYfWRlZykgcm90YXRlWSgke3JvdGF0ZVl9ZGVnKSB0cmFuc2xhdGVaKDApYDtcbiAgICAgIH0pO1xuXG4gICAgICBtYWluUGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgKG1haW5QYW5lbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZVgoMGRlZykgcm90YXRlWSgwZGVnKSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBzaG93UGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VySWQ6IHN0cmluZykge1xuICAgIGxldCB0cmlhbENhcnRJdGVtOiBhbnlbXSA9IFtdXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5nZXRUcmlhbENhcnQoKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgcmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJUcmlhbENhcnRSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRyaWFsQ2FydEl0ZW0gPSB1c2VyVHJpYWxDYXJ0UmVzcG9uc2UudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWFsQ2FydEl0ZW0/Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGxldCByZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0ID0gbmV3IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QodXNlcklkLCAnVFJJQUxfQ0FSVCcsIHRyaWFsQ2FydEl0ZW0pXG4gICAgICAgIHRoaXMucmVzdFNlcnZpY2UuYWRkVHJpYWxJdGVtKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmNsZWFyVHJpYWxDYXJ0KCk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcblxuICB9XG5cbiAgYmFja1RvSG9tZSgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgfVxufVxuIiwiPHAtdG9hc3QgcG9zaXRpb249XCJib3R0b20tcmlnaHRcIiBbYmFzZVpJbmRleF09XCIxMDAwMDAwMDAwMFwiIFthdXRvWkluZGV4XT1cInRydWVcIlxyXG4gIFtzaG93VHJhbnNmb3JtT3B0aW9uc109XCJpc01vYmlsZSA/ICd0cmFuc2xhdGVZKC0xMDAlKScgOiAnJ1wiPjwvcC10b2FzdD5cclxuXHJcbjxzZWN0aW9uIFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIj5cclxuICA8ZGl2IFtzcGFjaW5nQXJvdW5kXT1cInN0eWxlc0xheW91dFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxvZ2luX2NhcmQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uXCJcclxuICAgICAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGVzPy5sYXlvdXRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFyZWEgdy0xMDBcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJjaXJjbGVzXCIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSA9PT09PSBBVVRIIENBUkQgPT09PT0gLS0+XHJcbiAgICAgIDxkaXYgW2lkXT1cImRhdGE/LmlkXCIgY2xhc3M9XCJtYWluLXBhbmVsIGQtZmxleCBnYXAtMlwiIFtjbGFzcy5zaW5nbGUtcGFuZV09XCIhZGF0YT8uY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZVwiXHJcbiAgICAgICAgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCB3LTEwMFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRoLWNhcmRcIiBbY2xhc3Muc2luZ2xlLXBhbmVdPVwiIWRhdGE/LmNvbnRlbnQ/LmltYWdlPy5zaG93SW1hZ2VcIiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgICBbc2ltcG9Qb3NpdGlvbkxheW91dERpcmVjdGl2ZV09XCJzdHlsZXM/LnBvc2l0aW9uTGF5b3V0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRoLWltYWdlXCIgKm5nSWY9XCJkYXRhPy5jb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiZGF0YT8uY29udGVudD8uaW1hZ2U/LnVybFwiIFthdHRyLmFsdF09XCJkYXRhPy5jb250ZW50Py5pbWFnZT8uYWx0VGV4dCB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF1dGgtaGVyby1pbWFnZVwiIFtzaW1wb0ltYWdlRGlyZWN0aXZlXT1cInN0eWxlcz8uaW1hZ2VcIiBbYXBwSW1hZ2VFZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBbaW1hZ2VEYXRhXT1cImRhdGE/LmNvbnRlbnQ/LmltYWdlXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YT8uaWQrKGRhdGE/LmNvbnRlbnQ/LmltYWdlPy5pZCB8fCAnJylcIiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgICAgICAgW3NpbXBvT2JqZWN0UG9zaXRpb25dPVwiZGF0YT8uY29udGVudD8uaW1hZ2U/LnBvc2l0aW9uXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1mb3JtXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYXV0aFNjcmVlblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1BIT05FJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiYWNrVG9Ib21lKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCB0ZXh0LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtYi0yIGxvZ2luLW1haW4tc2VjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEuNXJlbSAycmVtIDAuNXJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBjbHItYmxhY2sgbG9naW4tdGV4dFwiPkxPR0lOIE9SIFNJR05VUDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm14LTAgbXktMFwiIHN0eWxlPVwiYm9yZGVyLWNvbG9yOiAjZThlOGU4O1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LXNlY3Rpb24gbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXIgbWItM1wiIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGNvbG9yOiM1NTU7XCI+VW5sb2NrIGNvdXBvbnMsIHByb2ZpbGUgYW5kIG11Y2hcclxuICAgICAgICAgICAgICAgICAgICAgIG1vcmVcclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLWVtYWlsLXBob25lLWlucHV0XCI+RW1haWwgLyBNb2JpbGUgTnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtZW1haWwtcGhvbmUtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY2xyLWJsYWNrXCIgWyhuZ01vZGVsKV09XCJlbWFpbE9yTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJqYW5lZG9lQGdtYWlsLmNvbSAvIDk4NzY1NDMyMTBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkVtYWlsT3JOdW1iZXJDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhZW1haWxPck51bWJlckNoZWNrID8gJycgOiAncmVkJ1wiIChrZXl1cC5lbnRlcik9XCJzZW5kT1RQKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmLTEyXCIgKm5nSWY9XCJlbWFpbE9yTnVtYmVyQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAxMC1kaWdpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGUgbnVtYmVyKjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIGdhcC0yIHctMTAwIHB5LTJcIiBbYnV0dG9uRGF0YV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1syXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcclxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhPy5pZCsoZGF0YT8uYWN0aW9uPy5idXR0b25zWzJdPy5pZCB8fCAnJylcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzJdPy5pZCA/PyAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VuZE9UUCgpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbkxvYWRpbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzJdPy5jb250ZW50Py5sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ1NFTkRcclxuICAgICAgICAgICAgICAgICAgICAgIE9UUCcgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xyLWJsYWNrIGZzLTEzXCIgc3R5bGU9XCJmb250LXdlaWdodDo3MDA7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImF1dGhTY3JlZW4gPSAnUEFTU1dPUkQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2luIHdpdGggUGFzc3dvcmRcclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInT1RQJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggdGV4dC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbWItMiBsb2dpbi1tYWluLXNlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMS41cmVtIDJyZW0gMC41cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBjbHItYmxhY2sgbG9naW4tdGV4dFwiPkxPR0lOIE9SIFNJR05VUDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm14LTAgbXktMFwiIHN0eWxlPVwiYm9yZGVyLWNvbG9yOiAjZThlOGU4O1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LXNlY3Rpb24gbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXIgbWItMyBjbHItYmxhY2tcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgRW50ZXIgNi1kaWdpdCBPVFAgc2VudCB0byB7e2VtYWlsT3JOdW1iZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gb3RwX2lucHV0IGdhcC0xIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgdy0xMDAganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0Zvcj1cImxldCBjb250cm9sIG9mIG90cENvbnRyb2xzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgI290cElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIgb3RwLWJveCBjbHItYmxhY2tcIiBtYXhsZW5ndGg9XCIxXCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIiAoaW5wdXQpPVwib25JbnB1dChpKVwiIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIGkpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXNlbmRDb3VudGRvd24gPiAwXCIgY2xhc3M9XCJjbHItYmxhY2sgZnMtMTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6MC4wNGVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSRVNFTkQgSU4gJm5ic3A7e3tmb3JtYXRDb3VudGRvd24ocmVzZW5kQ291bnRkb3duKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlc2VuZENvdW50ZG93biA9PT0gMFwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xyLWJsYWNrIGZzLTEzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDo3MDA7IGxldHRlci1zcGFjaW5nOjAuMDRlbTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZW5kT1RQTmV3KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUkVTRU5EIE9UUFxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG4gZ2FwLTIgdy0xMDAgIHB5LTJcIiBbYnV0dG9uRGF0YV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMV0/LmNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcclxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhPy5pZCsoZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5pZCB8fCAnJylcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5pZCA/PyAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmVyaWZ5T1RQTmV3KClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSBtZS0yXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMV0/LmNvbnRlbnQ/LmxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnVkVSSUZZIE9UUCcgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUkVHSVNURVInXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbWItM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAxLjVyZW0gMnJlbSAwLjVyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGZzLTIwLWZ3LTYwMCBjbHItYmxhY2tcIj5SRUdJU1RFUjwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIHNpZ251cC1pbnB1dC1jb250YWluZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1mdWxsbmFtZS1pbnB1dFwiPkZ1bGwgTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWZ1bGxuYW1lLWlucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwidXNlck5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkphbmUgRG9lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLXJlZy1waG9uZS1pbnB1dFwiPlBob25lIE51bWJlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBwYXNzd29yZC1pbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbHItYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OjUwMDsgcGFkZGluZzogMCA4cHggMCAxMnB4OyB3aGl0ZS1zcGFjZTpub3dyYXA7XCI+KzkxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1yZWctcGhvbmUtaW5wdXRcIiB0eXBlPVwidGVsXCIgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctOTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGhvbmVOdW1iZXJcIiBwbGFjZWhvbGRlcj1cIjk4NzY1NDMyMTBcIiBtYXhsZW5ndGg9XCIxMFwiIGlucHV0bW9kZT1cIm51bWVyaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwib3V0bGluZTpub25lOyBmb250LXNpemU6MTRweDtcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLWVtYWlsLWlucHV0XCI+RW1haWw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1lbWFpbC1pbnB1dFwiIHR5cGU9XCJlbWFpbFwiIGNsYXNzPVwiY2xyLWJsYWNrXCIgWyhuZ01vZGVsKV09XCJlbWFpbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb21cIiAobmdNb2RlbENoYW5nZSk9XCJvbkVtYWlsQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiIWVtYWlsQ2hlY2sgPyAnJyA6ICdyZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtMTJcIiAqbmdJZj1cImVtYWlsQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgRW50ZXIgdmFsaWQgZW1haWwqPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1yZWctcGFzc3dvcmQtaW5wdXRcIj5QYXNzd29yZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtaW5wdXQtY29udGFpbmVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEycHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtcmVnLXBhc3N3b3JkLWlucHV0XCIgW3R5cGVdPVwicGFzc3dvcmRIaWRkZW4gPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImItbm9uZSBjbHItYmxhY2sgdy0xMDBcIiBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXNzd29yZEhpZGRlbiA9ICFwYXNzd29yZEhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFzc3dvcmRIaWRkZW4gPyAndmlzaWJpbGl0eScgOiAndmlzaWJpbGl0eV9vZmYnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1yZWctY29uZi1wYXNzd29yZC1pbnB1dFwiPkNvbmZpcm0gUGFzc3dvcmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLWlucHV0LWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLXJlZy1jb25mLXBhc3N3b3JkLWlucHV0XCIgW3R5cGVdPVwicGFzc3dvcmRIaWRkZW4gPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImItbm9uZSBjbHItYmxhY2sgdy0xMDBcIiBbKG5nTW9kZWwpXT1cImNvbmZQYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiQ29uZmlybSBQYXNzd29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCAgcHktMlwiIFtidXR0b25EYXRhXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5zdHlsZXNcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGE/LmlkKyhkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmlkIHx8ICcnKVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25JZF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmlkID8/ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZWdpc3RlclVzZXIoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIG1lLTJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5jb250ZW50Py5sYWJlbD8ubGVuZ3RoID4gMCA/IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudD8ubGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICdDT05USU5VRScgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUEFTU1dPUkQnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbWItM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAxLjVyZW0gMnJlbSAwLjVyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGZzLTIwLWZ3LTYwMCBjbHItYmxhY2tcIj5MT0dJTjwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIHNpZ251cC1pbnB1dC1jb250YWluZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1wd2QtZW1haWwtaW5wdXRcIj5FbWFpbCAvIE1vYmlsZSBOdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1wd2QtZW1haWwtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY2xyLWJsYWNrXCIgWyhuZ01vZGVsKV09XCJlbWFpbE9yTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJqYW5lZG9lQGdtYWlsLmNvbSAvIDk4NzY1NDMyMTBcIiAobmdNb2RlbENoYW5nZSk9XCJvbkVtYWlsT3JOdW1iZXJDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhZW1haWxPck51bWJlckNoZWNrID8gJycgOiAncmVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmLTEyXCIgKm5nSWY9XCJlbWFpbE9yTnVtYmVyQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgZW50ZXIgdmFsaWQgZW1haWwgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgMTAtZGlnaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlIG51bWJlcio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLWxvZ2luLXBhc3N3b3JkLWlucHV0XCI+UGFzc3dvcmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLWlucHV0LWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWxvZ2luLXBhc3N3b3JkLWlucHV0XCIgW3R5cGVdPVwicGFzc3dvcmRIaWRkZW4gPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImItbm9uZSBjbHItYmxhY2sgdy0xMDBcIiBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImxvZ2luV2l0aFBhc3N3b3JkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFzc3dvcmRIaWRkZW4gPSAhcGFzc3dvcmRIaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Bhc3N3b3JkSGlkZGVuID8gJ3Zpc2liaWxpdHknIDogJ3Zpc2liaWxpdHlfb2ZmJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIGdhcC0yIHctMTAwICBweS0yXCIgW2J1dHRvbkRhdGFdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5jb250ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LnN0eWxlc1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbklkXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uaWQgPz8gJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ2luV2l0aFBhc3N3b3JkKClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSBtZS0yXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ/LmxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnTE9HSU4nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsci1ibGFjayBmcy0xM1wiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NzAwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhdXRoU2NyZWVuID0gJ1BIT05FJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2dpbiB3aXRoIE9UUFxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cclxuICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj4iXX0=
|
|
890
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMv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LFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFFcEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIsb0JBQW9CO3dCQUNwQix1QkFBdUI7d0JBQ3ZCLHVCQUF1Qjt3QkFDdkIsZ0NBQWdDO3FCQUNqQyxhQUNVLENBQUMsY0FBYyxDQUFDOzswQkEwRHhCLFFBQVE7OzBCQUNSLFFBQVE7eUNBckRGLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkErRG9CLE1BQU07c0JBQS9CLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPcHRpb25hbCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XG5pbXBvcnQgeyBEZXZpY2VJbmZvIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3VzZXIubW9kYWwnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJvdHRvbVNoZWV0UmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Nb2RlbCwgQXV0aGVudGljYXRpb25TdHlsZXNNb2RlbCB9IGZyb20gJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQubW9kZWwnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWFyb3VuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcbmltcG9ydCB7IEJ1dHRvbk1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBCdXR0b25FZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWVkaXRvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZUVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Bvc2l0aW9uLWxheW91dC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBvLWF1dGhlbnRpY2F0aW9uLXJlcXVpcmVkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUb2FzdE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNpbXBvQnV0dG9uQ29tcG9uZW50LFxuXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxuICAgIEhvdmVyRGlyZWN0aXZlLFxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSxcbiAgICBCdXR0b25FZGl0b3JEaXJlY3RpdmUsXG4gICAgSW1hZ2VFZGl0b3JEaXJlY3RpdmUsXG4gICAgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUsXG4gICAgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUsXG4gICAgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25SZXF1aXJlZENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIHtcbiAgLy8gcHJpdmF0ZSBlbWFpbFRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBkYXRhPzogQXV0aGVudGljYXRpb25Nb2RlbCB8IGFueTtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xuICBzdHlsZXM/OiBBdXRoZW50aWNhdGlvblN0eWxlc01vZGVsO1xuICBidXR0b24/OiBCdXR0b25Nb2RlbFxuICBidXR0b25JZDogc3RyaW5nID0gJyc7XG5cbiAgYXV0aFNjcmVlbjogJ1BIT05FJyB8ICdPVFAnIHwgJ1JFR0lTVEVSJyB8ICdQQVNTV09SRCcgPSAnUEhPTkUnO1xuICBwcml2YXRlIG1vYmlsZVRpbWVyOiBhbnk7XG4gIHB1YmxpYyBlbWFpbDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIG1vYmlsZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHBob25lTnVtYmVyOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgb3RwOiBzdHJpbmcgPSBcIlwiO1xuICBvdHBDb250cm9scyA9IG5ldyBGb3JtQXJyYXkoW1xuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpXG4gIF0pO1xuXG4gIC8vIFJlc2VuZCBjb3VudGRvd25cbiAgcmVzZW5kQ291bnRkb3duOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHJlc2VuZEludGVydmFsOiBhbnk7XG4gIGlzRXhpc3RpbmdVc2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgY29uZlBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdXNlck5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBidXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBidXNpbmVzc0lkOiBzdHJpbmcgfCBudWxsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpO1xuICBwdWJsaWMgaXNPVFBWZXJpZmllZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcGFzc3dvcmRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aENvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aCA9IFtcbiAgICB7IHR5cGU6IFwibWluaW11bSA4IGNoYXJhY3RlclwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIFVQUEVSQ0FTRVwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIGxvd2VyY2FzZVwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIG51bWJlclwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG5cbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgYm90dG9tc2hlZXRSZWY6IE1hdEJvdHRvbVNoZWV0UmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwidXNlciBhdXRoZW50aWNhdGluZyBiYWNrXCIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpXG4gIH1cblxuICBzaWduVXBFbmFibGVkOiBhbnkgPSB0cnVlO1xuICBwcm9jZWVkVG9DaGVja291dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm9jZWVkVG9FbnJvbGxtZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHRyeUF0SG9tZTogYm9vbGVhbiA9IGZhbHNlO1xuICB0cnlBdEhvbWVNb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgbmF2aWdhdGVUb1NjaGVtZURldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudFBhZ2U6IHN0cmluZyA9IFwiXCI7XG4gIEBWaWV3Q2hpbGRyZW4oJ290cElucHV0JykgaW5wdXRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ2NhcnQnXSlcbiAgICAgICAgdGhpcy5wcm9jZWVkVG9DaGVja291dCA9IHRydWU7XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3JlZGlyZWN0VG8nXSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3JlZGlyZWN0VG8nXTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbSAmJiBwYXJhbVsnc2NoZW1lcyddKSB7XG4gICAgICAgIHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3RyeUF0SG9tZSddKSB7XG4gICAgICAgIHRoaXMudHJ5QXRIb21lID0gdHJ1ZVxuICAgICAgICB0aGlzLnRyeUF0SG9tZU1vZGUgPSBwYXJhbVsnbW9kZSddID8/IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3NjaGVtZURldGFpbCddKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1NjaGVtZURldGFpbHMgPSB0cnVlXG4gICAgICB9XG5cbiAgICB9KVxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XG4gICAgdGhpcy5idXR0b24gPSB0aGlzLmRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXTtcbiAgICB0aGlzLmJ1dHRvbklkID0gKHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5pZCA6ICcnKSArICh0aGlzLmJ1dHRvbiA/IHRoaXMuYnV0dG9uLmlkIDogJycpO1xuICAgIHRoaXMuc2V0QWNjZW50UmdiVmFyKCk7XG5cbiAgICBsZXQgZW5hYmxlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzaWduVXBFbmFibGVkJyk7XG4gICAgaWYgKGVuYWJsZWQgIT0gbnVsbClcbiAgICAgIHRoaXMuc2lnblVwRW5hYmxlZCA9IGVuYWJsZWQgPT09ICd0cnVlJztcblxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHsgfVxuXG4gIC8qKiBTZXRzIC0tYWNjZW50LXJnYiBDU1MgdmFyaWFibGUgc28gYW5pbWF0ZWQgY2lyY2xlcyBtYXRjaCB0aGUgdXNlcidzIGJyYW5kIGNvbG9yICovXG4gIHByaXZhdGUgc2V0QWNjZW50UmdiVmFyKCkge1xuICAgIGNvbnN0IGhleCA9IHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA/PyAnIzY2N2VlYSc7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBpZiAoY2xlYW5IZXgubGVuZ3RoID09PSA2KSB7XG4gICAgICBjb25zdCByID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XG4gICAgICBjb25zdCBnID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWNjZW50LXJnYicsIGAke3J9LCAke2d9LCAke2J9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhbkdvQmFjaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIHBob25lIGlzIHRoZSBmaXJzdCBzY3JlZW47IG5vIGJhY2sgZnJvbSBwaG9uZVxuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIGlmICh0aGlzLmF1dGhTY3JlZW4gPT09ICdPVFAnKSB0aGlzLmF1dGhTY3JlZW4gPSAnUEhPTkUnO1xuICAgIGVsc2UgaWYgKHRoaXMuYXV0aFNjcmVlbiA9PT0gJ1JFR0lTVEVSJykgdGhpcy5hdXRoU2NyZWVuID0gJ09UUCc7XG4gIH1cblxuICBjbG9zZUF1dGgoKSB7XG4gICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIGVsc2UgaWYgKHRoaXMuYm90dG9tc2hlZXRSZWYpIHRoaXMuYm90dG9tc2hlZXRSZWYuZGlzbWlzcygpO1xuICAgIGVsc2UgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnXSk7XG4gIH1cblxuICBmb3JtYXRDb3VudGRvd24oc2VjczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzZWNzIC8gNjApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBzID0gKHNlY3MgJSA2MCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHttfToke3N9YDtcbiAgfVxuXG4gIHN0YXJ0UmVzZW5kVGltZXIoc2Vjb25kczogbnVtYmVyID0gNjApIHtcbiAgICB0aGlzLnJlc2VuZENvdW50ZG93biA9IHNlY29uZHM7XG4gICAgaWYgKHRoaXMucmVzZW5kSW50ZXJ2YWwpIGNsZWFySW50ZXJ2YWwodGhpcy5yZXNlbmRJbnRlcnZhbCk7XG4gICAgdGhpcy5yZXNlbmRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kQ291bnRkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNlbmRDb3VudGRvd24gPD0gMCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZW5kSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLnJlc2VuZENvdW50ZG93biA9IDA7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBzZW5kT1RQKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBJbnB1dCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIG9yIDEwLWRpZ2l0IG1vYmlsZSBudW1iZXInIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwVjIodGhpcy5lbWFpbE9yTnVtYmVyLCB0aGlzLmJ1c2luZXNzSWQgPz8gJycpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzRXhpc3RpbmdVc2VyID0gcmVzcG9uc2U/LmRhdGE/LmlzRXhpc3RpbmdVc2VyID8/IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dGhTY3JlZW4gPSAnT1RQJztcbiAgICAgICAgdGhpcy5zdGFydFJlc2VuZFRpbWVyKDYwKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQIFNlbnQnLCBkZXRhaWw6IHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlID8/ICgnT1RQIHNlbnQgdG8gJyArIHRoaXMuZW1haWxPck51bWJlcikgfSk7XG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNlbmRPVFBOZXcoKSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwVjIodGhpcy5lbWFpbE9yTnVtYmVyLCB0aGlzLmJ1c2luZXNzSWQgPz8gJycpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zdGFydFJlc2VuZFRpbWVyKDYwKTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ09UUCBSZXNlbnQnLCBkZXRhaWw6IHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlID8/ICgnTmV3IE9UUCBzZW50IHRvICcgKyB0aGlzLmVtYWlsT3JOdW1iZXIpIH0pO1xuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeU9UUE5ldygpIHtcbiAgICBpZiAoIXRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xuICAgICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA8IDYpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ09UUCBSZXF1aXJlZCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciB0aGUgNi1kaWdpdCBPVFAnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/ICcnLFxuICAgICAgICBpZGVudGlmaWVyOiB0aGlzLmVtYWlsT3JOdW1iZXIsXG4gICAgICAgIG90cDogdGhpcy5vbmVUaW1lUGFzc3dvcmQsXG4gICAgICAgIGRldmljZUluZm86IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeU90cFYyKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBmbG93ID0gcmVzcG9uc2UuZGF0YT8uZmxvdztcblxuICAgICAgICBpZiAoZmxvdyA9PT0gJ1NJR05VUCcpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmF1dGhTY3JlZW4gPSAnUkVHSVNURVInO1xuXG4gICAgICAgICAgLy8gUHJlZmlsbCBlbWFpbCBvciBwaG9uZSBiYXNlZCBvbiByZWdleFxuICAgICAgICAgIGlmICgvXls2LTldXFxkezl9JC8udGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpKSB7XG4gICAgICAgICAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5lbWFpbE9yTnVtYmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5lbWFpbE9yTnVtYmVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmbG93ID09PSAnTE9HSU4nKSB7XG4gICAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKTtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VyPy5yZWZlcnJhbERldGFpbHMpO1xuICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXRtX3VfaWQnKSkge1xuICAgICAgICAgICAgdGhpcy5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEudXNlcj8udXNlcklkLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXRtX3VfaWQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKTtcbiAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnTG9nZ2VkIEluJywgZGV0YWlsOiAnTG9nZ2VkIGluIHN1Y2Nlc3NmdWxseScgfSk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzY2hlbWUtZGV0YWlsJ10pO1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICAgICAgZWxzZSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgICAgICAgfVxuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJVc2VyKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMudXNlck5hbWUgfHwgdGhpcy51c2VyTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdOYW1lIFJlcXVpcmVkJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbW9iaWxlUmVnZXggPSAvXls2LTldXFxkezl9JC87XG4gICAgICBpZiAoIW1vYmlsZVJlZ2V4LnRlc3QodGhpcy5waG9uZU51bWJlcikpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgMTAtZGlnaXQgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wYXNzd29yZCB8fCB0aGlzLnBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1Bhc3N3b3JkIFJlcXVpcmVkJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgcGFzc3dvcmQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wYXNzd29yZCAhPT0gdGhpcy5jb25mUGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1Bhc3N3b3JkIE1pc21hdGNoJywgZGV0YWlsOiAnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgICBsZXQgdmVyaWZ5U2lnbkRhdGE6IGFueSA9IHtcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5lbWFpbE9yTnVtYmVyLFxuICAgICAgICBuYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBtb2JpbGU6IHRoaXMucGhvbmVOdW1iZXIsXG4gICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICBjb25maXJtUGFzc3dvcmQ6IHRoaXMuY29uZlBhc3N3b3JkLFxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gJycsXG4gICAgICAgIGJ1c2luZXNzTmFtZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JOYW1lJykgPz8gJycsXG4gICAgICAgIHJlZmVycmFsSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpID8/IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmNvbXBsZXRlU2lnbnVwVjIodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpIHtcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdXZWxjb21lIScsIGRldGFpbDogJ1lvdXIgYWNjb3VudCBoYXMgYmVlbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScgfSk7XG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICBlbHNlIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdSZWdpc3RyYXRpb24gRXJyb3InLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2luV2l0aFBhc3N3b3JkKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBJbnB1dCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIG9yIDEwLWRpZ2l0IG1vYmlsZSBudW1iZXInIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucGFzc3dvcmQgfHwgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdQYXNzd29yZCBSZXF1aXJlZCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHBhc3N3b3JkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5lbWFpbE9yTnVtYmVyLFxuICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/ICcnLFxuICAgICAgICBkZXZpY2VJbmZvOiBudWxsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmxvZ2luV2l0aFBhc3N3b3JkTmV3KHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpIHtcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBzdWNjZXNzZnVsbHknIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMubmF2aWdhdGVUb1NjaGVtZURldGFpbHMpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gRmFpbGVkJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMub3RwQ29udHJvbHMuYXQoaW5kZXgpLnZhbHVlIHx8ICcnO1xuICAgIGlmICghL15bMC05XSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICB0aGlzLm90cENvbnRyb2xzLmF0KGluZGV4KS5zZXRWYWx1ZSgnJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDUpIHtcbiAgICAgIHRoaXMuaW5wdXRzLnRvQXJyYXkoKVtpbmRleCArIDFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgJiYgaW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmlucHV0cy50b0FycmF5KClbaW5kZXggLSAxXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIGdldEdyYWRpZW50RGlyZWN0aW9uKGRpcmVjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnRE9XTic6XG4gICAgICAgIHJldHVybiAnJzsgLy8gZGVmYXVsdCB0b3Ag4oaSIGJvdHRvbSAobm8gYW5nbGUgbmVlZGVkKVxuXG4gICAgICBjYXNlICdSSUdIVCc6XG4gICAgICAgIHJldHVybiAnOTBkZWcnO1xuXG4gICAgICBjYXNlICdESUFHT05BTF9SSUdIVCc6XG4gICAgICAgIHJldHVybiAnNDVkZWcnO1xuXG4gICAgICBjYXNlICdESUFHT05BTF9MRUZUJzpcbiAgICAgICAgcmV0dXJuICcxMzVkZWcnO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7IC8vIGZhbGxiYWNrXG4gICAgfVxuICB9XG4gIGdldCBmb250Q29sb3IoKTogc3RyaW5nIHtcbiAgICBsZXQgY29sb3IgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3I7XG4gICAgaWYgKCFjb2xvcikgcmV0dXJuICcjMDAwJztcblxuICAgIC8vIGlmIGdyYWRpZW50LCBleHRyYWN0IGZpcnN0IGhleCBjb2xvclxuICAgIGNvbnN0IGdyYWRpZW50TWF0Y2ggPSBjb2xvci5tYXRjaCgvIyhbMC05YS1mQS1GXXs2fSkvKTtcbiAgICBpZiAoZ3JhZGllbnRNYXRjaCkge1xuICAgICAgY29sb3IgPSBncmFkaWVudE1hdGNoWzBdO1xuICAgIH1cblxuICAgIGNvbG9yID0gY29sb3IucmVwbGFjZSgnIycsICcnKTtcblxuICAgIGNvbnN0IHIgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMCwgMiksIDE2KTtcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoY29sb3Iuc3Vic3RyaW5nKDIsIDQpLCAxNik7XG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZyg0LCA2KSwgMTYpO1xuXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcblxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMTI4ID8gJyMwMDAnIDogJyNmZmYnO1xuICB9XG4gIGdldCBhY2NlbnRCYWNrZ3JvdW5kKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmcgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZDtcblxuICAgIGlmICghYmcpIHJldHVybiAnJztcblxuICAgIGlmIChiZy5hY2NlbnRCYWNrZ3JvdW5kVHlwZSA9PT0gJ1NvbGlkJykge1xuICAgICAgcmV0dXJuIGJnLmFjY2VudENvbG9yO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gdGhpcy5nZXRHcmFkaWVudERpcmVjdGlvbihiZy5ncmFkaWVudERpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gYW5nbGVcbiAgICAgID8gYGxpbmVhci1ncmFkaWVudCgke2FuZ2xlfSwgJHtiZy5hY2NlbnRDb2xvcn0sICR7Ymcuc2Vjb25kYXJ5QWNjZW50Q29sb3J9KWBcbiAgICAgIDogYGxpbmVhci1ncmFkaWVudCgke2JnLmFjY2VudENvbG9yfSwgJHtiZy5zZWNvbmRhcnlBY2NlbnRDb2xvcn0pYDtcbiAgfVxuICBnZXRGb3JtT3RwKCkge1xuICAgIHJldHVybiB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xuICB9XG4gIGxvZ2luVHlwZTogXCJQQVNTV09SRFwiIHwgXCJPVFBcIiA9IFwiT1RQXCI7XG4gIGdlbmVyYXRlT3RwOiBib29sZWFuID0gdHJ1ZTtcbiAgZ2VuZXJhdGVkT3RwOiBhbnkgPSBudWxsO1xuICBvbmVUaW1lUGFzc3dvcmQ6IHN0cmluZyA9IFwiXCI7XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgbG9naW4oKSB7XG4gICAgaWYgKCF0aGlzLmVkaXQpIHtcbiAgICAgIGlmICh0aGlzLmxvZ2luVHlwZSA9PSBcIk9UUFwiKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5T1RQKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZlcmlmeVBhc3N3b3JkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW5kVXNlclJlZmZlcmFsRGV0YWlscyh1c2VySWQ6IGFueSwgcmVmZXJyYWxVbmlxdWVJZDogYW55KSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZCwgcmVmZXJyYWxVbmlxdWVJZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcInJlc3BvbnNlXCIsIHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKVxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpO1xuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKVxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICB9KVxuICB9XG5cbiAgdmVyaWZ5UGFzc3dvcmQoKSB7XG5cbiAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgRW1haWwvTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3IgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuYnVzaW5lc3NJZCA/PyBcIjFmMTI1MGIxLTQ2N2UtNjdiYy1hZDg5LTgxM2E0NGVkMGUwZlwiLFxuICAgICAgZW1haWw6IHRoaXMuZW1haWxPck51bWJlci50b0xvd2VyQ2FzZSgpLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICByZXF1ZXN0VHlwZTogXCJQQVNTV09SRFwiXG4gICAgfVxuXG4gICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnNpZ25pblBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKSB7XG4gICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxuICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLm1lcmdlQW5vbnltb3VzVXNlcih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3N1Y2Nlc3MnKTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBTdWNjZXNzZnVsbHknIH0pO1xuICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xuICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KVxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xuICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NjaGVtZS1kZXRhaWwnXSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KVxuICB9XG4gIHZlcmlmeU9UUCgpIHtcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICghdGhpcy5pc0VtYWlsT3JOdW1iZXJWYWxpZCgpKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBFbWFpbC9Nb2JpbGUnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBvciBtb2JpbGUgbnVtYmVyJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSB0aGlzLm90cENvbnRyb2xzPy52YWx1ZT8uam9pbignJykgfHwgJyc7XG4gICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gXCIxZjA3Y2QwOS1jZjYxLTYwMDgtOTg1NC0wNTRiOThhMTYyN2FcIixcbiAgICAgICAgZW1haWw6IHRoaXMuZW1haWxPck51bWJlci50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBlbnRlcmVkT3RwOiB0aGlzLm9uZVRpbWVQYXNzd29yZCxcbiAgICAgICAgcmVxdWVzdFR5cGU6IFwiT1RQXCJcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdFNlcnZpY2Uuc2lnbmluUGFzc3dvcmQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFJlZmVycmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnJlZmVycmFsRGV0YWlscyk7XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKSB7XG4gICAgICAgICAgdGhpcy5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEudXNlcklkLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5tZXJnZUFub255bW91c1VzZXIodXNlckRldGFpbHMudXNlcklkKTtcbiAgICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSBcIlwiO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdMb2dnZWQgSW4nLCBkZXRhaWw6ICdMb2dnZWQgaW4gU3VjY2Vzc2Z1bGx5JyB9KTtcbiAgICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudClcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSlcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lLWFwcG9pbnRtZW50J10sIHRoaXMudHJ5QXRIb21lTW9kZSA/IHsgcXVlcnlQYXJhbXM6IHsgbW9kZTogdGhpcy50cnlBdEhvbWVNb2RlIH0gfSA6IHt9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBcIlBsZWFzZSBlbnRlciBPVFBcIiB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgc2VuZFNpZ251cE9UUCgpIHtcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaXNPVFBWZXJpZmllZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm1vYmlsZVRpbWVyKVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW9iaWxlVGltZXIpO1xuICAgIHRoaXMubW9iaWxlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1vYmlsZS5sZW5ndGggIT0gMTApXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgICBtb2JpbGU6IHRoaXMubW9iaWxlLFxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbCxcbiAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICAgIGNvdW50cnlDb2RlOiAnOTEnXG4gICAgICB9XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLnNlbmRTaWdudXBPVFAocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzT1RQVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFNlbnQnIH0pO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnT1RQIFJlcXVlc3QnLCBkZXRhaWw6IGVyci5lcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgfSwgODAwKTtcbiAgfVxuICBjcmVhdGVBY2NvdW50KCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbFZhbGlkKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIEVtYWlsJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcycgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc1Bhc3N3b3JkVmFsaWQpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgUGFzc3dvcmQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5tb2JpbGVOdW1iZXJWYWxpZCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBNb2JpbGUgTnVtYmVyJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2aWNlSW5mbzogRGV2aWNlSW5mbyB8IG51bGwgPSB7XG4gICAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgbGV0IHZlcmlmeVNpZ25EYXRhID0ge1xuICAgICAgICBuYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQsXG4gICAgICAgIGJ1c2luZXNzTmFtZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JOYW1lJyksXG4gICAgICAgIG1vYmlsZTogdGhpcy5tb2JpbGUsXG4gICAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICBjb3VudHJ5Q29kZTogXCIrOTFcIixcbiAgICAgICAgZW50ZXJlZE90cDogdGhpcy5vdHAsXG4gICAgICAgIHJlZmVycmFsSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikgPz8gXCJcIlxuICAgICAgfVxuICAgICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICAvLyB0aGlzLnJlc3RTZXJ2aWNlLmdlbmVyYXRlVG9rZW4obG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JJZCcpKS5zdWJzY3JpYmUoe1xuICAgICAgICAvLyAgIG5leHQ6ICh0b2tlblJlc3BvbnNlOiBhbnkpID0+IHtcblxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhdGluZyB0b2tlbjonLCBlcnJvcik7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KVxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xuICAgICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XG4gICAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG5cbiAgICAgICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1NpZ24gVXAnLCBkZXRhaWw6ICdZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnIH0pO1xuICAgICAgICBpZiAodGhpcy5wcm9jZWVkVG9DaGVja291dClcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pOyAgICAgIC8vIFN3YWwuZmlyZSh7XG4gICAgICAgIC8vICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgIC8vICAgdGl0bGU6IFwiSHVycmF5XCIsXG4gICAgICAgIC8vICAgdGV4dDogXCJZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIixcbiAgICAgICAgLy8gICBzaG93Q2FuY2VsQnV0dG9uOiAhKHVzZXJEZXRhaWxzLmNvbnRhY3Q/Lm5hbWU/Lmxlbmd0aCA+IDApLFxuICAgICAgICAvLyAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkkgbG92ZWQgaXRcIixcbiAgICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiBcIkZpbGwgb3RoZXIgYmFzaWMgZGV0YWlsc1wiLFxuICAgICAgICAvLyAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiM5MjhjOGNcIixcbiAgICAgICAgLy8gfSkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgLy8gICBpZiAocmVzdWx0LmlzRGlzbWlzc2VkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKFVzZXJCYXNpY0luZm9Db21wb25lbnQsIHtcbiAgICAgICAgLy8gICAgICAgaGVpZ2h0OiAnNTB2aCcsXG4gICAgICAgIC8vICAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCA+IDQ3NSA/ICc0MHZ3JyA6ICc5NXZ3JyxcbiAgICAgICAgLy8gICAgICAgbWF4V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzEwMHZ3JyA6ICc4MHZ3JyxcbiAgICAgICAgLy8gICAgICAgZGF0YToge31cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSlcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1NpZ251cCBlcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1NpZ251cCBlcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuICB2ZXJpZnlTaWdudXBPVFAoKSB7XG5cbiAgICBpZiAodGhpcy5vdHAubGVuZ3RoICE9IDYpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvIHwgbnVsbCA9IHtcbiAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXG4gICAgfTtcblxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHZlcmlmeVNpZ25EYXRhID0ge1xuICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICBjb3VudHJ5Q29kZTogXCI5MVwiLFxuICAgICAgZW50ZXJlZE90cDogdGhpcy5vdHAsXG4gICAgICByZWZlcnJhbElkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpID8/IFwiXCJcbiAgICB9XG4gICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xuICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpO1xuICAgICAgfVxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFZlcmlmaWVkJyB9KTtcbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdVc2VyIGFscmVhZHkgZXhpc3RzJyB9KVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIE9UUCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciB2YWxpZCBvdHAnIH0pO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgZW50ZXJNb2JpbGUoKSB7XG5cbiAgICBpZiAodGhpcy5tb2JpbGVUaW1lcilcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vYmlsZVRpbWVyKTtcbiAgICB0aGlzLm1vYmlsZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tb2JpbGUubGVuZ3RoICE9IDEwKVxuICAgICAgICByZXR1cm47XG4gICAgICB0aGlzLmdlbmVyYXRlT1RQKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIGdlbmVyYXRlT1RQKCkge1xuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5yZXN0U2VydmljZS5nZW5lcmF0ZU9UUCh0aGlzLm1vYmlsZSA/PyBcIlwiLCBcIjkxXCIpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgc3VtbWFyeTogJ09UUCBTZW50JyxcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgc2VudCB0byBtb2JpbGUuIFZhbGlkIGZvciAzIG1pbnMnLFxuICAgICAgICAgIGxpZmU6IDEwMDAwXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/LmVycm9yPy5tZXNzYWdlO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnT1RQIFJlcXVlc3QnLFxuICAgICAgICAgIGRldGFpbDogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIGxpZmU6IDEwMDAwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQuY2hhckNvZGU7XG4gICAgaWYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1Nykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU9UUChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm90cC5sZW5ndGggPT0gNikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgY2hlY2tTdHJlbmd0aCgpIHtcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA9IDA7XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgKz0gKC9bQS1aXS8udGVzdCh0aGlzLnBhc3N3b3JkKSkgPyAxIDogMDtcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAoL1thLXpdLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICgvXFxkLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICh0aGlzLnBhc3N3b3JkLmxlbmd0aCA+IDggPyAxIDogMCk7XG4gIH1cbiAgZ2V0U3RyZW5ndGhDb2xvcihpbmRleDogbnVtYmVyKSB7XG4gICAgc3dpdGNoICh0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gKGluZGV4IDwgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgPyBcInRvbWF0b1wiIDogXCIjZDNkM2QzYmFcIik7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwib3JhbmdlXCIgOiBcIiNkM2QzZDNiYVwiKTtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIChpbmRleCA8IHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ID8gXCJ5ZWxsb3dcIiA6IFwiI2QzZDNkM2JhXCIpO1xuICAgICAgY2FzZSA0OlxuICAgICAgICByZXR1cm4gKGluZGV4IDwgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgPyBcImxpZ2h0Z3JlZW5cIiA6IFwiI2QzZDNkM2JhXCIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiI2QzZDNkM2JhXCI7XG4gICAgfVxuICB9XG4gIGVtYWlsRGVib3VuY2VUaW1lcjogYW55O1xuICBvbkVtYWlsQ2hhbmdlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmVtYWlsRGVib3VuY2VUaW1lcik7XG4gICAgdGhpcy5lbWFpbERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNFbWFpbFZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuICBlbWFpbENoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRW1haWxWYWxpZCgpIHtcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICAgIHRoaXMuZW1haWxDaGVjayA9ICFlbWFpbFJlZ2V4LnRlc3QodGhpcy5lbWFpbCk7XG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsKTtcbiAgfVxuICBwYXNzd29yZERlYm91bmNlVGltZXI6IGFueTtcbiAgb25QYXNzd29yZENoYW5nZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5wYXNzd29yZERlYm91bmNlVGltZXIpO1xuICAgIHRoaXMucGFzc3dvcmREZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzUGFzc3dvcmRWYWxpZCgpO1xuICAgIH0sIDIwMCk7XG4gIH1cbiAgcGFzc3dvcmRDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1Bhc3N3b3JkVmFsaWQoKSB7XG4gICAgY29uc3QgcGFzc3dvcmRSZWdleCA9IC9eKD89LipbYS16XSkoPz0uKltBLVpdKSg/PS4qXFxkKSg/PS4qW15BLVphLXpcXGRdKS57OCx9JC87XG5cbiAgICBjb25zdCBpc1ZhbGlkID0gcGFzc3dvcmRSZWdleC50ZXN0KHRoaXMucGFzc3dvcmQpO1xuXG4gICAgLy8gWW91IHdhbnQgRkFMU0Ugd2hlbiB2YWxpZFxuICAgIHRoaXMucGFzc3dvcmRDaGVjayA9ICFpc1ZhbGlkO1xuXG4gICAgcmV0dXJuIHRoaXMucGFzc3dvcmRDaGVjaztcbiAgfVxuXG4gIG1vYmlsZURlYm91bmNlVGltZXI6IGFueTtcbiAgb25Nb2JpbGVDaGFuZ2UoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubW9iaWxlRGVib3VuY2VUaW1lcik7XG4gICAgdGhpcy5tb2JpbGVEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1vYmlsZU51bWJlclZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuICBtb2JpbGVDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2JpbGVOdW1iZXJWYWxpZCgpIHtcbiAgICBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzYtOV1cXGR7OX0kLztcbiAgICB0aGlzLm1vYmlsZUNoZWNrID0gIW1vYmlsZVJlZ2V4LnRlc3QodGhpcy5tb2JpbGUpO1xuICAgIHJldHVybiBtb2JpbGVSZWdleC50ZXN0KHRoaXMubW9iaWxlKTtcbiAgfVxuXG4gIGVtYWlsT3JOdW1iZXI6IHN0cmluZyA9IFwiXCI7XG4gIGVtYWlsT3JOdW1iZXJDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VtYWlsT3JOdW1iZXJWYWxpZCgpIHtcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICAgIGNvbnN0IG1vYmlsZVJlZ2V4ID0gL15bNi05XVxcZHs5fSQvO1xuICAgIHRoaXMuZW1haWxPck51bWJlckNoZWNrID0gIWVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpICYmICFtb2JpbGVSZWdleC50ZXN0KHRoaXMuZW1haWxPck51bWJlcik7XG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpIHx8IG1vYmlsZVJlZ2V4LnRlc3QodGhpcy5lbWFpbE9yTnVtYmVyKTtcbiAgfVxuXG5cbiAgZW1haWxPck51bWJlckRlYm91bmNlVGltZXI6IGFueTtcbiAgb25FbWFpbE9yTnVtYmVyQ2hhbmdlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmVtYWlsT3JOdW1iZXJEZWJvdW5jZVRpbWVyKTtcbiAgICB0aGlzLmVtYWlsT3JOdW1iZXJEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzRW1haWxPck51bWJlclZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNDc1O1xuICB9XG5cbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XG4gIH1cblxuICBnZXQgYWNjZW50Q29sb3IoKSB7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgPyB0aGlzLnN0eWxlcy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA6ICcjNjY3ZWVhJztcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWNjZW50LWNvbG9yJywgY29sb3IpO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY2NlbnQtc2hhZG93JywgdGhpcy5oZXhUb1JnYmEoY29sb3IsIDAuNCkpO1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBwcml2YXRlIGhleFRvUmdiYShoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zbGljZSgxLCAzKSwgMTYpO1xuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KTtcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7YWxwaGF9KWA7XG4gIH1cbiAgc2V0dXAzREVmZmVjdHMoKSB7XG4gICAgY29uc3QgbWFpblBhbmVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1haW4tcGFuZWwnKTtcblxuICAgIGlmIChtYWluUGFuZWwpIHtcbiAgICAgIG1haW5QYW5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAoZTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IG1haW5QYW5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlclggPSByZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHJlY3QuaGVpZ2h0IC8gMjtcblxuICAgICAgICBjb25zdCByb3RhdGVYID0gKHkgLSBjZW50ZXJZKSAvIDIwO1xuICAgICAgICBjb25zdCByb3RhdGVZID0gKGNlbnRlclggLSB4KSAvIDIwO1xuXG4gICAgICAgIChtYWluUGFuZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9IGBwZXJzcGVjdGl2ZSgxMjAwcHgpIHJvdGF0ZVgoJHtyb3RhdGVYfWRlZykgcm90YXRlWSgke3JvdGF0ZVl9ZGVnKSB0cmFuc2xhdGVaKDApYDtcbiAgICAgIH0pO1xuXG4gICAgICBtYWluUGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgKG1haW5QYW5lbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZVgoMGRlZykgcm90YXRlWSgwZGVnKSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBzaG93UGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VySWQ6IHN0cmluZykge1xuICAgIGxldCB0cmlhbENhcnRJdGVtOiBhbnlbXSA9IFtdXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5nZXRUcmlhbENhcnQoKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgcmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJUcmlhbENhcnRSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRyaWFsQ2FydEl0ZW0gPSB1c2VyVHJpYWxDYXJ0UmVzcG9uc2UudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWFsQ2FydEl0ZW0/Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGxldCByZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0ID0gbmV3IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QodXNlcklkLCAnVFJJQUxfQ0FSVCcsIHRyaWFsQ2FydEl0ZW0pXG4gICAgICAgIHRoaXMucmVzdFNlcnZpY2UuYWRkVHJpYWxJdGVtKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmNsZWFyVHJpYWxDYXJ0KCk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcblxuICB9XG5cbiAgYmFja1RvSG9tZSgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgfVxufVxuIiwiPHAtdG9hc3QgcG9zaXRpb249XCJib3R0b20tcmlnaHRcIiBbYmFzZVpJbmRleF09XCIxMDAwMDAwMDAwMFwiIFthdXRvWkluZGV4XT1cInRydWVcIlxuICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XG5cbjxzZWN0aW9uIFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIj5cbiAgPGRpdiBbc3BhY2luZ0Fyb3VuZF09XCJzdHlsZXNMYXlvdXRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9naW5fY2FyZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW5cIlxuICAgICAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGVzPy5sYXlvdXRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcmVhIHctMTAwXCI+XG4gICAgICAgIDx1bCBjbGFzcz1cImNpcmNsZXNcIiBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtpZF09XCJkYXRhPy5pZFwiPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gPT09PT0gQVVUSCBDQVJEID09PT09IC0tPlxuICAgICAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cIm1haW4tcGFuZWwgZC1mbGV4IGdhcC0yXCIgW2NsYXNzLnNpbmdsZS1wYW5lXT1cIiFkYXRhPy5jb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlXCJcbiAgICAgICAgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgdy0xMDBcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF1dGgtY2FyZFwiIFtjbGFzcy5zaW5nbGUtcGFuZV09XCIhZGF0YT8uY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZVwiIFtpZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICBbc2ltcG9Qb3NpdGlvbkxheW91dERpcmVjdGl2ZV09XCJzdHlsZXM/LnBvc2l0aW9uTGF5b3V0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1pbWFnZVwiICpuZ0lmPVwiZGF0YT8uY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZVwiPlxuICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJkYXRhPy5jb250ZW50Py5pbWFnZT8udXJsXCIgW2F0dHIuYWx0XT1cImRhdGE/LmNvbnRlbnQ/LmltYWdlPy5hbHRUZXh0IHx8ICcnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF1dGgtaGVyby1pbWFnZVwiIFtzaW1wb0ltYWdlRGlyZWN0aXZlXT1cInN0eWxlcz8uaW1hZ2VcIiBbYXBwSW1hZ2VFZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2ltYWdlRGF0YV09XCJkYXRhPy5jb250ZW50Py5pbWFnZVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCsoZGF0YT8uY29udGVudD8uaW1hZ2U/LmlkIHx8ICcnKVwiIFtpZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICAgICAgW3NpbXBvT2JqZWN0UG9zaXRpb25dPVwiZGF0YT8uY29udGVudD8uaW1hZ2U/LnBvc2l0aW9uXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRoLWZvcm1cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYXV0aFNjcmVlblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidQSE9ORSdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmFja1RvSG9tZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHRleHQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTIgbG9naW4tbWFpbi1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEuNXJlbSAycmVtIDAuNXJlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgY2xyLWJsYWNrIGxvZ2luLXRleHRcIj5MT0dJTiBPUiBTSUdOVVA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJteC0wIG15LTBcIiBzdHlsZT1cImJvcmRlci1jb2xvcjogI2U4ZThlODtcIj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LXNlY3Rpb24gbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyIG1iLTNcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBjb2xvcjojNTU1O1wiPlVubG9jayBjb3Vwb25zLCBwcm9maWxlIGFuZCBtdWNoXG4gICAgICAgICAgICAgICAgICAgICAgbW9yZVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLWVtYWlsLXBob25lLWlucHV0XCI+RW1haWwgLyBNb2JpbGUgTnVtYmVyPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWVtYWlsLXBob25lLWlucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwiZW1haWxPck51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImphbmVkb2VAZ21haWwuY29tIC8gOTg3NjU0MzIxMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRW1haWxPck51bWJlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhZW1haWxPck51bWJlckNoZWNrID8gJycgOiAncmVkJ1wiIChrZXl1cC5lbnRlcik9XCJzZW5kT1RQKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwiZW1haWxPck51bWJlckNoZWNrXCIgW3N0eWxlLmNvbG9yXT1cIidyZWQnXCI+UGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwLWRpZ2l0XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGUgbnVtYmVyKjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIGdhcC0yIHctMTAwIHB5LTJcIiBbYnV0dG9uRGF0YV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LnN0eWxlc1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGE/LmlkKyhkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmlkIHx8ICcnKVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbklkXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1syXT8uaWQgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZW5kT1RQKClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1syXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmNvbnRlbnQ/LmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICdTRU5EXG4gICAgICAgICAgICAgICAgICAgICAgT1RQJyB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xyLWJsYWNrIGZzLTEzXCIgc3R5bGU9XCJmb250LXdlaWdodDo3MDA7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhdXRoU2NyZWVuID0gJ1BBU1NXT1JEJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTG9naW4gd2l0aCBQYXNzd29yZFxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidPVFAnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHRleHQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTIgbG9naW4tbWFpbi1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAxLjVyZW0gMnJlbSAwLjVyZW07XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBjbHItYmxhY2sgbG9naW4tdGV4dFwiPkxPR0lOIE9SIFNJR05VUDwvcD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXgtMCBteS0wXCIgc3R5bGU9XCJib3JkZXItY29sb3I6ICNlOGU4ZTg7XCI+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1zZWN0aW9uIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtYi0zIGNsci1ibGFja1wiIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgRW50ZXIgNi1kaWdpdCBPVFAgc2VudCB0byB7e2VtYWlsT3JOdW1iZXJ9fVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gb3RwX2lucHV0IGdhcC0xIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIHctMTAwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nRm9yPVwibGV0IGNvbnRyb2wgb2Ygb3RwQ29udHJvbHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiAjb3RwSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIgb3RwLWJveCBjbHItYmxhY2tcIiBtYXhsZW5ndGg9XCIxXCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgKGlucHV0KT1cIm9uSW5wdXQoaSlcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCBpKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXNlbmRDb3VudGRvd24gPiAwXCIgY2xhc3M9XCJjbHItYmxhY2sgZnMtMTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDo3MDA7IGxldHRlci1zcGFjaW5nOjAuMDRlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJFU0VORCBJTiAmbmJzcDt7e2Zvcm1hdENvdW50ZG93bihyZXNlbmRDb3VudGRvd24pfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXNlbmRDb3VudGRvd24gPT09IDBcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsci1ibGFjayBmcy0xM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6MC4wNGVtOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZW5kT1RQTmV3KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJFU0VORCBPVFBcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCAgcHktMlwiIFtidXR0b25EYXRhXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5pZCA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZlcmlmeU9UUE5ldygpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIG1lLTJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMV0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5jb250ZW50Py5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAnVkVSSUZZIE9UUCcgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidSRUdJU1RFUidcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbWItM1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMS41cmVtIDJyZW0gMC41cmVtO1wiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgZnMtMjAtZnctNjAwIGNsci1ibGFja1wiPlJFR0lTVEVSPC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggdy0xMDAgc2lnbnVwLWlucHV0LWNvbnRhaW5lciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF1dGgtZnVsbG5hbWUtaW5wdXRcIj5GdWxsIE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtZnVsbG5hbWUtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY2xyLWJsYWNrXCIgWyhuZ01vZGVsKV09XCJ1c2VyTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkphbmUgRG9lXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1yZWctcGhvbmUtaW5wdXRcIj5QaG9uZSBOdW1iZXI8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHBhc3N3b3JkLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbHItYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo1MDA7IHBhZGRpbmc6IDAgOHB4IDAgMTJweDsgd2hpdGUtc3BhY2U6bm93cmFwO1wiPis5MVxuICAgICAgICAgICAgICAgICAgICAgICAgICB8PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1yZWctcGhvbmUtaW5wdXRcIiB0eXBlPVwidGVsXCIgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctOTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBob25lTnVtYmVyXCIgcGxhY2Vob2xkZXI9XCI5ODc2NTQzMjEwXCIgbWF4bGVuZ3RoPVwiMTBcIiBpbnB1dG1vZGU9XCJudW1lcmljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvdXRsaW5lOm5vbmU7IGZvbnQtc2l6ZToxNHB4O1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1lbWFpbC1pbnB1dFwiPkVtYWlsPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWVtYWlsLWlucHV0XCIgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJjbHItYmxhY2tcIiBbKG5nTW9kZWwpXT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb21cIiAobmdNb2RlbENoYW5nZSk9XCJvbkVtYWlsQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cIiFlbWFpbENoZWNrID8gJycgOiAncmVkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwiZW1haWxDaGVja1wiIFtzdHlsZS5jb2xvcl09XCIncmVkJ1wiPlBsZWFzZSBFbnRlciB2YWxpZCBlbWFpbCo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1yZWctcGFzc3dvcmQtaW5wdXRcIj5QYXNzd29yZDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLWlucHV0LWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTJweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtcmVnLXBhc3N3b3JkLWlucHV0XCIgW3R5cGVdPVwicGFzc3dvcmRIaWRkZW4gPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctMTAwXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXNzd29yZEhpZGRlbiA9ICFwYXNzd29yZEhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Bhc3N3b3JkSGlkZGVuID8gJ3Zpc2liaWxpdHknIDogJ3Zpc2liaWxpdHlfb2ZmJ319XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF1dGgtcmVnLWNvbmYtcGFzc3dvcmQtaW5wdXRcIj5Db25maXJtIFBhc3N3b3JkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtaW5wdXQtY29udGFpbmVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1yZWctY29uZi1wYXNzd29yZC1pbnB1dFwiIFt0eXBlXT1cInBhc3N3b3JkSGlkZGVuID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYi1ub25lIGNsci1ibGFjayB3LTEwMFwiIFsobmdNb2RlbCldPVwiY29uZlBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJDb25maXJtIFBhc3N3b3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCAgcHktMlwiIFtidXR0b25EYXRhXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5pZCA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZ2lzdGVyVXNlcigpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIG1lLTJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5jb250ZW50Py5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAnQ09OVElOVUUnIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUEFTU1dPUkQnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEuNXJlbSAycmVtIDAuNXJlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGZzLTIwLWZ3LTYwMCBjbHItYmxhY2tcIj5MT0dJTjwvcD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIHNpZ251cC1pbnB1dC1jb250YWluZXIgZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLXB3ZC1lbWFpbC1pbnB1dFwiPkVtYWlsIC8gTW9iaWxlIE51bWJlcjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1wd2QtZW1haWwtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY2xyLWJsYWNrXCIgWyhuZ01vZGVsKV09XCJlbWFpbE9yTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb20gLyA5ODc2NTQzMjEwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25FbWFpbE9yTnVtYmVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cIiFlbWFpbE9yTnVtYmVyQ2hlY2sgPyAnJyA6ICdyZWQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmLTEyXCIgKm5nSWY9XCJlbWFpbE9yTnVtYmVyQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgZW50ZXIgdmFsaWQgZW1haWwgb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwLWRpZ2l0XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGUgbnVtYmVyKjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLWxvZ2luLXBhc3N3b3JkLWlucHV0XCI+UGFzc3dvcmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1pbnB1dC1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEycHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWxvZ2luLXBhc3N3b3JkLWlucHV0XCIgW3R5cGVdPVwicGFzc3dvcmRIaWRkZW4gPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctMTAwXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwibG9naW5XaXRoUGFzc3dvcmQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhc3N3b3JkSGlkZGVuID0gIXBhc3N3b3JkSGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFzc3dvcmRIaWRkZW4gPyAndmlzaWJpbGl0eScgOiAndmlzaWJpbGl0eV9vZmYnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCAgcHktMlwiIFtidXR0b25EYXRhXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5pZCA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ2luV2l0aFBhc3N3b3JkKClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ/LmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICdMT0dJTicgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsci1ibGFjayBmcy0xM1wiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NzAwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXV0aFNjcmVlbiA9ICdQSE9ORSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2luIHdpdGggT1RQXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxuICA8L2Rpdj5cblxuPC9zZWN0aW9uPiJdfQ==
|