@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
154 lines • 16.6 kB
JavaScript
import * as tslib_1 from "tslib";
/**
* Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
* @link https://truedirective.com/
* @license MIT
*/
import { Component, Output, EventEmitter, ViewChild, ChangeDetectorRef } from '@angular/core';
import { Keys } from '@true-directive/base';
import { DOMUtils } from '../common/dom-utils.class';
// showPopupRelative - устанавливаем position: relative для popup container
// Если этого не сделать, то popup-element будет увеличивать data area.
// Вообще этот параметр сделает невозможным редактирование даты в
// абсолютно позиционированных контейнерах (модальные окна, например).
let EditorDateComponent = class EditorDateComponent {
constructor(changeDetector) {
this.changeDetector = changeDetector;
this.value = null;
this.datepickerInputClass = 'true-grid-input';
this.commit = new EventEmitter();
this.cancel = new EventEmitter();
this.change = new EventEmitter();
this._initialized = false;
}
init(value, valueChanged, height, ie = false, wasShown = false) {
if (this.state.touchMode) {
this.datepicker.popupPosition = 'MODAL';
}
else {
this.datepicker.popupPosition = 'RELATIVE';
}
this.ie = ie;
this.valueTemp = value;
this.valueChanged = valueChanged;
this.height = height;
if (this.state.iOS) {
DOMUtils.focusAndOpenKeyboard(this.datepicker.input.nativeElement, 50);
}
}
ngAfterContentInit() {
if (!this.valueChanged) {
this.value = this.valueTemp;
setTimeout(() => this.datepicker.focus());
this._initialized = true;
}
else {
this.datepicker.focus();
const txt = this.valueTemp;
setTimeout(() => {
for (let i = 0; i < txt.length; i++) {
const e = Keys.generateEvent(null, 0, txt[i]);
this.datepicker.acceptKey(e);
}
this._initialized = true;
});
}
// Не помогает
// setTimeout(() => this.changeDetector.detectChanges(), 100);
}
datepickerChange(e) {
if (this._initialized) {
this.change.emit(this.purify(e));
}
}
inputMouseDown(e) {
e.stopPropagation();
}
inputKeyDown(e) {
if (e.keyCode === Keys.UP || e.keyCode === Keys.DOWN || e.keyCode === Keys.TAB) {
return;
}
if (e.keyCode === Keys.ESCAPE) {
this.cancel.emit(false);
return;
}
e.stopPropagation();
if (e.keyCode === Keys.ENTER) {
this.commit.emit(this.purify(this.value));
return;
}
}
getClass() {
let res = 'true-editor-date__datepicker';
if (this.height !== null && this.height > 0) {
return res;
}
if (this.ie) {
return res + ' true-grid-editor-ie';
}
else {
return res + ' true-grid-editor-100p';
}
}
getH() {
if (this.height !== null && this.height > 0) {
return this.height + 'px';
}
return '100%';
}
purify(v) {
if (v === undefined || v === null || isNaN(v.getTime())) {
return null;
}
return v;
}
};
tslib_1.__decorate([
ViewChild('datepicker', { static: true }),
tslib_1.__metadata("design:type", Object)
], EditorDateComponent.prototype, "datepicker", void 0);
tslib_1.__decorate([
Output("commit"),
tslib_1.__metadata("design:type", EventEmitter)
], EditorDateComponent.prototype, "commit", void 0);
tslib_1.__decorate([
Output("cancel"),
tslib_1.__metadata("design:type", EventEmitter)
], EditorDateComponent.prototype, "cancel", void 0);
tslib_1.__decorate([
Output("change"),
tslib_1.__metadata("design:type", EventEmitter)
], EditorDateComponent.prototype, "change", void 0);
EditorDateComponent = tslib_1.__decorate([
Component({
selector: 'true-editor-date',
template: `<div class="true-grid__input-container" [style.height]="getH()">
<true-datepicker #datepicker
class="true-editor-date__datepicker"
[pattern]="column.format"
[ngClass]="getClass()"
[inputClass]="datepickerInputClass"
[showError]="false"
[(ngModel)]="value"
(keydown)="inputKeyDown($event)"
(ngModelChange)="datepickerChange($event)">
</true-datepicker>
</div>`,
styles: [`
:host {
padding: 0;
margin: 0;
border: 0;
}
.true-editor-date__datepicker {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
}
`]
}),
tslib_1.__metadata("design:paramtypes", [ChangeDetectorRef])
], EditorDateComponent);
export { EditorDateComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRydWUtZGlyZWN0aXZlL2dyaWQvIiwic291cmNlcyI6WyJzcmMvZWRpdG9ycy9lZGl0b3ItZGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0VBSUU7QUFDRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTlGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJckQsMkVBQTJFO0FBQzNFLHVFQUF1RTtBQUN2RSxpRUFBaUU7QUFDakUsc0VBQXNFO0FBOEJ0RSxJQUFhLG1CQUFtQixHQUFoQyxNQUFhLG1CQUFtQjtJQTJIOUIsWUFBb0IsY0FBaUM7UUFBakMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBeEhyRCxVQUFLLEdBQVEsSUFBSSxDQUFDO1FBS2xCLHlCQUFvQixHQUFHLGlCQUFpQixDQUFDO1FBV3pDLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcvQyxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHL0MsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBZ0c0QixDQUFDO0lBL0YxRCxJQUFJLENBQUMsS0FBVSxFQUFFLFlBQXFCLEVBQUUsTUFBYyxFQUFFLEtBQWMsS0FBSyxFQUFFLFdBQW9CLEtBQUs7UUFFcEcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7U0FDekM7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLFVBQVUs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TyxHQUFHLEdBQUcsc0JBQXNCLENBQUM7U0FDckM7YUFBTTtZQUNMLE9BQU8sR0FBRyxHQUFHLHdCQUF3QixDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDM0I7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRVMsTUFBTSxDQUFDLENBQU07UUFDckIsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FHRixDQUFBO0FBakhDO0lBREMsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQzs7dURBQ3hCO0FBUWhCO0lBREMsTUFBTSxDQUFDLFFBQVEsQ0FBQztzQ0FDVCxZQUFZO21EQUEyQjtBQUcvQztJQURDLE1BQU0sQ0FBQyxRQUFRLENBQUM7c0NBQ1QsWUFBWTttREFBMkI7QUFHL0M7SUFEQyxNQUFNLENBQUMsUUFBUSxDQUFDO3NDQUNULFlBQVk7bURBQTJCO0FBekJwQyxtQkFBbUI7SUE3Qi9CLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsUUFBUSxFQUNSOzs7Ozs7Ozs7OztTQVdPO2lCQUNFOzs7Ozs7Ozs7Ozs7S0FZTjtLQUNGLENBQUM7NkNBNEhrQyxpQkFBaUI7R0EzSDFDLG1CQUFtQixDQTRIL0I7U0E1SFksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IEFsZWtzZXkgTWVsbmlrb3YsIFRydWUgRGlyZWN0aXZlIENvbXBhbnkuXHJcbiAqIEBsaW5rIGh0dHBzOi8vdHJ1ZWRpcmVjdGl2ZS5jb20vXHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4qL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBDb2x1bW4gfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IEdyaWRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlzIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5pbXBvcnQgeyBET01VdGlscyB9IGZyb20gJy4uL2NvbW1vbi9kb20tdXRpbHMuY2xhc3MnO1xyXG5cclxuaW1wb3J0IHsgSUVkaXRvciB9IGZyb20gXCIuL2VkaXRvci5pbnRlcmZhY2VcIjtcclxuXHJcbi8vIHNob3dQb3B1cFJlbGF0aXZlIC0g0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10LwgcG9zaXRpb246IHJlbGF0aXZlINC00LvRjyBwb3B1cCBjb250YWluZXJcclxuLy8g0JXRgdC70Lgg0Y3RgtC+0LPQviDQvdC1INGB0LTQtdC70LDRgtGMLCDRgtC+IHBvcHVwLWVsZW1lbnQg0LHRg9C00LXRgiDRg9Cy0LXQu9C40YfQuNCy0LDRgtGMIGRhdGEgYXJlYS5cclxuLy8g0JLQvtC+0LHRidC1INGN0YLQvtGCINC/0LDRgNCw0LzQtdGC0YAg0YHQtNC10LvQsNC10YIg0L3QtdCy0L7Qt9C80L7QttC90YvQvCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC00LDRgtGLINCyXHJcbi8vINCw0LHRgdC+0LvRjtGC0L3QviDQv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90L3Ri9GFINC60L7QvdGC0LXQudC90LXRgNCw0YUgKNC80L7QtNCw0LvRjNC90YvQtSDQvtC60L3QsCwg0L3QsNC/0YDQuNC80LXRgCkuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1ZS1lZGl0b3ItZGF0ZScsXHJcbiAgdGVtcGxhdGU6XHJcbiAgYDxkaXYgY2xhc3M9XCJ0cnVlLWdyaWRfX2lucHV0LWNvbnRhaW5lclwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SCgpXCI+XHJcbiAgICA8dHJ1ZS1kYXRlcGlja2VyICNkYXRlcGlja2VyXHJcbiAgICAgIGNsYXNzPVwidHJ1ZS1lZGl0b3ItZGF0ZV9fZGF0ZXBpY2tlclwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cImNvbHVtbi5mb3JtYXRcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRDbGFzcygpXCJcclxuICAgICAgW2lucHV0Q2xhc3NdPVwiZGF0ZXBpY2tlcklucHV0Q2xhc3NcIlxyXG4gICAgICBbc2hvd0Vycm9yXT1cImZhbHNlXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAgIChrZXlkb3duKT1cImlucHV0S2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZGF0ZXBpY2tlckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L3RydWUtZGF0ZXBpY2tlcj5cclxuICA8L2Rpdj5gLFxyXG4gIHN0eWxlczogW2BcclxuICAgIDpob3N0IHtcclxuICAgICAgcGFkZGluZzogMDtcclxuICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICBib3JkZXI6IDA7XHJcbiAgICB9XHJcbiAgICAudHJ1ZS1lZGl0b3ItZGF0ZV9fZGF0ZXBpY2tlciB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgIG1hcmdpbjogMDtcclxuICAgIH1cclxuICAgIGBdXHJcbiAgfSlcclxuZXhwb3J0IGNsYXNzIEVkaXRvckRhdGVDb21wb25lbnQgaW1wbGVtZW50cyBJRWRpdG9yICB7XHJcblxyXG4gIGllOiBib29sZWFuO1xyXG4gIHZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIHZhbHVlVGVtcDogYW55O1xyXG4gIHZhbHVlQ2hhbmdlZDogYm9vbGVhbjtcclxuICBoZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgZGF0ZXBpY2tlcklucHV0Q2xhc3MgPSAndHJ1ZS1ncmlkLWlucHV0JztcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0ZXBpY2tlcicsIHtzdGF0aWM6IHRydWV9KVxyXG4gIGRhdGVwaWNrZXI6IGFueTtcclxuXHJcbiAgLy8gSW1wbGVtZW50YXRpb24gb2YgSUVkaXRvclxyXG4gIHN0YXRlOiBHcmlkU3RhdGVTZXJ2aWNlO1xyXG4gIGNvbHVtbjogQ29sdW1uO1xyXG4gIHJvdzogYW55O1xyXG5cclxuICBAT3V0cHV0KFwiY29tbWl0XCIpXHJcbiAgY29tbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dChcImNhbmNlbFwiKVxyXG4gIGNhbmNlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoXCJjaGFuZ2VcIilcclxuICBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIGluaXQodmFsdWU6IGFueSwgdmFsdWVDaGFuZ2VkOiBib29sZWFuLCBoZWlnaHQ6IG51bWJlciwgaWU6IGJvb2xlYW4gPSBmYWxzZSwgd2FzU2hvd246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgIGlmICh0aGlzLnN0YXRlLnRvdWNoTW9kZSkge1xyXG4gICAgICB0aGlzLmRhdGVwaWNrZXIucG9wdXBQb3NpdGlvbiA9ICdNT0RBTCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGVwaWNrZXIucG9wdXBQb3NpdGlvbiA9ICdSRUxBVElWRSc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pZSA9IGllO1xyXG4gICAgdGhpcy52YWx1ZVRlbXAgPSB2YWx1ZTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gdmFsdWVDaGFuZ2VkO1xyXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgaWYgKHRoaXMuc3RhdGUuaU9TKSB7XHJcbiAgICAgIERPTVV0aWxzLmZvY3VzQW5kT3BlbktleWJvYXJkKHRoaXMuZGF0ZXBpY2tlci5pbnB1dC5uYXRpdmVFbGVtZW50LCA1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICBpZighdGhpcy52YWx1ZUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVUZW1wO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGF0ZXBpY2tlci5mb2N1cygpKTtcclxuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRlcGlja2VyLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IHR4dCA9IHRoaXMudmFsdWVUZW1wO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgZSA9IEtleXMuZ2VuZXJhdGVFdmVudChudWxsLCAwLCB0eHRbaV0pO1xyXG4gICAgICAgICAgdGhpcy5kYXRlcGlja2VyLmFjY2VwdEtleShlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDQndC1INC/0L7QvNC+0LPQsNC10YJcclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCksIDEwMCk7XHJcbiAgfVxyXG5cclxuICBkYXRlcGlja2VyQ2hhbmdlKGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5wdXJpZnkoZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5wdXRNb3VzZURvd24oZTogYW55KSB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRLZXlEb3duKGU6IGFueSkge1xyXG5cclxuICAgIGlmIChlLmtleUNvZGUgPT09IEtleXMuVVAgfHwgZS5rZXlDb2RlID09PSBLZXlzLkRPV04gfHwgZS5rZXlDb2RlID09PSBLZXlzLlRBQikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gS2V5cy5FU0NBUEUpIHtcclxuICAgICAgdGhpcy5jYW5jZWwuZW1pdChmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmIChlLmtleUNvZGUgPT09IEtleXMuRU5URVIpIHtcclxuICAgICAgdGhpcy5jb21taXQuZW1pdCh0aGlzLnB1cmlmeSh0aGlzLnZhbHVlKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENsYXNzKCkge1xyXG4gICAgbGV0IHJlcyA9ICd0cnVlLWVkaXRvci1kYXRlX19kYXRlcGlja2VyJztcclxuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gbnVsbCAmJiB0aGlzLmhlaWdodCA+IDApIHtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pZSkge1xyXG4gICAgICByZXR1cm4gcmVzICsgJyB0cnVlLWdyaWQtZWRpdG9yLWllJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiByZXMgKyAnIHRydWUtZ3JpZC1lZGl0b3ItMTAwcCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIKCkge1xyXG4gICAgaWYgKHRoaXMuaGVpZ2h0ICE9PSBudWxsICYmIHRoaXMuaGVpZ2h0ID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oZWlnaHQgKyAncHgnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcxMDAlJztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwdXJpZnkodjogYW55KTogYW55IHtcclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCB8fCBpc05hTih2LmdldFRpbWUoKSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxufVxyXG4iXX0=