UNPKG

ngx-slice-kit

Version:

[![npm version](https://badge.fury.io/js/ngx-slice-kit.svg)](https://badge.fury.io/js/ngx-slice-kit)

114 lines 18.3 kB
import { Component, EventEmitter, HostBinding, Inject, Input, Output, PLATFORM_ID, ViewChild } from '@angular/core'; import { animate, state, style, transition, trigger } from '@angular/animations'; // internal import { DialogDirective } from './dialog.directive'; import { NavigationStart } from '@angular/router'; import { filter } from 'rxjs/operators'; import { DOCUMENT, isPlatformBrowser } from '@angular/common'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "./dialog.directive"; export class DialogComponent { constructor(document, platformId, cfResolver, router) { this.document = document; this.platformId = platformId; this.cfResolver = cfResolver; this.router = router; this.hideOnEscape = true; this.hideOnBackdrop = true; this.borderRadius = 0; this.state = 'closed'; this.closed = new EventEmitter(); this.br = '0'; } loadComponent() { const componentFactory = this.cfResolver.resolveComponentFactory(this.component); const viewRef = this.modalDirective.viewContainerRef; viewRef.clear(); const componentRef = viewRef.createComponent(componentFactory); componentRef.instance.data = this.data; componentRef.instance.resultEvent.subscribe(res => { this.closed.next(res); this.closed.complete(); }); } onSuccess(result) { this.closed.next(result); this.closed.complete(); } onBackdrop() { if (this.hideOnBackdrop) { this.onSuccess(null); } } hideOnRouterEvents() { const sub = this.router.events.pipe(filter(event => event instanceof NavigationStart)).subscribe(() => { this.onBackdrop(); }); this.escapeSub ? this.escapeSub.add(sub) : this.escapeSub = sub; } ngOnInit() { if (isPlatformBrowser(this.platformId)) { this.state = 'opened'; if (this.borderRadius > 0) { this.br = `${this.borderRadius}px`; } this.loadComponent(); this.hideOnRouterEvents(); } } ngOnDestroy() { this.closed.complete(); if (this.escapeSub) { this.escapeSub.unsubscribe(); } this.state = 'closed'; } } DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DialogComponent, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ComponentFactoryResolver }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: DialogComponent, selector: "sdk-dialog", inputs: { id: "id", data: "data", hideOnEscape: "hideOnEscape", hideOnBackdrop: "hideOnBackdrop", borderRadius: "borderRadius", disableScroll: "disableScroll", component: "component" }, outputs: { closed: "closed" }, host: { properties: { "attr.state": "this.state" } }, viewQueries: [{ propertyName: "modalDirective", first: true, predicate: DialogDirective, descendants: true, static: true }], ngImport: i0, template: "<div class=\"sdk-dialog-wrap flex-column layout-center-center\" [style.zIndex]=\"id\" autofocus>\n <div class=\"sdk-dialog-container flex-row layout-center-center\">\n <div class=\"sdk-dialog-backdrop\" (click)=\"onBackdrop()\"></div>\n <div class=\"sdk-dialog-content-wrap flex-column\" [style.borderRadius]=\"br\">\n <div class=\"sdk-dialog-content\" [style.borderRadius]=\"br\" [class.disable-scroll]=\"disableScroll\">\n <ng-template sdkDialog></ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@keyframes openDialog{0%{transform:scale(.5) translateY(100px);opacity:0}}.sdk-dialog-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;width:100vw;height:100vh;overflow:hidden}.sdk-dialog-wrap .sdk-dialog-container{position:relative;z-index:1;width:100%;height:100%;overflow-x:hidden;overflow-y:auto}.sdk-dialog-wrap .sdk-dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;background:rgba(21,21,21,.6);animation:opacity .2s}.sdk-dialog-wrap .sdk-dialog-content-wrap{position:relative;z-index:2;min-width:288px;max-width:80%;min-height:80px;max-height:80%;overflow:hidden;animation:openDialog .3s}.sdk-dialog-wrap .sdk-dialog-content-wrap .sdk-dialog-content{overflow-y:auto;overflow-x:hidden}.sdk-dialog-wrap .sdk-dialog-content-wrap .sdk-dialog-content.disable-scroll{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.DialogDirective, selector: "[sdkDialog]" }], animations: [ trigger('state', [ state('opened', style({ transform: 'translateY(0%)' })), state('void, closed', style({ transform: 'translateY(100%)', opacity: 0 })), transition('* => *', animate('300ms ease-in')), ]) ] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DialogComponent, decorators: [{ type: Component, args: [{ selector: 'sdk-dialog', animations: [ trigger('state', [ state('opened', style({ transform: 'translateY(0%)' })), state('void, closed', style({ transform: 'translateY(100%)', opacity: 0 })), transition('* => *', animate('300ms ease-in')), ]) ], template: "<div class=\"sdk-dialog-wrap flex-column layout-center-center\" [style.zIndex]=\"id\" autofocus>\n <div class=\"sdk-dialog-container flex-row layout-center-center\">\n <div class=\"sdk-dialog-backdrop\" (click)=\"onBackdrop()\"></div>\n <div class=\"sdk-dialog-content-wrap flex-column\" [style.borderRadius]=\"br\">\n <div class=\"sdk-dialog-content\" [style.borderRadius]=\"br\" [class.disable-scroll]=\"disableScroll\">\n <ng-template sdkDialog></ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@keyframes openDialog{0%{transform:scale(.5) translateY(100px);opacity:0}}.sdk-dialog-wrap{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;width:100vw;height:100vh;overflow:hidden}.sdk-dialog-wrap .sdk-dialog-container{position:relative;z-index:1;width:100%;height:100%;overflow-x:hidden;overflow-y:auto}.sdk-dialog-wrap .sdk-dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;background:rgba(21,21,21,.6);animation:opacity .2s}.sdk-dialog-wrap .sdk-dialog-content-wrap{position:relative;z-index:2;min-width:288px;max-width:80%;min-height:80px;max-height:80%;overflow:hidden;animation:openDialog .3s}.sdk-dialog-wrap .sdk-dialog-content-wrap .sdk-dialog-content{overflow-y:auto;overflow-x:hidden}.sdk-dialog-wrap .sdk-dialog-content-wrap .sdk-dialog-content.disable-scroll{overflow:hidden}\n"] }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i0.ComponentFactoryResolver }, { type: i1.Router }]; }, propDecorators: { id: [{ type: Input }], data: [{ type: Input }], hideOnEscape: [{ type: Input }], hideOnBackdrop: [{ type: Input }], borderRadius: [{ type: Input }], disableScroll: [{ type: Input }], component: [{ type: Input }], modalDirective: [{ type: ViewChild, args: [DialogDirective, { static: true }] }], state: [{ type: HostBinding, args: ['attr.state'] }], closed: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXNsaWNlLWtpdC9zcmMvbGliL21vZGFscy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXNsaWNlLWtpdC9zcmMvbGliL21vZGFscy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakYsV0FBVztBQUNYLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFjaEYsTUFBTSxPQUFPLGVBQWU7SUFrQnhCLFlBQzhCLFFBQWEsRUFDVixVQUFlLEVBQ3BDLFVBQW9DLEVBQ3BDLE1BQWM7UUFISSxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1YsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUNwQyxlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBbEJWLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzdCLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLGlCQUFZLEdBQVcsQ0FBQyxD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QUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUN6RSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRCxDQUFDO0tBQ0w7MkZBRVEsZUFBZTtrQkFaM0IsU0FBUzsrQkFDSSxZQUFZLGNBR1Y7d0JBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRTs0QkFDYixLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLENBQUM7NEJBQ3JELEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDOzRCQUN6RSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQzt5QkFDakQsQ0FBQztxQkFDTDs7MEJBcUJJLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxXQUFXO3dHQWxCUCxFQUFFO3NCQUFqQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUM2QyxjQUFjO3NCQUFoRSxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBRVIsS0FBSztzQkFBdEMsV0FBVzt1QkFBQyxZQUFZO2dCQUVSLE1BQU07c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuLy8gaW50ZXJuYWxcbmltcG9ydCB7IERpYWxvZ0RpcmVjdGl2ZSB9IGZyb20gJy4vZGlhbG9nLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuL2RpYWxvZy5tb2RlbCc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIsIGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Nkay1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignc3RhdGUnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnb3BlbmVkJywgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCUpJ30pKSxcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkLCBjbG9zZWQnLCBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMDAlKScsIG9wYWNpdHk6IDB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCcqID0+IConLCBhbmltYXRlKCczMDBtcyBlYXNlLWluJykpLFxuICAgICAgICBdKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcHVibGljIGlkOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIGRhdGE6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZU9uRXNjYXBlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZU9uQmFja2Ryb3A6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBib3JkZXJSYWRpdXM6IG51bWJlciA9IDA7XG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVTY3JvbGw6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGNvbXBvbmVudDogYW55O1xuICAgIEBWaWV3Q2hpbGQoRGlhbG9nRGlyZWN0aXZlLCB7c3RhdGljOiB0cnVlfSkgcHVibGljIG1vZGFsRGlyZWN0aXZlOiBEaWFsb2dEaXJlY3RpdmU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuc3RhdGUnKSBwdWJsaWMgc3RhdGU6ICdvcGVuZWQnIHwgJ2Nsb3NlZCcgPSAnY2xvc2VkJztcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGJyOiBzdHJpbmcgPSAnMCc7XG4gICAgcHVibGljIGVzY2FwZVN1YjogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgICAgIHByaXZhdGUgY2ZSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRDb21wb25lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNmUmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb21wb25lbnQpO1xuXG4gICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLm1vZGFsRGlyZWN0aXZlLnZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHZpZXdSZWYuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3UmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICAgICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBEaWFsb2cpLmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgRGlhbG9nKS5yZXN1bHRFdmVudC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLm5leHQocmVzKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Y2Nlc3MocmVzdWx0OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZWQubmV4dChyZXN1bHQpO1xuICAgICAgICB0aGlzLmNsb3NlZC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJhY2tkcm9wKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oaWRlT25CYWNrZHJvcCkge1xuICAgICAgICAgICAgdGhpcy5vblN1Y2Nlc3MobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZU9uUm91dGVyRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWIgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydClcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkJhY2tkcm9wKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXNjYXBlU3ViID8gdGhpcy5lc2NhcGVTdWIuYWRkKHN1YikgOiB0aGlzLmVzY2FwZVN1YiA9IHN1YjtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgICAgICAgICBpZiAodGhpcy5ib3JkZXJSYWRpdXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iciA9IGAke3RoaXMuYm9yZGVyUmFkaXVzfXB4YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XG5cbiAgICAgICAgICAgIHRoaXMuaGlkZU9uUm91dGVyRXZlbnRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VkLmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICh0aGlzLmVzY2FwZVN1Yikge1xuICAgICAgICAgICAgdGhpcy5lc2NhcGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgfVxuXG59XG5cbiIsIjxkaXYgY2xhc3M9XCJzZGstZGlhbG9nLXdyYXAgZmxleC1jb2x1bW4gbGF5b3V0LWNlbnRlci1jZW50ZXJcIiBbc3R5bGUuekluZGV4XT1cImlkXCIgYXV0b2ZvY3VzPlxuICAgIDxkaXYgY2xhc3M9XCJzZGstZGlhbG9nLWNvbnRhaW5lciBmbGV4LXJvdyBsYXlvdXQtY2VudGVyLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2RrLWRpYWxvZy1iYWNrZHJvcFwiIChjbGljayk9XCJvbkJhY2tkcm9wKClcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNkay1kaWFsb2ctY29udGVudC13cmFwIGZsZXgtY29sdW1uXCIgW3N0eWxlLmJvcmRlclJhZGl1c109XCJiclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkay1kaWFsb2ctY29udGVudFwiIFtzdHlsZS5ib3JkZXJSYWRpdXNdPVwiYnJcIiBbY2xhc3MuZGlzYWJsZS1zY3JvbGxdPVwiZGlzYWJsZVNjcm9sbFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBzZGtEaWFsb2c+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19