UNPKG

@hmcts/media-viewer

Version:
122 lines 20 kB
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { v4 as uuid } from 'uuid'; import { HtmlTemplatesHelper } from '../../../../shared/util/helpers/html-templates.helper'; import * as i0 from "@angular/core"; import * as i1 from "../../../../toolbar/toolbar-event.service"; import * as i2 from "../highlight-create/highlight-create.service"; export class BoxHighlightCreateComponent { constructor(toolbarEvents, highlightService) { this.toolbarEvents = toolbarEvents; this.highlightService = highlightService; this.saveSelection = new EventEmitter(); this.drawStartX = -1; this.drawStartY = -1; this.backgroundColor = 'none'; this.subscriptions = []; } ngOnInit() { this.subscriptions = [ this.toolbarEvents.drawModeSubject.subscribe(drawMode => { this.defaultHeight = drawMode ? '100%' : '0px'; this.defaultWidth = drawMode ? '100%' : '0px'; }), this.toolbarEvents.redactWholePage.subscribe(() => { this.wholePage = true; }) ]; } ngOnDestroy() { this.subscriptions.forEach(subscription => { subscription.unsubscribe(); }); } initHighlight(event) { if (this.wholePage) { this.highlightPage(); return; } const rect = HtmlTemplatesHelper.getAdjustedBoundingRect(event.target), offsetX = event.clientX - rect.left, offsetY = event.clientY - rect.top; console.log(`initHighlight: rect=${JSON.stringify(rect)}, clientX=${event.clientX}, clientY=${event.clientY}, offsetX=${offsetX}, offsetY=${offsetY}`); this.position = 'absolute'; this.backgroundColor = 'yellow'; this.drawStartX = offsetX; this.drawStartY = offsetY; this.display = 'block'; this.height = 50; this.width = 50; this.top = this.drawStartY; this.left = this.drawStartX; switch (this.rotate) { case 90: this.top = this.drawStartY - this.height; break; case 180: this.top = this.drawStartY - this.height; this.left = this.drawStartX - this.width; break; case 270: this.left = this.drawStartX - this.width; break; } } updateHighlight(event) { const rect = HtmlTemplatesHelper.getAdjustedBoundingRect(event.target, false), offsetX = event.clientX - rect.left, offsetY = event.clientY - rect.top; if (this.drawStartX > 0 && this.drawStartY > 0) { this.height = Math.abs(offsetY - this.drawStartY); this.width = Math.abs(offsetX - this.drawStartX); this.top = Math.min(offsetY, this.drawStartY); this.left = Math.min(offsetX, this.drawStartX); } } createHighlight() { if (this.height / this.zoom > 5 || this.width / this.zoom > 5) { let rectangle = this.highlightService .applyRotation(this.pageHeight, this.pageWidth, this.height, this.width, this.top, this.left, this.rotate, this.zoom); rectangle = { id: uuid(), ...rectangle }; console.log(`createHighlight: rectangle=${JSON.stringify(rectangle)}`); this.saveSelection.emit({ rectangles: [rectangle], page: this.page }); this.resetHighlight(); } } resetHighlight() { this.drawStartX = -1; this.drawStartY = -1; this.display = 'none'; this.width = 0; this.height = 0; this.backgroundColor = 'none'; this.position = 'initial'; this.wholePage = false; } highlightPage() { this.height = this.pageHeight; this.width = this.pageWidth; this.top = 0; this.left = 0; this.createHighlight(); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BoxHighlightCreateComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.HighlightCreateService }], target: i0.ɵɵFactoryTarget.Component }); } /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BoxHighlightCreateComponent, selector: "mv-box-highlight-create", inputs: { page: "page", pageHeight: "pageHeight", pageWidth: "pageWidth", rotate: "rotate", zoom: "zoom", container: "container" }, outputs: { saveSelection: "saveSelection" }, viewQueries: [{ propertyName: "highlight", first: true, predicate: ["boxHighlight"], descendants: true }], ngImport: i0, template: "<div [style.height]=\"defaultHeight\"\n [style.width]=\"defaultWidth\"\n (mousedown)=\"initHighlight($event)\"\n (mousemove)=\"updateHighlight($event)\"\n (mouseup)=\"createHighlight()\">\n <div #boxHighlight\n class=\"box-highlight\"\n [style.display]=\"display\"\n [style.position]=\"position\"\n [style.background-color]=\"backgroundColor\"\n [style.height]=\"height ? height + 'px' : '100%'\"\n [style.width]=\"width ? width + 'px' : '100%'\"\n [style.top]=\"top + 'px'\"\n [style.left]=\"left + 'px'\">\n </div>\n</div>\n" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BoxHighlightCreateComponent, decorators: [{ type: Component, args: [{ selector: 'mv-box-highlight-create', template: "<div [style.height]=\"defaultHeight\"\n [style.width]=\"defaultWidth\"\n (mousedown)=\"initHighlight($event)\"\n (mousemove)=\"updateHighlight($event)\"\n (mouseup)=\"createHighlight()\">\n <div #boxHighlight\n class=\"box-highlight\"\n [style.display]=\"display\"\n [style.position]=\"position\"\n [style.background-color]=\"backgroundColor\"\n [style.height]=\"height ? height + 'px' : '100%'\"\n [style.width]=\"width ? width + 'px' : '100%'\"\n [style.top]=\"top + 'px'\"\n [style.left]=\"left + 'px'\">\n </div>\n</div>\n" }] }], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.HighlightCreateService }], propDecorators: { page: [{ type: Input }], pageHeight: [{ type: Input }], pageWidth: [{ type: Input }], rotate: [{ type: Input }], zoom: [{ type: Input }], container: [{ type: Input }], saveSelection: [{ type: Output }], highlight: [{ type: ViewChild, args: ['boxHighlight', { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LWhpZ2hsaWdodC1jcmVhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBS2xDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7O0FBSzVGLE1BQU0sT0FBTywyQkFBMkI7SUE2QnRDLFlBQTZCLGFBQWtDLEVBQzVDLGdCQUF3QztRQUQ5QixrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDNUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQXJCakQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBNkMsQ0FBQztRQUl4RixlQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEIsZUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBVWhCLG9CQUFlLEdBQUcsTUFBTSxDQUFDO1FBR2pCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUdvQixDQUFDO0lBRWhFLFFBQVE7UUFDTixJ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QUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFFdUMsU0FBUztzQkFBdEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlIH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbi12aWV3L3JlY3RhbmdsZS9yZWN0YW5nbGUubW9kZWwnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q3JlYXRlU2VydmljZSB9IGZyb20gJy4uL2hpZ2hsaWdodC1jcmVhdGUvaGlnaGxpZ2h0LWNyZWF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi90b29sYmFyL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBIdG1sVGVtcGxhdGVzSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWwvaGVscGVycy9odG1sLXRlbXBsYXRlcy5oZWxwZXInO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtYm94LWhpZ2hsaWdodC1jcmVhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYm94LWhpZ2hsaWdodC1jcmVhdGUuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBCb3hIaWdobGlnaHRDcmVhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgcGFnZTogbnVtYmVyO1xuICBASW5wdXQoKSBwYWdlSGVpZ2h0OiBudW1iZXI7XG4gIEBJbnB1dCgpIHBhZ2VXaWR0aDogbnVtYmVyO1xuICBASW5wdXQoKSByb3RhdGU6IG51bWJlcjtcbiAgQElucHV0KCkgem9vbTogbnVtYmVyO1xuICBASW5wdXQoKSBjb250YWluZXI6IHsgdG9wOiBudW1iZXIsIGxlZnQ6IG51bWJlciB9O1xuXG4gIEBPdXRwdXQoKSBzYXZlU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY3RhbmdsZXM6IFJlY3RhbmdsZVtdLCBwYWdlOiBudW1iZXIgfT4oKTtcblxuICBAVmlld0NoaWxkKCdib3hIaWdobGlnaHQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaGlnaGxpZ2h0OiBFbGVtZW50UmVmO1xuXG4gIGRyYXdTdGFydFggPSAtMTtcbiAgZHJhd1N0YXJ0WSA9IC0xO1xuICB0b3A6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgZGlzcGxheTogc3RyaW5nO1xuICBkcmF3TW9kZTogYm9vbGVhbjtcbiAgZGVmYXVsdEhlaWdodDogc3RyaW5nO1xuICBkZWZhdWx0V2lkdGg6IHN0cmluZztcbiAgcG9zaXRpb246IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yID0gJ25vbmUnO1xuICB3aG9sZVBhZ2U6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdG9vbGJhckV2ZW50czogVG9vbGJhckV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhpZ2hsaWdodFNlcnZpY2U6IEhpZ2hsaWdodENyZWF0ZVNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5kcmF3TW9kZVN1YmplY3Quc3Vic2NyaWJlKGRyYXdNb2RlID0+IHtcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVpZ2h0ID0gZHJhd01vZGUgPyAnMTAwJScgOiAnMHB4JztcbiAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGggPSBkcmF3TW9kZSA/ICcxMDAlJyA6ICcwcHgnO1xuICAgICAgfSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMucmVkYWN0V2hvbGVQYWdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMud2hvbGVQYWdlID0gdHJ1ZTtcbiAgICAgIH0pXG4gICAgXTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRIaWdobGlnaHQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy53aG9sZVBhZ2UpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0UGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY3QgPSBIdG1sVGVtcGxhdGVzSGVscGVyLmdldEFkanVzdGVkQm91bmRpbmdSZWN0KChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSxcbiAgICBvZmZzZXRYID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICBvZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wO1xuICAgIGNvbnNvbGUubG9nKGBpbml0SGlnaGxpZ2h0OiByZWN0PSR7SlNPTi5zdHJpbmdpZnkocmVjdCl9LCBjbGllbnRYPSR7ZXZlbnQuY2xpZW50WH0sIGNsaWVudFk9JHtldmVudC5jbGllbnRZfSwgb2Zmc2V0WD0ke29mZnNldFh9LCBvZmZzZXRZPSR7b2Zmc2V0WX1gKTtcblxuICAgIHRoaXMucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gJ3llbGxvdyc7XG4gICAgdGhpcy5kcmF3U3RhcnRYID0gb2Zmc2V0WDtcbiAgICB0aGlzLmRyYXdTdGFydFkgPSBvZmZzZXRZO1xuXG4gICAgdGhpcy5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLmhlaWdodCA9IDUwO1xuICAgIHRoaXMud2lkdGggPSA1MDtcbiAgICB0aGlzLnRvcCA9IHRoaXMuZHJhd1N0YXJ0WTtcbiAgICB0aGlzLmxlZnQgPSB0aGlzLmRyYXdTdGFydFg7XG5cbiAgICBzd2l0Y2ggKHRoaXMucm90YXRlKSB7XG4gICAgICBjYXNlIDkwOlxuICAgICAgICB0aGlzLnRvcCA9IHRoaXMuZHJhd1N0YXJ0WSAtIHRoaXMuaGVpZ2h0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTgwOlxuICAgICAgICB0aGlzLnRvcCA9IHRoaXMuZHJhd1N0YXJ0WSAtIHRoaXMuaGVpZ2h0O1xuICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmRyYXdTdGFydFggLSB0aGlzLndpZHRoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjcwOlxuICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmRyYXdTdGFydFggLSB0aGlzLndpZHRoO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB1cGRhdGVIaWdobGlnaHQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gSHRtbFRlbXBsYXRlc0hlbHBlci5nZXRBZGp1c3RlZEJvdW5kaW5nUmVjdChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGZhbHNlKSxcbiAgICAgIG9mZnNldFggPSBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgb2Zmc2V0WSA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICBpZiAodGhpcy5kcmF3U3RhcnRYID4gMCAmJiB0aGlzLmRyYXdTdGFydFkgPiAwKSB7XG4gICAgICB0aGlzLmhlaWdodCA9IE1hdGguYWJzKG9mZnNldFkgLSB0aGlzLmRyYXdTdGFydFkpO1xuICAgICAgdGhpcy53aWR0aCA9IE1hdGguYWJzKG9mZnNldFggLSB0aGlzLmRyYXdTdGFydFgpO1xuICAgICAgdGhpcy50b3AgPSBNYXRoLm1pbihvZmZzZXRZLCB0aGlzLmRyYXdTdGFydFkpO1xuICAgICAgdGhpcy5sZWZ0ID0gTWF0aC5taW4ob2Zmc2V0WCwgdGhpcy5kcmF3U3RhcnRYKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVIaWdobGlnaHQoKSB7XG4gICAgaWYgKHRoaXMuaGVpZ2h0IC8gdGhpcy56b29tID4gNSB8fCB0aGlzLndpZHRoIC8gdGhpcy56b29tID4gNSkge1xuICAgICAgbGV0IHJlY3RhbmdsZSA9IHRoaXMuaGlnaGxpZ2h0U2VydmljZVxuICAgICAgICAuYXBwbHlSb3RhdGlvbih0aGlzLnBhZ2VIZWlnaHQsIHRoaXMucGFnZVdpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy50b3AsIHRoaXMubGVmdCwgdGhpcy5yb3RhdGUsIHRoaXMuem9vbSk7XG4gICAgICByZWN0YW5nbGUgPSB7IGlkOiB1dWlkKCksIC4uLnJlY3RhbmdsZSB9IGFzIGFueTtcbiAgICAgIGNvbnNvbGUubG9nKGBjcmVhdGVIaWdobGlnaHQ6IHJlY3RhbmdsZT0ke0pTT04uc3RyaW5naWZ5KHJlY3RhbmdsZSl9YCk7XG4gICAgICB0aGlzLnNhdmVTZWxlY3Rpb24uZW1pdCh7IHJlY3RhbmdsZXM6IFtyZWN0YW5nbGVdLCBwYWdlOiB0aGlzLnBhZ2UgfSk7XG4gICAgICB0aGlzLnJlc2V0SGlnaGxpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEhpZ2hsaWdodCgpIHtcbiAgICB0aGlzLmRyYXdTdGFydFggPSAtMTtcbiAgICB0aGlzLmRyYXdTdGFydFkgPSAtMTtcbiAgICB0aGlzLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gJ25vbmUnO1xuICAgIHRoaXMucG9zaXRpb24gPSAnaW5pdGlhbCc7XG4gICAgdGhpcy53aG9sZVBhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGlnaGxpZ2h0UGFnZSgpIHtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucGFnZUhlaWdodDtcbiAgICB0aGlzLndpZHRoID0gdGhpcy5wYWdlV2lkdGg7XG4gICAgdGhpcy50b3AgPSAwO1xuICAgIHRoaXMubGVmdCA9IDA7XG4gICAgdGhpcy5jcmVhdGVIaWdobGlnaHQoKTtcbiAgfVxufVxuIiwiPGRpdiBbc3R5bGUuaGVpZ2h0XT1cImRlZmF1bHRIZWlnaHRcIlxuICAgICBbc3R5bGUud2lkdGhdPVwiZGVmYXVsdFdpZHRoXCJcbiAgICAgKG1vdXNlZG93bik9XCJpbml0SGlnaGxpZ2h0KCRldmVudClcIlxuICAgICAobW91c2Vtb3ZlKT1cInVwZGF0ZUhpZ2hsaWdodCgkZXZlbnQpXCJcbiAgICAgKG1vdXNldXApPVwiY3JlYXRlSGlnaGxpZ2h0KClcIj5cbiAgPGRpdiAjYm94SGlnaGxpZ2h0XG4gICAgIGNsYXNzPVwiYm94LWhpZ2hsaWdodFwiXG4gICAgIFtzdHlsZS5kaXNwbGF5XT1cImRpc3BsYXlcIlxuICAgICBbc3R5bGUucG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodCA/IGhlaWdodCArICdweCcgOiAnMTAwJSdcIlxuICAgICBbc3R5bGUud2lkdGhdPVwid2lkdGggPyB3aWR0aCArICdweCcgOiAnMTAwJSdcIlxuICAgICBbc3R5bGUudG9wXT1cInRvcCArICdweCdcIlxuICAgICBbc3R5bGUubGVmdF09XCJsZWZ0ICsgJ3B4J1wiPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19