UNPKG

ontimize-web-ngx

Version:
69 lines 15 kB
import { Component, Injector, ViewEncapsulation } from '@angular/core'; import { Router } from '@angular/router'; import { BehaviorSubject, Subscription } from 'rxjs'; import { OBreadcrumbService } from '../../services/o-breadcrumb.service'; import { Codes } from '../../util/codes'; import { Util } from '../../util/util'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/material/icon"; import * as i3 from "@angular/material/toolbar"; import * as i4 from "../../pipes/o-translate.pipe"; export const DEFAULT_INPUTS_O_BREADCRUMB = [ '_formRef: form', 'labelColumns: label-columns', 'separator' ]; export class OBreadcrumbComponent { set form(value) { this._formRef = value; } constructor(injector) { this.injector = injector; this.separator = ' '; this.breadcrumbs = new BehaviorSubject([]); this.labelColsArray = []; this.subscription = new Subscription(); this.router = this.injector.get(Router); this.oBreadcrumService = this.injector.get(OBreadcrumbService); } ngOnInit() { this.labelColsArray = Util.parseArray(this.labelColumns); this.subscription.add(this.oBreadcrumService.breadcrumbs$.subscribe(bs => this.breadcrumbs.next(bs))); } ngAfterViewInit() { if (this._formRef && this.labelColsArray.length) { const self = this; this.subscription.add(this._formRef.onDataLoaded.subscribe((value) => { if (self.breadcrumbs.value.length) { const displayText = self.labelColsArray.map(element => value[element]).join(self.separator); self.breadcrumbs.value[self.breadcrumbs.value.length - 1].displayText = displayText; } })); } } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } isCurrentRoute(route) { return route.route === this.router.routerState.snapshot.url.split('?')[0]; } onRouteClick(route) { const extras = {}; if (route.queryParams) { extras[Codes.QUERY_PARAMS] = route.queryParams; } this.router.navigate([route.route], extras); } } OBreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OBreadcrumbComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); OBreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OBreadcrumbComponent, selector: "o-breadcrumb", inputs: { _formRef: ["form", "_formRef"], labelColumns: ["label-columns", "labelColumns"], separator: "separator" }, host: { properties: { "class.o-breadcrumb": "true" } }, ngImport: i0, template: "<mat-toolbar class=\"toolbar-breadcrumb\">\n <ng-container *ngFor=\"let route of breadcrumbs | async; index as i; last as isLast\">\n <span *ngIf=\"isCurrentRoute(route); else bredcrumItem\" class=\"breadcrumb-item active\" layout-padding>\n {{ route.displayText ? route.displayText : route.label | uppercase | oTranslate }}\n </span>\n <ng-template #bredcrumItem>\n <a (click)=\"onRouteClick(route)\" class=\"breadcrumb-item\" layout-padding>\n {{ route.displayText ? route.displayText : route.label | uppercase | oTranslate }}\n </a>\n </ng-template>\n <mat-icon *ngIf=\"!isLast\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-container>\n</mat-toolbar>\n", styles: [".o-breadcrumb{display:flex;height:50px;min-height:50px;padding-bottom:8px}.o-breadcrumb .mat-toolbar{box-shadow:2px 2px 6px #0000003d;background:#ffffff;border-radius:6px;min-height:50px;max-height:50px}.o-breadcrumb .mat-toolbar .mat-toolbar-row{height:50px}.o-breadcrumb .mat-toolbar a{text-decoration:none;cursor:pointer}.o-breadcrumb .mat-toolbar span{cursor:default}.o-breadcrumb .mat-toolbar a,.o-breadcrumb .mat-toolbar span{padding-top:0;padding-bottom:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i4.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OBreadcrumbComponent, decorators: [{ type: Component, args: [{ selector: 'o-breadcrumb', inputs: DEFAULT_INPUTS_O_BREADCRUMB, encapsulation: ViewEncapsulation.None, host: { '[class.o-breadcrumb]': 'true' }, template: "<mat-toolbar class=\"toolbar-breadcrumb\">\n <ng-container *ngFor=\"let route of breadcrumbs | async; index as i; last as isLast\">\n <span *ngIf=\"isCurrentRoute(route); else bredcrumItem\" class=\"breadcrumb-item active\" layout-padding>\n {{ route.displayText ? route.displayText : route.label | uppercase | oTranslate }}\n </span>\n <ng-template #bredcrumItem>\n <a (click)=\"onRouteClick(route)\" class=\"breadcrumb-item\" layout-padding>\n {{ route.displayText ? route.displayText : route.label | uppercase | oTranslate }}\n </a>\n </ng-template>\n <mat-icon *ngIf=\"!isLast\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-container>\n</mat-toolbar>\n", styles: [".o-breadcrumb{display:flex;height:50px;min-height:50px;padding-bottom:8px}.o-breadcrumb .mat-toolbar{box-shadow:2px 2px 6px #0000003d;background:#ffffff;border-radius:6px;min-height:50px;max-height:50px}.o-breadcrumb .mat-toolbar .mat-toolbar-row{height:50px}.o-breadcrumb .mat-toolbar a{text-decoration:none;cursor:pointer}.o-breadcrumb .mat-toolbar span{cursor:default}.o-breadcrumb .mat-toolbar a,.o-breadcrumb .mat-toolbar span{padding-top:0;padding-bottom:0}\n"] }] }], ctorParameters: function () { return [{ type: i0.Injector }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1icmVhZGNydW1iLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2JyZWFkY3J1bWIvby1icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2JyZWFkY3J1bWIvby1icmVhZGNydW1iLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFFBQVEsRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUV2QyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRztJQUV6QyxnQkFBZ0I7SUFHaEIsNkJBQTZCO0lBRzdCLFdBQVc7Q0FDWixDQUFDO0FBWUYsTUFBTSxPQUFPLG9CQUFvQjtJQU8vQixJQUFJLElBQUksQ0FBQyxLQUFnQjtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBT0QsWUFDWSxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBZHZCLGNBQVMsR0FBVyxHQUFHLENBQUM7UUFDeEIsZ0JBQVcsR0FBbUMsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFPbkUsbUJBQWMsR0FBa0IsRUFBRSxDQUFDO1FBRW5DLGlCQUFZLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFNeEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDeEUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7b0JBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDNUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7aUJBQ3JGO1lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBa0I7UUFDL0IsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBa0I7UUFDN0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUNyQixNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7U0FDaEQ7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDOztrSEEzRFUsb0JBQW9CO3NHQUFwQixvQkFBb0IsaU9DL0JqQyx5c0JBYUE7NEZEa0JhLG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFDRSxjQUFjLFVBR2hCLDJCQUEyQixpQkFDcEIsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixzQkFBc0IsRUFBRSxNQUFNO3FCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9CcmVhZGNydW1iU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL28tYnJlYWRjcnVtYi5zZXJ2aWNlJztcbmltcG9ydCB7IE9CcmVhZGNydW1iIH0gZnJvbSAnLi4vLi4vdHlwZXMvby1icmVhZGNydW1iLWl0ZW0udHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUJhc2UgfSBmcm9tICcuLi9mb3JtL28tZm9ybS1iYXNlLmNsYXNzJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0JSRUFEQ1JVTUIgPSBbXG4gIC8vIGZvcm0gW09Gb3JtQ29tcG9uZW50XTogT250aW1pemUgV2ViIEZvcm0gcmVmZXJlbmNlLlxuICAnX2Zvcm1SZWY6IGZvcm0nLFxuXG4gIC8vIGxhYmVsLWNvbHVtbnMgW3N0cmluZ106IEZvcm0gdmFsdWVzIHNob3duIG9uIGVhY2ggZWxlbWVudC4gU2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdsYWJlbENvbHVtbnM6IGxhYmVsLWNvbHVtbnMnLFxuXG4gIC8vIHNlcGFyYXRvciBbc3RyaW5nXTogRm9ybSB2YWx1ZXMgc2hvd24gb24gZWFjaCBlbGVtZW50LiBTZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NlcGFyYXRvcidcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tYnJlYWRjcnVtYicsXG4gIHRlbXBsYXRlVXJsOiAnby1icmVhZGNydW1iLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ28tYnJlYWRjcnVtYi5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fQlJFQURDUlVNQixcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1icmVhZGNydW1iXSc6ICd0cnVlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9CcmVhZGNydW1iQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQge1xuXG4gIHB1YmxpYyBsYWJlbENvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIHNlcGFyYXRvcjogc3RyaW5nID0gJyAnO1xuICBwdWJsaWMgYnJlYWRjcnVtYnM6IEJlaGF2aW9yU3ViamVjdDxPQnJlYWRjcnVtYltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgc2V0IGZvcm0odmFsdWU6IE9Gb3JtQmFzZSkge1xuICAgIHRoaXMuX2Zvcm1SZWYgPSB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgX2Zvcm1SZWY6IE9Gb3JtQmFzZTtcbiAgcHJvdGVjdGVkIGxhYmVsQ29sc0FycmF5OiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHByb3RlY3RlZCBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2U7XG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJvdGVjdGVkIG9CcmVhZGNydW1TZXJ2aWNlOiBPQnJlYWRjcnVtYlNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICB0aGlzLnJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgdGhpcy5vQnJlYWRjcnVtU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9CcmVhZGNydW1iU2VydmljZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxhYmVsQ29sc0FycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMubGFiZWxDb2x1bW5zKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMub0JyZWFkY3J1bVNlcnZpY2UuYnJlYWRjcnVtYnMkLnN1YnNjcmliZShicyA9PiB0aGlzLmJyZWFkY3J1bWJzLm5leHQoYnMpKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuX2Zvcm1SZWYgJiYgdGhpcy5sYWJlbENvbHNBcnJheS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuX2Zvcm1SZWYub25EYXRhTG9hZGVkLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoc2VsZi5icmVhZGNydW1icy52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHNlbGYubGFiZWxDb2xzQXJyYXkubWFwKGVsZW1lbnQgPT4gdmFsdWVbZWxlbWVudF0pLmpvaW4oc2VsZi5zZXBhcmF0b3IpO1xuICAgICAgICAgIHNlbGYuYnJlYWRjcnVtYnMudmFsdWVbc2VsZi5icmVhZGNydW1icy52YWx1ZS5sZW5ndGggLSAxXS5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0O1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGlzQ3VycmVudFJvdXRlKHJvdXRlOiBPQnJlYWRjcnVtYik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3V0ZS5yb3V0ZSA9PT0gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsLnNwbGl0KCc/JylbMF07XG4gIH1cblxuICBvblJvdXRlQ2xpY2socm91dGU6IE9CcmVhZGNydW1iKSB7XG4gICAgY29uc3QgZXh0cmFzID0ge307XG4gICAgaWYgKHJvdXRlLnF1ZXJ5UGFyYW1zKSB7XG4gICAgICBleHRyYXNbQ29kZXMuUVVFUllfUEFSQU1TXSA9IHJvdXRlLnF1ZXJ5UGFyYW1zO1xuICAgIH1cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGUucm91dGVdLCBleHRyYXMpO1xuICB9XG5cbn1cbiIsIjxtYXQtdG9vbGJhciBjbGFzcz1cInRvb2xiYXItYnJlYWRjcnVtYlwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3V0ZSBvZiBicmVhZGNydW1icyB8IGFzeW5jOyBpbmRleCBhcyBpOyBsYXN0IGFzIGlzTGFzdFwiPlxuICAgIDxzcGFuICpuZ0lmPVwiaXNDdXJyZW50Um91dGUocm91dGUpOyBlbHNlIGJyZWRjcnVtSXRlbVwiIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtIGFjdGl2ZVwiIGxheW91dC1wYWRkaW5nPlxuICAgICAge3sgcm91dGUuZGlzcGxheVRleHQgPyByb3V0ZS5kaXNwbGF5VGV4dCA6IHJvdXRlLmxhYmVsIHwgdXBwZXJjYXNlIHwgb1RyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI2JyZWRjcnVtSXRlbT5cbiAgICAgIDxhIChjbGljayk9XCJvblJvdXRlQ2xpY2socm91dGUpXCIgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW1cIiBsYXlvdXQtcGFkZGluZz5cbiAgICAgICAge3sgcm91dGUuZGlzcGxheVRleHQgPyByb3V0ZS5kaXNwbGF5VGV4dCA6IHJvdXRlLmxhYmVsIHwgdXBwZXJjYXNlIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgPC9hPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiIWlzTGFzdFwiIHN2Z0ljb249XCJvbnRpbWl6ZTprZXlib2FyZF9hcnJvd19yaWdodFwiPjwvbWF0LWljb24+XG4gIDwvbmctY29udGFpbmVyPlxuPC9tYXQtdG9vbGJhcj5cbiJdfQ==