UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

223 lines 19.1 kB
import { __decorate, __metadata } from "tslib"; import { Component, Input, Output, EventEmitter, HostBinding, ElementRef, HostListener } from '@angular/core'; import { isDateInRanges } from '../calendar'; import { CalendarSelection } from '../calendar-base'; /** *@hidden */ let IgxDayItemComponent = class IgxDayItemComponent { constructor(elementRef) { this.elementRef = elementRef; this.hideOutsideDays = false; this.isLastInRange = false; this.isFirstInRange = false; this.isWithinRange = false; this.onDateSelection = new EventEmitter(); this._selected = false; } /** * Returns boolean indicating if the day is selected * */ get selected() { return this._selected; } /** * Selects the day */ set selected(value) { this._selected = value; } get isCurrentMonth() { return this.date.isCurrentMonth; } get isPreviousMonth() { return this.date.isPrevMonth; } get isNextMonth() { return this.date.isNextMonth; } get nativeElement() { return this.elementRef.nativeElement; } get isSelectedCSS() { return (!this.isDisabled && this.selected); } get isInactive() { return this.date.isNextMonth || this.date.isPrevMonth; } get isHidden() { return this.hideOutsideDays && this.isInactive; } get isToday() { const today = new Date(Date.now()); const date = this.date.date; return (date.getFullYear() === today.getFullYear() && date.getMonth() === today.getMonth() && date.getDate() === today.getDate()); } get isWeekend() { const day = this.date.date.getDay(); return day === 0 || day === 6; } get isDisabled() { if (this.disabledDates === null) { return false; } return isDateInRanges(this.date.date, this.disabledDates); } get isOutOfRange() { if (!this.outOfRangeDates) { return false; } return isDateInRanges(this.date.date, this.outOfRangeDates); } get isFocusable() { return this.isCurrentMonth && !this.isHidden && !this.isDisabled && !this.isOutOfRange; } get isWithinRangeCSS() { return !this.isSingleSelection && this.isWithinRange; } get isSpecial() { if (this.specialDates === null) { return false; } return isDateInRanges(this.date.date, this.specialDates); } get defaultCSS() { return this.date.isCurrentMonth && !(this.isWeekend && this.selected); } get isDisabledCSS() { return this.isHidden || this.isDisabled || this.isOutOfRange; } get isSingleSelection() { return this.selection !== CalendarSelection.RANGE; } get tabindex() { return this.isDisabled || this.isHidden ? -1 : 0; } onSelect() { this.onDateSelection.emit(this.date); } }; IgxDayItemComponent.ctorParameters = () => [ { type: ElementRef } ]; __decorate([ Input(), __metadata("design:type", Object) ], IgxDayItemComponent.prototype, "date", void 0); __decorate([ Input(), __metadata("design:type", String) ], IgxDayItemComponent.prototype, "selection", void 0); __decorate([ Input(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxDayItemComponent.prototype, "selected", null); __decorate([ Input(), __metadata("design:type", Array) ], IgxDayItemComponent.prototype, "disabledDates", void 0); __decorate([ Input(), __metadata("design:type", Array) ], IgxDayItemComponent.prototype, "outOfRangeDates", void 0); __decorate([ Input(), __metadata("design:type", Array) ], IgxDayItemComponent.prototype, "specialDates", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxDayItemComponent.prototype, "hideOutsideDays", void 0); __decorate([ Input(), HostBinding('class.igx-calendar__date--last'), __metadata("design:type", Object) ], IgxDayItemComponent.prototype, "isLastInRange", void 0); __decorate([ Input(), HostBinding('class.igx-calendar__date--first'), __metadata("design:type", Object) ], IgxDayItemComponent.prototype, "isFirstInRange", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxDayItemComponent.prototype, "isWithinRange", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxDayItemComponent.prototype, "onDateSelection", void 0); __decorate([ HostBinding('class.igx-calendar__date--selected'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isSelectedCSS", null); __decorate([ HostBinding('class.igx-calendar__date--inactive'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isInactive", null); __decorate([ HostBinding('class.igx-calendar__date--hidden'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isHidden", null); __decorate([ HostBinding('class.igx-calendar__date--current'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isToday", null); __decorate([ HostBinding('class.igx-calendar__date--weekend'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isWeekend", null); __decorate([ HostBinding('class.igx-calendar__date--range'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isWithinRangeCSS", null); __decorate([ HostBinding('class.igx-calendar__date--special'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isSpecial", null); __decorate([ HostBinding('class.igx-calendar__date'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "defaultCSS", null); __decorate([ HostBinding('class.igx-calendar__date--disabled'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isDisabledCSS", null); __decorate([ HostBinding('class.igx-calendar__date--single'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "isSingleSelection", null); __decorate([ HostBinding('attr.tabindex'), __metadata("design:type", Number), __metadata("design:paramtypes", []) ], IgxDayItemComponent.prototype, "tabindex", null); __decorate([ HostListener('click'), HostListener('keydown.enter'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxDayItemComponent.prototype, "onSelect", null); IgxDayItemComponent = __decorate([ Component({ selector: 'igx-day-item', template: "<span class=\"igx-calendar__date-content\">\n <ng-content></ng-content>\n</span>\n" }), __metadata("design:paramtypes", [ElementRef]) ], IgxDayItemComponent); export { IgxDayItemComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5LWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBaUIsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJEOztFQUVFO0FBS0YsSUFBYSxtQkFBbUIsR0FBaEMsTUFBYSxtQkFBbUI7SUF3SjVCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF2SG5DLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBSXhCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBSXRCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBR3RCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUF1R25ELGNBQVMsR0FBRyxLQUFLLENBQUM7SUFFb0IsQ0FBQztJQWpKL0M7OztPQUdHO0lBRUgsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUSxDQUFDLEtBQVU7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQTRCRCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFX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QXVCRDtJQURDLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQzs7OzJEQUc5QztBQUdEO0lBREMsV0FBVyxDQUFDLG1DQUFtQyxDQUFDOzs7b0RBT2hEO0FBR0Q7SUFEQyxXQUFXLENBQUMsMEJBQTBCLENBQUM7OztxREFHdkM7QUFHRDtJQURDLFdBQVcsQ0FBQyxvQ0FBb0MsQ0FBQzs7O3dEQUdqRDtBQUdEO0lBREMsV0FBVyxDQUFDLGtDQUFrQyxDQUFDOzs7NERBRy9DO0FBR0Q7SUFEQyxXQUFXLENBQUMsZUFBZSxDQUFDOzs7bURBRzVCO0FBUUQ7SUFGQyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ3JCLFlBQVksQ0FBQyxlQUFlLENBQUM7Ozs7bURBRzdCO0FBOUpRLG1CQUFtQjtJQUovQixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsY0FBYztRQUN4QixpR0FBc0M7S0FDekMsQ0FBQztxQ0F5SmtDLFVBQVU7R0F4SmpDLG1CQUFtQixDQStKL0I7U0EvSlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDYWxlbmRhckRhdGUsIGlzRGF0ZUluUmFuZ2VzIH0gZnJvbSAnLi4vY2FsZW5kYXInO1xuaW1wb3J0IHsgRGF0ZVJhbmdlRGVzY3JpcHRvciB9IGZyb20gJy4uLy4uL2NvcmUvZGF0ZXMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZWxlY3Rpb24gfSBmcm9tICcuLi9jYWxlbmRhci1iYXNlJztcblxuLyoqXG4gKkBoaWRkZW5cbiovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1kYXktaXRlbScsXG4gICAgdGVtcGxhdGVVcmw6ICdkYXktaXRlbS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RGF5SXRlbUNvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGF0ZTogSUNhbGVuZGFyRGF0ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGRheSBpcyBzZWxlY3RlZFxuICAgICAqXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIHRoZSBkYXlcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZERhdGVzOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdXRPZlJhbmdlRGF0ZXM6IERhdGVSYW5nZURlc2NyaXB0b3JbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNwZWNpYWxEYXRlczogRGF0ZVJhbmdlRGVzY3JpcHRvcltdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGlkZU91dHNpZGVEYXlzID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX19kYXRlLS1sYXN0JylcbiAgICBwdWJsaWMgaXNMYXN0SW5SYW5nZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcl9fZGF0ZS0tZmlyc3QnKVxuICAgIHB1YmxpYyBpc0ZpcnN0SW5SYW5nZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNXaXRoaW5SYW5nZSA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uRGF0ZVNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNhbGVuZGFyRGF0ZT4oKTtcblxuICAgIHB1YmxpYyBnZXQgaXNDdXJyZW50TW9udGgoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGUuaXNDdXJyZW50TW9udGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1ByZXZpb3VzTW9udGgoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGUuaXNQcmV2TW9udGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc05leHRNb250aCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5pc05leHRNb250aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcl9fZGF0ZS0tc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgaXNTZWxlY3RlZENTUygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICghdGhpcy5pc0Rpc2FibGVkICYmIHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX19kYXRlLS1pbmFjdGl2ZScpXG4gICAgcHVibGljIGdldCBpc0luYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlLmlzTmV4dE1vbnRoIHx8IHRoaXMuZGF0ZS5pc1ByZXZNb250aDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcl9fZGF0ZS0taGlkZGVuJylcbiAgICBwdWJsaWMgZ2V0IGlzSGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWRlT3V0c2lkZURheXMgJiYgdGhpcy5pc0luYWN0aXZlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX19kYXRlLS1jdXJyZW50JylcbiAgICBwdWJsaWMgZ2V0IGlzVG9kYXkoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoRGF0ZS5ub3coKSk7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGUuZGF0ZTtcbiAgICAgICAgcmV0dXJuIChkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IHRvZGF5LmdldERhdGUoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX19kYXRlLS13ZWVrZW5kJylcbiAgICBwdWJsaWMgZ2V0IGlzV2Vla2VuZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF5ID0gdGhpcy5kYXRlLmRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIHJldHVybiBkYXkgPT09IDAgfHwgZGF5ID09PSA2O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWREYXRlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzRGF0ZUluUmFuZ2VzKHRoaXMuZGF0ZS5kYXRlLCB0aGlzLmRpc2FibGVkRGF0ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNPdXRPZlJhbmdlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMub3V0T2ZSYW5nZURhdGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNEYXRlSW5SYW5nZXModGhpcy5kYXRlLmRhdGUsIHRoaXMub3V0T2ZSYW5nZURhdGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRm9jdXNhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0N1cnJlbnRNb250aCAmJiAhdGhpcy5pc0hpZGRlbiAmJiAhdGhpcy5pc0Rpc2FibGVkICYmICF0aGlzLmlzT3V0T2ZSYW5nZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcl9fZGF0ZS0tcmFuZ2UnKVxuICAgIHB1YmxpYyBnZXQgaXNXaXRoaW5SYW5nZUNTUygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzU2luZ2xlU2VsZWN0aW9uICYmIHRoaXMuaXNXaXRoaW5SYW5nZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcl9fZGF0ZS0tc3BlY2lhbCcpXG4gICAgcHVibGljIGdldCBpc1NwZWNpYWwoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnNwZWNpYWxEYXRlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzRGF0ZUluUmFuZ2VzKHRoaXMuZGF0ZS5kYXRlLCB0aGlzLnNwZWNpYWxEYXRlcyk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXJfX2RhdGUnKVxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdENTUygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5pc0N1cnJlbnRNb250aCAmJiAhKHRoaXMuaXNXZWVrZW5kICYmIHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX19kYXRlLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBpc0Rpc2FibGVkQ1NTKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hpZGRlbiB8fCB0aGlzLmlzRGlzYWJsZWQgfHwgdGhpcy5pc091dE9mUmFuZ2U7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXJfX2RhdGUtLXNpbmdsZScpXG4gICAgcHVibGljIGdldCBpc1NpbmdsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uICE9PSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIHB1YmxpYyBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzSGlkZGVuID8gLTEgOiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInKVxuICAgIHB1YmxpYyBvblNlbGVjdCgpIHtcbiAgICAgICAgdGhpcy5vbkRhdGVTZWxlY3Rpb24uZW1pdCh0aGlzLmRhdGUpO1xuICAgIH1cbn1cbiJdfQ==