UNPKG

ngx-mat-calendar

Version:

A datepicker with nepali and english calendar support

599 lines 99.6 kB
import { Component, Output, EventEmitter, Input, ViewChild } from '@angular/core'; import { DateType, DateFormat, CalendarViewType } from '../../model/calendar.model'; import { CalendarService } from '../../services/calendar.service'; export class CalendarComponent { constructor(dpService) { this.dpService = dpService; this.DateTimeChanged = new EventEmitter(); this.day = 1; this.currentView = CalendarViewType.Both; this.errorInBS = false; this.lang = 0; this.dateTypeTitle = ''; this.withTime = false; this.todayColor = 'cornflowerblue'; this.selectedColor = 'rgb(239, 175, 175)'; this.backgroundColor = '#efebeb'; this.dayNameBackgroundColor = 'indianred'; this.hourMax = 23; this.hourMin = 0; this.showTicks = true; this.hourStep = 1; this.thumbLabel = true; this.hourValue = 0; this.minuteMax = 59; this.minuteMin = 0; this.minuteStep = 1; this.minuteValue = 0; this.cols = 7; this.rowHeight = '35px'; this.defaultSelectedDate = null; this.dateType = DateType.AD; this.dateFormatAD = DateFormat.ddMMyyyy; this.dateFormatBS = DateFormat.yyyyMMdd; this.minDate = new Date(1913, 3, 13); this.maxDate = new Date(new Date().getFullYear() + 100, new Date().getMonth(), new Date().getDate()); this.closeOnClick = true; this.defaultDateRange = true; this.currentDate = new Date(); } set content(content) { this.yearMonth = content; } get dateRange() { return this.defaultDateRange; } set dateRange(val) { this.defaultDateRange = val; } showCalendar(dateType, dateFormatAD, dateFormatBS, withTime, minDate, maxDate, closeOnClick, currentDate, lang) { this.dateType = dateType; this.dateFormatAD = dateFormatAD; this.dateFormatBS = dateFormatBS; this.withTime = withTime; this.minDate = minDate; this.maxDate = maxDate; this.closeOnClick = closeOnClick; this.currentDate = currentDate ? currentDate : new Date(); this.lang = lang; if (this.lang === 0) { if (this.dateType === 1) { this.dateTypeTitle = 'AD'; } else { this.dateTypeTitle = 'BS'; } } else { if (this.dateType === 1) { this.dateTypeTitle = 'मिति'; } else { this.dateTypeTitle = 'गते'; } } this.setInitialCalendar(this.currentDate); setTimeout(() => { this.yearMonth.focus(); }, 100); } setInitialCalendar(val) { if (this.dateType === DateType.AD) { const currentDate = new Date(val); this.year = currentDate.getFullYear(); this.month = currentDate.getMonth() + 1; this.day = currentDate.getDate(); this.title = this.dpService.GetADMonthName(+this.month) + ', ' + this.year.toString(); this.setCalendarDay(+this.year, +this.month, +this.day, this.dateType, this.maxDate, this.minDate); } else { const bsDate = this.dpService.GetDateBS(val, this.dateFormatBS); this.year = this.dpService.GetBSYear(bsDate, this.dateFormatBS); this.month = this.dpService.GetBSMonth(bsDate, this.dateFormatBS); this.day = this.dpService.GetBSDay(bsDate, this.dateFormatBS); this.title = this.dpService.GetBSMonthName(+this.month) + ', ' + this.year; this.setCalendarDay(+this.year, +this.month, +this.day, this.dateType, this.maxDate, this.minDate); } if (!!this.withTime) { this.hourValue = val.getHours(); this.minuteValue = val.getMinutes(); } } dateTypeToggle() { if (this.dateType === DateType.AD) { this.dateType = DateType.BS; } else { this.dateType = DateType.AD; } if (this.lang === 0) { if (this.dateType === 1) { this.dateTypeTitle = 'AD'; } else { this.dateTypeTitle = 'BS'; } } else { if (this.dateType === 1) { this.dateTypeTitle = 'मिति'; } else { this.dateTypeTitle = 'गते'; } } this.setCalender(); } get selectedDate() { if (this.defaultSelectedDate === null) { this.setDate(); } return this.defaultSelectedDate; } setCalender() { if (this.dateType === DateType.AD) { const currentDate = new Date(this.currentDate); this.year = currentDate.getFullYear(); this.month = currentDate.getMonth() + 1; this.day = currentDate.getDate(); this.setCalendarDay(this.year, this.month, this.day, DateType.AD, this.maxDate, this.minDate); } else { const bsDate = this.dpService.GetDateBS(this.currentDate, this.dateFormatBS); this.year = this.dpService.GetBSYear(bsDate, this.dateFormatBS); this.month = this.dpService.GetBSMonth(bsDate, this.dateFormatBS); this.day = this.dpService.GetBSDay(bsDate, this.dateFormatBS); this.setCalendarDay(this.year, this.month, this.day, DateType.BS, this.maxDate, this.minDate); } this.setDate(); this.settime(); } setCalendarDay(year, month, day, dType, maxDate, minDate) { const today = new Date(new Date().toDateString()); const dayList = this.dpService.GetWeekDayPrefixList(); this.cols = 7; this.rowHeight = '35px'; this.currentView = CalendarViewType.Both; this.datas = []; this.titles = []; this.month = month; this.year = year; // tslint:disable-next-line:prefer-for-of for (let n = 0; n < dayList.length; n++) { if (this.lang === 0) { this.titles.push({ text: dayList[n].day, rows: 1, cols: 1, color: this.dayNameBackgroundColor }); } else { this.titles.push({ text: dayList[n].nepaliDay, rows: 1, cols: 1, color: this.dayNameBackgroundColor }); } } if (dType === DateType.AD) { // this.dateType = 'AD'; this.title = this.dpService.GetADMonthName(month) + ', ' + year; const d = new Date(year, month - 1, 1).getDay(); const dInm = new Date(year, month, 0).getDate(); if (d > 0) { // tslint:disable-next-line:no-shadowed-variable for (let i = 0; i < d; i++) { this.datas.push({ text: '', id: 0, rows: 1, cols: 1, color: this.backgroundColor }); } } let curDate; let disable = 'false'; const currentDate = new Date(this.currentDate); const selDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()); for (let i = 1; i <= dInm; i++) { curDate = new Date(year, month - 1, i); if (curDate < minDate || curDate > maxDate) { disable = 'true'; } else { disable = 'false'; } if (curDate.getTime() === today.getTime()) { this.datas.push({ text: i, id: i, rows: 1, cols: 1, color: this.todayColor, disable }); } else if (curDate.getTime() === selDate.getTime()) { this.datas.push({ text: i, id: i, rows: 1, cols: 1, color: this.selectedColor, disable }); } else { this.datas.push({ text: i, id: i, rows: 1, cols: 1, color: this.backgroundColor, disable }); } } for (let i = this.datas.length; i <= 41; i++) { this.datas.push({ text: '', id: 0, rows: 1, cols: 1, color: this.backgroundColor }); } } else { let d = new Date(year, month - 1, 1).getDay(); // this.dateType = 'BS'; this.title = this.dpService.GetBSMonthName(month) + ', ' + year; try { d = this.dpService.GetDateAD(+year, +month, 1).getDay(); } catch (e) { this.errorInBS = true; return; } const dInm = this.dpService.GetDaysInMonthBS(+year, +month); let disable = 'false'; // var selDate: Date = this.dpService.GetDateAD(+year, +month, +day) const currentDate = new Date(this.currentDate); const selDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()); if (d > 0) { for (let i = 0; i < d; i++) { this.datas.push({ text: '', id: 0, rows: 1, cols: 1, color: this.backgroundColor }); } } for (let i = 1; i <= dInm; i++) { const curDate = this.dpService.GetDateAD(+year, +month, i); if (curDate < minDate || curDate > maxDate) { disable = 'true'; } else { disable = 'false'; } if (curDate.getTime() === today.getTime()) { this.datas.push({ text: i, id: i, rows: 1, cols: 1, color: this.todayColor, disable }); } else if (curDate.getTime() === selDate.getTime()) { this.datas.push({ text: i, id: i, rows: 1, cols: 1, color: this.selectedColor, disable }); } else { this.datas.push({ text: i, id: i, rows: 1, cols: 1, color: this.backgroundColor, disable }); } } for (let i = this.datas.length; i <= 41; i++) { this.datas.push({ text: '', id: 0, rows: 1, cols: 1, color: this.backgroundColor }); } } this.setDisplayDate(); } setDisplayDate() { const ad = new Date(this.selectedDate.date.getFullYear(), this.selectedDate.date.getMonth(), this.selectedDate.date.getDate()); let yr = this.selectedDate.date.getFullYear(); let mn = this.selectedDate.date.getMonth() + 1; let dy = this.selectedDate.date.getDate(); let mnName = ''; if (this.dateType === DateType.AD) { const bsDate = this.dpService.GetDateBS(ad, this.dateFormatBS); if (bsDate === null) { this.errorInBS = true; this.displayDate = 'BS Calendar Not Found!'; return; } yr = this.dpService.GetBSYear(bsDate, this.dateFormatBS); mn = this.dpService.GetBSMonth(bsDate, this.dateFormatBS); dy = this.dpService.GetBSDay(bsDate, this.dateFormatBS); mnName = this.dpService.GetBSMonthName(mn); } else { mnName = this.dpService.GetADMonthName(mn); } this.displayDate = (this.dateType === DateType.AD) ? 'BS: ' : 'AD: '; this.displayDate = this.displayDate + dy + ' ' + mnName + ' ' + yr; } setCalendarMonth(year, dType) { let disable = 'false'; this.cols = 3; this.rowHeight = this.withTime ? '70px' : '60px'; ; this.datas = []; this.currentView = CalendarViewType.Month; let minYearMnth = this.minDate ? this.minDate.getFullYear().toString() : undefined; let maxYearMnth = this.maxDate ? this.maxDate.getFullYear().toString() : undefined; if (minYearMnth) { minYearMnth = minYearMnth + (this.minDate.getMonth() < 10 ? '0' + this.minDate.getMonth().toString() : this.minDate.getMonth().toString()); } if (maxYearMnth) { maxYearMnth = maxYearMnth + (this.maxDate.getMonth() < 10 ? '0' + this.maxDate.getMonth().toString() : this.maxDate.getMonth().toString()); } if (this.dateType === DateType.BS) { let bs = this.dpService.GetDateBS(this.minDate, this.dateFormatBS); if (bs === null) { minYearMnth = this.dpService.GetMinYear().toString() + '00'; } else { minYearMnth = this.dpService.GetBSYear(bs, this.dateFormatBS).toString(); const mnth = (this.dpService.GetBSMonth(bs, this.dateFormatBS) - 1).toString(); minYearMnth = minYearMnth + (+mnth < 10 ? '0' + mnth.toString() : mnth.toString()); } bs = this.dpService.GetDateBS(this.maxDate, this.dateFormatBS); if (bs === null) { maxYearMnth = this.dpService.GetMaxYear().toString() + '11'; } else { maxYearMnth = this.dpService.GetBSYear(bs, this.dateFormatBS).toString(); const mnth = (this.dpService.GetBSMonth(bs, this.dateFormatBS) - 1).toString(); maxYearMnth = maxYearMnth + (+mnth < 10 ? '0' + mnth.toString() : mnth.toString()); } } let monthList; if (dType === DateType.AD) { monthList = this.dpService.GetADMonthList(); } else { monthList = this.dpService.GetBSMonthList(); } let curYearMnth = ''; for (let i = 0; i < monthList.length; i++) { curYearMnth = year.toString() + (i < 10 ? '0' + i.toString() : i.toString()); if (curYearMnth < minYearMnth || curYearMnth > maxYearMnth) { disable = 'true'; } else { disable = 'false'; } this.datas.push({ text: monthList[i].month, id: i + 1, rows: 1, cols: 1, color: this.backgroundColor, disable }); } this.settime(); } setCalendarYear(fromYear, toYear) { let disable = 'false'; this.cols = 3; this.rowHeight = this.withTime ? '70px' : '60px'; this.datas = []; this.currentView = CalendarViewType.Year; let minYearMnth = this.minDate ? this.minDate.getFullYear() : undefined; let maxYearMnth = this.maxDate ? this.maxDate.getFullYear() : undefined; if (this.dateType === DateType.BS) { let bs = this.dpService.GetDateBS(this.minDate, this.dateFormatBS); if (bs === null) { minYearMnth = this.dpService.GetMinYear(); } else { minYearMnth = this.dpService.GetBSYear(bs, this.dateFormatBS); } bs = this.dpService.GetDateBS(this.maxDate, this.dateFormatBS); if (bs === null) { maxYearMnth = this.dpService.GetMaxYear(); } else { maxYearMnth = this.dpService.GetBSYear(bs, this.dateFormatBS); } } for (let i = fromYear - 1; i <= toYear + 1; i++) { if (i < minYearMnth || i > maxYearMnth) { disable = 'true'; } else { disable = 'false'; } this.datas.push({ text: i, id: i, rows: 1, cols: 1, color: this.backgroundColor, disable }); } this.settime(); } settime() { if (this.withTime) { if (this.currentDate) { this.hourValue = this.currentDate.getHours(); this.minuteValue = this.currentDate.getMinutes(); } else { this.hourValue = 0; this.minuteValue = 0; } } } titleClick() { if (this.currentView === CalendarViewType.Both) { this.currentView = CalendarViewType.Month; this.title = this.year.toString(); this.setCalendarMonth(this.year, this.dateType); } else if (this.currentView === CalendarViewType.Month) { this.currentView = CalendarViewType.Year; let datePart = this.year.toString().substring(0, 3) + '0'; this.fromYear = +datePart; datePart = this.year.toString().substring(0, 3) + '9'; this.toYear = +datePart; this.title = this.fromYear.toString() + '-' + this.toYear.toString(); this.setCalendarYear(this.fromYear, this.toYear); } } upDown(ev) { if (ev === '+') { if (this.currentView === CalendarViewType.Month) { this.year = this.year - 1; this.title = this.year.toString(); this.setCalendarMonth(this.year, this.dateType); } else if (this.currentView === CalendarViewType.Year) { this.fromYear = this.fromYear - 10; this.toYear = this.toYear - 10; this.title = this.fromYear.toString() + '-' + this.toYear.toString(); this.setCalendarYear(this.fromYear, this.toYear); } else if (this.currentView === CalendarViewType.Both) { if (this.month === 1) { this.month = 12; this.year = this.year - 1; } else { this.month = this.month - 1; } if (this.dateType === DateType.BS) { this.monthName = this.dpService.GetBSMonthName(this.month); } else { this.monthName = this.dpService.GetADMonthName(this.month); } this.title = this.monthName + ', ' + this.year; this.setCalendarDay(this.year, this.month, this.day, this.dateType, this.maxDate, this.minDate); } } else { if (this.currentView === CalendarViewType.Month) { this.year = this.year + 1; this.title = this.year.toString(); this.setCalendarMonth(this.year, this.dateType); } else if (this.currentView === CalendarViewType.Year) { this.fromYear = this.fromYear + 10; this.toYear = this.toYear + 10; this.title = this.fromYear.toString() + '-' + this.toYear.toString(); this.setCalendarYear(this.fromYear, this.toYear); } else if (this.currentView === CalendarViewType.Both) { if (this.month === 12) { this.month = 1; this.year = this.year + 1; } else { this.month = this.month + 1; } // this.month = this.month + 1; if (this.dateType === DateType.BS) { this.monthName = this.dpService.GetBSMonthName(this.month); } else { this.monthName = this.dpService.GetADMonthName(this.month); } this.title = this.monthName + ', ' + this.year; this.setCalendarDay(this.year, this.month, this.day, this.dateType, this.maxDate, this.minDate); } } } ItemClicked(ev) { if (this.currentView === CalendarViewType.Both) { this.day = +ev; const today = new Date(new Date().toDateString()); let curDate = new Date(this.year, this.month, 1); const index = this.datas.findIndex(img => img.id === ev); if (this.dateType === DateType.AD) { for (let i = 0; i < this.datas.length; i++) { curDate = new Date(this.year, this.month - 1, +this.datas[i].text); if (today.getTime() === curDate.getTime()) { this.datas[i].color = this.todayColor; } else { if (i !== index) { this.datas[i].color = this.backgroundColor; } else { this.datas[i].color = this.selectedColor; } } } } else { for (let i = 0; i < this.datas.length; i++) { curDate = this.dpService.GetDateAD(this.year, this.month, +this.datas[i].text); if (today.getTime() === curDate.getTime()) { this.datas[i].color = this.todayColor; } else { if (i !== index) { this.datas[i].color = this.backgroundColor; } else { this.datas[i].color = this.selectedColor; } } } } this.returnDate(); } else if (this.currentView === CalendarViewType.Year) { this.currentView = CalendarViewType.Month; this.year = ev; if (this.dateType === DateType.AD) { this.monthName = this.dpService.GetADMonthName(this.month); } else { this.monthName = this.dpService.GetBSMonthName(this.month); } this.title = this.year.toString(); this.setCalendarMonth(this.year, this.dateType); } else if (this.currentView === CalendarViewType.Month) { this.month = ev; if (this.dateType === DateType.AD) { this.monthName = this.dpService.GetADMonthName(this.month); } else { this.monthName = this.dpService.GetBSMonthName(this.month); } this.title = this.monthName + ', ' + this.year; this.currentView = CalendarViewType.Both; this.setCalendarDay(this.year, this.month, 1, this.dateType, this.maxDate, this.minDate); } } setDate() { let dt; if (this.dateType === DateType.AD) { dt = new Date(+this.year, +this.month - 1, +this.day); } else { dt = this.dpService.GetDateAD(+this.year, +this.month, +this.day); } let dtAD = this.dpService.GetFormatedDateAD(dt, this.dateFormatAD); let dtBS = null; try { dtBS = this.dpService.GetDateBS(dt, this.dateFormatBS); } catch (e) { dtBS = ''; } if (!!this.withTime) { const hr = (+this.hourValue < 10) ? '0' + this.hourValue.toString() : this.hourValue.toString(); const min = (+this.minuteValue < 10) ? '0' + this.minuteValue.toString() : this.minuteValue.toString(); dt = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate(), +this.hourValue, +this.minuteValue); dtAD = dtAD + ' ' + hr.toString() + ':' + min.toString(); if (dtBS) { dtBS = dtBS + ' ' + hr.toString() + ':' + min.toString(); } else { dtBS = ''; } // this.hourValue = this.hourValue; // this.minDate = this.minuteValue; } this.defaultSelectedDate = { dateAD: dtAD, dateBS: dtBS, date: dt, selectedDateType: this.dateType }; this.currentDate = dt; } returnDate() { this.setDate(); this.setDisplayDate(); // if (this.closeOnClick) { // if (!this.dateRange) { // if (!this.withTime) { this.DateTimeChanged.emit(this.defaultSelectedDate); // } // } // } } onInputChange(ev, flag) { if (flag === 'm') { this.minuteValue = ev.value; } else { this.hourValue = ev.value; } this.returnDate(); } } CalendarComponent.decorators = [ { type: Component, args: [{ // tslint:disable-next-line:component-selector selector: 'dp-calendar', template: "<div class=\"fx-column\">\r\n <div class=\"dp-title\">\r\n <div>\r\n <button #yearmonth mat-button color=\"primary\" (click)=\"titleClick()\">\r\n {{title}}\r\n </button>\r\n </div>\r\n <button mat-button mat-icon-button class=\"button-size\" color=\"primary\" (click)=\"dateTypeToggle()\"\r\n [disabled]=\"errorInBS\">\r\n {{dateTypeTitle}}\r\n </button>\r\n\r\n <div class=\"year-month\">\r\n <button mat-button mat-icon-button color=\"primary\" (click)=\"upDown('+')\" class=\"button-size\">\r\n <mat-icon class=\"mat-14\">arrow_drop_up</mat-icon>\r\n </button>\r\n <button mat-button mat-icon-button color=\"primary\" (click)=\"upDown('-')\" class=\"button-size\">\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- Calendar Body -->\r\n <div class=\"fx-column\">\r\n <div style=\"padding-bottom:1px\">\r\n <mat-grid-list *ngIf=\"currentView==1\" [cols]=\"cols\" rowHeight=\"25px\">\r\n <mat-grid-tile *ngFor=\"let data of titles\" [colspan]=\"data.cols\" [rowspan]=\"data.rows\"\r\n [style.background]=\"data.color\" style=\"color:white;\">\r\n <span class=\"text-label\">{{data.text}}</span>\r\n </mat-grid-tile>\r\n </mat-grid-list>\r\n </div>\r\n <mat-grid-list *ngIf=\"currentView==1\" [cols]=\"cols\" [rowHeight]=\"rowHeight\">\r\n <mat-grid-tile *ngFor=\"let data of datas\" [colspan]=\"data.cols\" [rowspan]=\"data.rows\" [style.background]=\"data.color\">\r\n <button *ngIf=\"data.id!=0\" mat-fab-button mat-icon-button mat-raised-button [disabled]=\"data.disable\"\r\n color=\"\" [style.width]=\"'25px'\" [style.height]=\"'25px'\"\r\n [style.line-height]=\"'25px'\" (click)=\"ItemClicked(data.id)\">\r\n {{data.text}}\r\n </button>\r\n </mat-grid-tile>\r\n </mat-grid-list>\r\n <mat-grid-list *ngIf=\"currentView!=1\" [cols]=\"cols\" [rowHeight]=\"rowHeight\">\r\n <mat-grid-tile *ngFor=\"let data of datas\" [colspan]=\"data.cols\" [rowspan]=\"data.rows\" [style.background]=\"data.color\">\r\n <button *ngIf=\"data.id!=0\" mat-button [disabled]=\"data.disable\" color=\"\" (click)=\"ItemClicked(data.id)\">\r\n {{data.text}}\r\n </button>\r\n </mat-grid-tile>\r\n </mat-grid-list>\r\n </div>\r\n <!-- Time body -->\r\n <div class=\"fx-row\" *ngIf=\"withTime && currentView==1\" >\r\n <div class=\"fx-column-time\">\r\n <mat-slider thumbLabel [max]=\"hourMax\" [min]=\"hourMin\" [step]=\"hourStep\" color=\"primary\"\r\n tick-interval=\"1\" [(ngModel)]=\"hourValue\" [value]=\"hourValue\" (input)=\"onInputChange($event,'h')\">\r\n </mat-slider>\r\n <div class=\"fx-row-m15\">\r\n <span class=\"text-label\">Hour:</span>\r\n <span class=\"text-label\">{{hourValue}}</span>\r\n </div>\r\n </div>\r\n <div class=\"fx-column-time\">\r\n <mat-slider thumbLabel [max]=\"minuteMax\" [min]=\"minuteMin\" [step]=\"minuteStep\" \r\n tick-interval=\"1\" color=\"primary\" [(ngModel)]=\"minuteValue\" [value]=\"minuteValue\" (input)=\"onInputChange($event,'m')\">\r\n </mat-slider>\r\n <div class=\"fx-row-m15\">\r\n <span class=\"text-label\">Minute:</span>\r\n <span class=\"text-label\">{{minuteValue}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".dp-title,:host{display:flex}.dp-title{align-items:center;box-sizing:border-box;flex-direction:row;min-width:275px;place-content:center space-between}.button-size{height:30px;line-height:30px;width:30px}.fx-column,.fx-column-time{box-sizing:border-box;display:flex;flex-direction:column}.fx-column-time{align-items:center}.fx-row{background-color:#ebefec;margin-top:1px;padding-left:10px}.fx-row,.fx-row-m15{box-sizing:border-box;display:flex;flex-direction:row}.fx-row-m15{margin-top:-15px}.text-bold,.text-label{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.text-bold{font-weight:700}.mat-menu-content{padding:0!important}"] },] } ]; CalendarComponent.ctorParameters = () => [ { type: CalendarService } ]; CalendarComponent.propDecorators = { content: [{ type: ViewChild, args: ['yearmonth', { static: false },] }], DateTimeChanged: [{ type: Output }], dateRange: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L2xpYnJhcnkvTWF0Q2FsZW5kYXIvcHJvamVjdHMvbmd4LW1hdC1jYWxlbmRhci9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUNILFFBQVEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQ3pDLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBU2xFLE1BQU0sT0FBTyxpQkFBaUI7SUEwSDFCLFlBQW9CLFNBQTBCO1FBQTFCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBcEhwQyxvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELFFBQUcsR0FBRyxDQUFDLENBQUM7UUFFaEIsZ0JBQVcsR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBRXRELGNBQVMsR0FBUSxLQUFLLENBQUM7UUFDdkIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFPVCxlQUFVLEdBQUcsZ0JBQWdCLENBQUM7UUFDOUIsa0JBQWEsR0FBRyxvQkFBb0IsQ0FBQztRQUNyQyxvQkFBZSxHQUFHLFNBQVMsQ0FBQztRQUM1QiwyQkFBc0IsR0FBRyxXQUFXLENBQUM7UUFDN0MsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFDSixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixlQUFVLEdBQUcsSUFBSSxDQUFD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