{"version":3,"sources":["kendo.calendar.js"],"names":["f","define","$","undefined","title","date","min","max","modular","end","start","getFullYear","minYear","maxYear","view","options","data","idx","setter","build","weekNumberBuild","length","cells","isWeekColumnVisible","cellsPerRow","perRow","weekNumber","weekNumberTemplate","content","cellTemplate","empty","emptyCellTemplate","html","createDate","getMonth","getDate","adjustDST","disableDates","isInRange","compare","date1","date2","modifier","year1","result","getToday","today","DATE","restrictValue","value","shiftArray","array","slice","concat","setDate","multiplier","setFullYear","daysBetweenTwoDates","startDate","endDate","temp","fromDateUTC","endDateUTC","calendar","views","Date","UTC","Math","ceil","kendo","MS_PER_DAY","addDaysToArray","numberOfDays","fromDate","i","nextDay","getTime","push","mousetoggle","e","disabled","this","hasClass","toggleClass","HOVER","MOUSEENTER","indexOf","type","FOCUS","prevent","preventDefault","year","month","dateObject","getCalendarInfo","culture","getCulture","calendars","standard","normalize","depth","format","extractFormat","patterns","d","isNaN","MONTH","dates","makeUnselectable","element","isIE8","find","attr","addClassToViewContainer","currentView","addClass","inArray","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","option","isFunction","isArray","createDisabledExpr","noop","convertDatesArray","setHours","body","callback","day","index","disabledDates","days","searchExpression","toLowerCase","Function","isEqualDate","oldValue","newValue","window","support","ui","Widget","keys","parse","parseDate","weekInYear","Selectable","_extractFormat","template","transitions","transitionOrigin","css","useWithBlock","browser","msie","version","outerHeight","_outerHeight","outerWidth","_outerWidth","ns","CLICK","KEYDOWN_NS","ID","MIN","LEFT","SLIDE","CENTURY","CHANGE","NAVIGATE","VALUE","DISABLED","FOCUSED","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","SELECTED","BLUR","FOCUS_WITH_NS","touch","MOUSEENTER_WITH_NS","MOUSELEAVE","MS_PER_MINUTE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","proxy","extend","decade","century","Calendar","init","id","that","fn","call","wrapper","url","unescape","_templates","_selectable","_header","_footer","footer","on","_move","link","currentTarget","firstChild","_toDateObject","href","_view","name","selectable","_click","_focusView","focusOnNav","_cellID","_isMultipleSelection","first","closest","last","_lastActive","selectRange","event","_current","_value","_class","_selectDates","_index","_addClassProxy","_active","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","removeClass","selectDates","notify","animation","horizontal","effects","reverse","duration","divisor","vertical","messages","weekColumnHeader","events","setOptions","navigate","destroy","_today","off","_title","_destroySelectable","_table","current","focus","table","_bindTable","_option","navigateToPast","_navigate","navigateToFuture","navigateUp","navigateDown","trigger","from","old","currentValue","future","to","replace","_oldTable","kendoStop","_changeView","_animate","_focus","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","map","filter","position","time","grep","_validateValue","selectedDates","each","clear","_selectElement","selectableOptions","parseOptions","multiple","aria","inputSelectors","change","_onSelect","relatedTarget","_onRelatedTarget","target","is","eventArgs","ctrlKey","metaKey","_toggleSelection","_cellsBySelector","_deselect","_addSelectedCellsToArray","shiftKey","_rangeSelection","currentCell","toDateCell","daysDifference","toDate","selector","item","currentDateIndex","Number","splice","_dateInView","firstDateInView","lastDateInView","method","focusedDate","key","keyCode","isRtl","isDisabled","RIGHT","UP","DOWN","SPACEBAR","HOME","END","getHours","getMinutes","getSeconds","getMilliseconds","ENTER","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","PAGEUP","PAGEDOWN","_unselect","navigatableDate","active","parent","remove","insertAfter","_horizontal","viewWidth","add","width","wrap","float","margin-left","complete","unwrap","kendoAnimate","_vertical","cell","top","prev","left","insertBefore","parseInt","height","className","disabledDate","removeAttr","appendTo","show","toString","_toggle","hide","links","click","eq","arrow","firstDayCurrentMonth","has","isBigger","toggle","isTodayDisabled","_todayClick","split","footerTemplate","plugin","firstDayOfMonth","firstVisibleDay","calendarInfo","firstDay","getDay","setTime","tzOffsetBefore","getTimezoneOffset","resultDATE","tzOffsetDiff","months","names","navigateUrl","hasUrl","currentCalendar","firstDayIdx","shortNames","namesShort","lastDayOfMonth","cssClass","linkClass","dateString","join","currentDate","timeOffset","abs","month1","month2","year2","hours","namesAbbr","setMonth","viewsEnum","jQuery","amd","a1","a2","a3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,kBACH,aACA,oBACDD,IACL,WAsyCE,MA3xCC,UAAUE,EAAGC,GA0kCV,QAASC,GAAMC,EAAMC,EAAKC,EAAKC,GAC3B,GAA0FC,GAAtFC,EAAQL,EAAKM,cAAeC,EAAUN,EAAIK,cAAeE,EAAUN,EAAII,aAS3E,OARAD,IAAgBA,EAAQF,EACxBC,EAAMC,GAASF,EAAU,GACrBE,EAAQE,IACRF,EAAQE,GAERH,EAAMI,IACNJ,EAAMI,GAEHH,EAAQ,IAAMD,EAEzB,QAASK,GAAKC,GACV,GAAaC,GAATC,EAAM,EAASX,EAAMS,EAAQT,IAAKC,EAAMQ,EAAQR,IAAKG,EAAQK,EAAQL,MAAOQ,EAASH,EAAQG,OAAQC,EAAQJ,EAAQI,MAAOC,EAAkBL,EAAQK,gBAAiBC,EAASN,EAAQO,OAAS,GAAIC,EAAsBR,EAAQQ,oBAAqBC,EAAcT,EAAQU,QAAU,EAAGC,EAAaX,EAAQW,YAAcC,EAAoBC,EAAUb,EAAQa,SAAWC,EAAcC,EAAQf,EAAQe,OAASC,EAAmBC,EAAOjB,EAAQiB,MAAQ,sGAIpc,KAHIT,IACAS,GAAQN,EAAWN,EAAgBV,KAEhCO,EAAMI,EAAQJ,IACbA,EAAM,GAAKA,EAAMO,IAAgB,IACjCQ,GAAQ,uBACJT,IACAS,GAAQN,EAAWN,EAAgBV,MAG3CA,EAAQuB,EAAWvB,EAAMC,cAAeD,EAAMwB,WAAYxB,EAAMyB,WAChEC,EAAU1B,EAAO,GACjBM,EAAOG,EAAMT,EAAOO,EAAKF,EAAQsB,cACjCL,GAAQM,EAAU5B,EAAOJ,EAAKC,GAAOqB,EAAQZ,GAAQc,EAAMd,GAC3DE,EAAOR,EAAO,EAElB,OAAOsB,GAAO,wBAElB,QAASO,GAAQC,EAAOC,EAAOC,GAC3B,GAAIC,GAAQH,EAAM7B,cAAeD,EAAQ+B,EAAM9B,cAAeF,EAAMC,EAAOkC,EAAS,CAUpF,OATIF,KACAhC,GAAgBA,EAAQgC,EACxBjC,EAAMC,EAAQA,EAAQgC,EAAWA,EAAW,GAE5CC,EAAQlC,EACRmC,EAAS,EACFD,EAAQjC,IACfkC,MAEGA,EAEX,QAASC,KACL,GAAIC,GAAQ,GAAIC,GAChB,OAAO,IAAIA,IAAKD,EAAMnC,cAAemC,EAAMZ,WAAYY,EAAMX,WAEjE,QAASa,GAAcC,EAAO3C,EAAKC,GAC/B,GAAIuC,GAAQD,GASZ,OARII,KACAH,EAAQ,GAAIC,MAAME,KAElB3C,EAAMwC,EACNA,EAAQ,GAAIC,MAAMzC,IACXC,EAAMuC,IACbA,EAAQ,GAAIC,MAAMxC,KAEfuC,EAEX,QAASR,GAAUjC,EAAMC,EAAKC,GAC1B,OAAQF,IAASC,IAAQD,IAASE,EAEtC,QAAS2C,GAAWC,EAAOlC,GACvB,MAAOkC,GAAMC,MAAMnC,GAAKoC,OAAOF,EAAMC,MAAM,EAAGnC,IAElD,QAASqC,GAAQjD,EAAM4C,EAAOM,GAC1BN,EAAQA,YAAiBF,IAAOE,EAAMtC,cAAgBN,EAAKM,cAAgB4C,EAAaN,EACxF5C,EAAKmD,YAAYP,GAErB,QAASQ,GAAoBC,EAAWC,GAAxC,GAEYC,GAIJC,EACAC,CACJ,QAPKH,GAAWD,IACRE,GAAQF,EACZK,EAASC,MAAM,GAAGV,QAAQI,EAAWC,GACrCI,EAASC,MAAM,GAAGV,QAAQK,EAAS,GAAIM,MAAKL,KAE5CC,EAAcI,KAAKC,IAAIR,EAAU/C,cAAe+C,EAAUxB,WAAYwB,EAAUvB,WAChF2B,EAAaG,KAAKC,IAAIP,EAAQhD,cAAegD,EAAQzB,WAAYyB,EAAQxB,WACtEgC,KAAKC,OAAON,GAAcD,GAAeQ,EAAMhE,KAAKiE,YAE/D,QAASC,GAAepB,EAAOqB,EAAcC,EAAUpC,GAAvD,GACaqC,GACDC,CADR,KAASD,EAAI,EAAGA,GAAKF,EAAcE,IAC3BC,EAAU,GAAIV,MAAKQ,EAASG,WAChCD,EAAU,GAAIV,MAAKU,EAAQrB,QAAQqB,EAAQxC,UAAYuC,IAClDrC,EAAasC,IACdxB,EAAM0B,KAAKF,GAIvB,QAASG,GAAYC,GACjB,GAAIC,GAAW9E,EAAE+E,MAAMC,SAAS,mBAC3BF,IACD9E,EAAE+E,MAAME,YAAYC,GAAOC,GAAWC,QAAQP,EAAEQ,UAAcR,EAAEQ,MAAQC,IAGhF,QAASC,GAAQV,GACbA,EAAEW,iBAEN,QAASzD,GAAW0D,EAAMC,EAAOvF,GAC7B,GAAIwF,GAAa,GAAI9C,IAAK4C,EAAMC,EAAOvF,EAEvC,OADAwF,GAAWrC,YAAYmC,EAAMC,EAAOvF,GAC7BwF,EAEX,QAASC,GAAgBC,GACrB,MAAOC,GAAWD,GAASE,UAAUC,SAEzC,QAASC,GAAUpF,GACf,GAAIL,GAAQsD,GAAMjD,EAAQL,OAAQ0F,EAAQpC,GAAMjD,EAAQqF,OAAQL,EAAUC,EAAWjF,EAAQgF,QAC7FhF,GAAQsF,OAASC,EAAcvF,EAAQsF,QAAUN,EAAQE,UAAUC,SAASK,SAASC,GACjFC,MAAM/F,KACNA,EAAQ,EACRK,EAAQL,MAAQgG,KAEhBN,IAAUjG,GAAaiG,EAAQ1F,KAC/BK,EAAQqF,MAAQM,IAEE,OAAlB3F,EAAQ4F,QACR5F,EAAQ4F,UAGhB,QAASC,GAAiBC,GAClBC,GACAD,EAAQE,KAAK,KAAKC,KAAK,eAAgB,MAG/C,QAASC,GAAwBJ,EAASK,GACtCL,EAAQM,SAAS,KAAOD,GAE5B,QAASE,GAAQ/G,EAAMsG,GACnB,IAAK,GAAIjC,GAAI,EAAGrD,EAASsF,EAAMtF,OAAQqD,EAAIrD,EAAQqD,IAC/C,GAAIrE,KAAUsG,EAAMjC,GAChB,OAAO,CAGf,QAAO,EAEX,QAAS2C,GAAgBC,EAAQC,GAC7B,QAAID,IACOA,EAAO3G,gBAAkB4G,EAAO5G,eAAiB2G,EAAOpF,aAAeqF,EAAOrF,YAAcoF,EAAOnF,YAAcoF,EAAOpF,WAIvI,QAASqF,GAAaF,EAAQC,GAC1B,QAAID,IACOA,EAAO3G,gBAAkB4G,EAAO5G,eAAiB2G,EAAOpF,aAAeqF,EAAOrF,YAI7F,QAASuF,GAAgBC,GACrB,MAAIrD,GAAMsD,WAAWD,GACVA,EAEPxH,EAAE0H,QAAQF,GACHG,EAAmBH,GAEvBxH,EAAE4H,KAEb,QAASC,GAAkBpB,GAA3B,GAEajC,GADL9B,IACJ,KAAS8B,EAAI,EAAGA,EAAIiC,EAAMtF,OAAQqD,IAC9B9B,EAAOiC,KAAK8B,EAAMjC,GAAGsD,SAAS,EAAG,EAAG,EAAG,GAE3C,OAAOpF,GAEX,QAASiF,GAAmBlB,GAA5B,GACQsB,GAAMC,EAaGxD,EACDyD,EACAC,EAfQC,KAAoBC,GAChC,KACA,KACA,KACA,KACA,KACA,KACA,MACDC,EAAmB,gDAC1B,IAAI5B,EAAM,YAAc5D,IACpBsF,EAAgBN,EAAkBpB,GAClCsB,EAAO,8EAAgFI,EAAgB,WAAaE,MACjH,CACH,IAAS7D,EAAI,EAAGA,EAAIiC,EAAMtF,OAAQqD,IAC1ByD,EAAMxB,EAAMjC,GAAGtB,MAAM,EAAG,GAAGoF,cAC3BJ,EAAQlI,EAAEkH,QAAQe,EAAKG,GACvBF,MACAC,EAAcxD,KAAKuD,EAG3BH,GAAO,kEAAoEI,EAAgB,WAAaE,EAG5G,MADAL,GAAeO,SAAS,OAAQR,GAGpC,QAASS,GAAYC,EAAUC,GAK3B,MAJID,aAAoB1E,OAAQ2E,YAAoB3E,QAChD0E,EAAWA,EAAS/D,UACpBgE,EAAWA,EAAShE,WAEjB+D,IAAaC,EA9wC3B,GA8zBO7E,GA7zBAM,EAAQwE,OAAOxE,MAAOyE,EAAUzE,EAAMyE,QAASC,EAAK1E,EAAM0E,GAAIC,EAASD,EAAGC,OAAQC,EAAO5E,EAAM4E,KAAMC,EAAQ7E,EAAM8E,UAAW/G,EAAYiC,EAAMhE,KAAK+B,UAAWgH,EAAa/E,EAAMhE,KAAK+I,WAAYC,EAAahF,EAAM0E,GAAGM,WAAY/C,EAAgBjC,EAAMiF,eAAgBC,EAAWlF,EAAMkF,SAAUvD,EAAa3B,EAAM2B,WAAYwD,EAAcnF,EAAMyE,QAAQU,YAAaC,EAAmBD,EAAcA,EAAYE,IAAM,mBAAqB,GAAI7H,EAAe0H,EAAS,mJAAqJI,cAAc,IAAU5H,EAAoBwH,EAAS,mCAAqCI,cAAc,IAAUhI,EAAqB4H,EAAS,+CAAiDI,cAAc,IAAUC,EAAUvF,EAAMyE,QAAQc,QAAS9C,EAAQ8C,EAAQC,MAAQD,EAAQE,QAAU,EAAGC,EAAc1F,EAAM2F,aAAcC,EAAa5F,EAAM6F,YAAaC,EAAK,iBAAkBC,EAAQ,QAAUD,EAAIE,EAAa,UAAYF,EAAIG,EAAK,KAAMC,EAAM,MAAOC,EAAO,OAAQC,GAAQ,UAAW/D,GAAQ,QAASgE,GAAU,UAAWC,GAAS,SAAUC,GAAW,WAAYC,GAAQ,QAASzF,GAAQ,gBAAiB0F,GAAW,mBAAoBC,GAAU,kBAAmBC,GAAa,gBAAiBC,GAAkB,WAAaD,GAAa,IAAKE,GAAQ,cAAeC,GAAe,kBAAmBC,GAAoB,wBAA0BN,GAAW,IAAKO,GAAqB,wBAAyBC,GAAW,mBAAoBC,GAAO,OAASpB,EAAI3E,GAAQ,QAASgG,GAAgBhG,GAAQ2E,EAAI9E,GAAayD,EAAQ2C,MAAQ,aAAe,aAAcC,GAAqB5C,EAAQ2C,MAAQ,aAAetB,EAAK,aAAeA,EAAIwB,GAAa7C,EAAQ2C,MAAQ,WAAatB,EAAK,aAAeA,EAAK,aAAeA,EAAIyB,GAAgB,IAAOtH,GAAa,MAAUuH,GAAY,aAAcC,GAAY,aAAcC,GAAgB,gBAAiBC,GAAgB,gBAAiBC,GAAa,aAAcC,GAAQhM,EAAEgM,MAAOC,GAASjM,EAAEiM,OAAQpJ,GAAOkB,KAAMD,IACviE4B,MAAO,EACPD,KAAM,EACNyG,OAAQ,EACRC,QAAS,GAEbC,GAAWtD,EAAOmD,QAClBI,KAAM,SAAU1F,EAAS9F,GACrB,GAAiBkC,GAAOuJ,EAApBC,EAAOxH,IACX+D,GAAO0D,GAAGH,KAAKI,KAAKF,EAAM5F,EAAS9F,GACnC8F,EAAU4F,EAAKG,QAAUH,EAAK5F,QAC9B9F,EAAU0L,EAAK1L,QACfA,EAAQ8L,IAAMhE,OAAOiE,SAAS/L,EAAQ8L,KACtCJ,EAAK1L,QAAQsB,aAAeoF,EAAgBgF,EAAK1L,QAAQsB,cACzDoK,EAAKM,aACLN,EAAKO,cACLP,EAAKQ,UACLR,EAAKS,QAAQT,EAAKU,QAClBX,EAAK3F,EAAQM,SAAS,wBAA0BpG,EAAQW,WAAa,iBAAmB,KAAK0L,GAAG1B,GAAqB,IAAMC,GAAYR,GAAcrG,GAAasI,GAAG/C,EAAY,kBAAmB6B,GAAMO,EAAKY,MAAOZ,IAAOW,GAAGhD,EAAOe,GAAc,SAAUpG,GAC3P,GAAIuI,GAAOvI,EAAEwI,cAAcC,WAAYvK,EAAQwJ,EAAKgB,cAAcH,EAC9DA,GAAKI,KAAKpI,QAAQ,UAClBP,EAAEW,iBAEiB,SAAnB+G,EAAKkB,MAAMC,MAAmBnB,EAAK1L,QAAQsB,aAAaY,IAGrC,SAAnBwJ,EAAKkB,MAAMC,MAAyC,UAAtB7M,EAAQ8M,YACtCpB,EAAKqB,OAAO5N,EAAEoN,MAEnBF,GAAG,UAAYjD,EAAI,6BAA8B,WAChDsC,EAAKsB,WAAWtB,EAAK1L,QAAQiN,cAAe,KAC7ChH,KAAKsD,GACJkC,IACAC,EAAKwB,QAAUzB,EAAK,kBAEpBC,EAAKyB,wBAA0BzB,EAAK1L,QAAQW,YAC5CmF,EAAQuG,GAAGhD,EAAOiB,GAAoB,SAAUtG,GAC5C,GAAIoJ,GAAQjO,EAAE6E,EAAEwI,eAAea,QAAQ,MAAMrH,KAAKqE,IAAmB+C,QAASE,EAAO5B,EAAKoB,WAAWS,YAAcpO,EAAE6E,EAAEwI,eAAea,QAAQ,MAAMrH,KAAKqE,IAAmBiD,MAC5K5B,GAAKoB,WAAWU,YAAYJ,EAAOE,GAAQG,MAAOzJ,IAClD0H,EAAKgC,SAAWhC,EAAKiC,OAASjC,EAAKgB,cAAcY,EAAKtH,KAAK,MAC3D0F,EAAKkC,OAAO5D,GAAS0B,EAAKgC,YAGlCtI,EAAUpF,GACVkC,EAAQiG,EAAMnI,EAAQkC,MAAOlC,EAAQsF,OAAQtF,EAAQgF,SACrD0G,EAAKmC,gBACLnC,EAAKoC,OAAS7K,GAAMjD,EAAQL,OAC5B+L,EAAKgC,SAAW,GAAI1L,MAAMC,EAAcC,EAAOlC,EAAQT,IAAKS,EAAQR,OACpEkM,EAAKqC,eAAiB,WAElB,GADArC,EAAKsC,SAAU,EACXtC,EAAKuC,MAAM9J,SAAS4F,IAAW,CAC/B,GAAImE,GAAcxC,EAAKkB,MAAMuB,aAAarM,IAC1C4J,GAAKuC,MAAQvC,EAAK0C,YAAYF,GAElCxC,EAAKuC,MAAM7H,SAAS4D,KAExB0B,EAAK2C,kBAAoB,WACrB3C,EAAKsC,SAAU,EACftC,EAAKuC,MAAMK,YAAYtE,KAE3B0B,EAAKxJ,MAAMA,GACPwJ,EAAKyB,wBAA0BnN,EAAQuO,YAAYjO,OAAS,GAC5DoL,EAAK6C,YAAYvO,EAAQuO,aAE7BjL,EAAMkL,OAAO9C,IAEjB1L,SACI6M,KAAM,WACN3K,MAAO,KACP3C,IAAK,GAAIyC,IAAK,KAAM,EAAG,GACvBxC,IAAK,GAAIwC,IAAK,KAAM,GAAI,IACxB4D,SACAtE,aAAc,KACdwK,IAAK,GACL9G,QAAS,GACToH,OAAQ,GACR9G,OAAQ,GACRT,SACAlE,YAAY,EACZmM,WAAY,SACZyB,eACA5O,MAAOgG,GACPN,MAAOM,GACP8I,WACIC,YACIC,QAASjF,GACTkF,SAAS,EACTC,SAAU,IACVC,QAAS,GAEbC,UACIJ,QAAS,SACTE,SAAU,MAGlBG,UAAYC,iBAAkB,KAElCC,QACItF,GACAC,IAEJsF,WAAY,SAAUnP,GAClB,GAAI0L,GAAOxH,IACXkB,GAAUpF,GACVA,EAAQsB,aAAeoF,EAAgB1G,EAAQsB,cAC/C2G,EAAO0D,GAAGwD,WAAWvD,KAAKF,EAAM1L,GAChC0L,EAAKM,aACLN,EAAKO,cACLP,EAAKS,QAAQT,EAAKU,QAClBV,EAAKoC,OAAS7K,GAAMyI,EAAK1L,QAAQL,OACjC+L,EAAK0D,YAETC,QAAS,WACL,GAAI3D,GAAOxH,KAAMnC,EAAQ2J,EAAK4D,MAC9B5D,GAAK5F,QAAQyJ,IAAInG,GACjBsC,EAAK8D,OAAOD,IAAInG,GAChBsC,EAAKZ,IAAWyE,IAAInG,GACpBsC,EAAKX,IAAWwE,IAAInG,GACpBsC,EAAK+D,qBACLnM,EAAM+L,QAAQ3D,EAAKgE,QACf3N,GACAuB,EAAM+L,QAAQtN,EAAMwN,IAAInG,IAE5BnB,EAAO0D,GAAG0D,QAAQzD,KAAKF,IAE3BiE,QAAS,WACL,MAAOzL,MAAKwJ,UAEhB3N,KAAM,WACF,MAAOmE,MAAK0I,OAEhBgD,MAAO,SAAUC,GACbA,EAAQA,GAAS3L,KAAKwL,OACtBxL,KAAK4L,WAAWD,GAChBA,EAAMD,SAEVrQ,IAAK,SAAU2C,GACX,MAAOgC,MAAK6L,QAAQvG,EAAKtH,IAE7B1C,IAAK,SAAU0C,GACX,MAAOgC,MAAK6L,QAAQ,MAAO7N,IAE/B8N,eAAgB,WACZ9L,KAAK+L,UAAUnF,QAEnBoF,iBAAkB,WACdhM,KAAK+L,UAAUlF,GAAW,IAE9BoF,WAAY,WACR,GAAIzE,GAAOxH,KAAMmD,EAAQqE,EAAKoC,MAC1BpC,GAAK8D,OAAOrL,SAAS4F,KAGzB2B,EAAK0D,SAAS1D,EAAKgC,WAAYrG,IAEnC+I,aAAc,SAAUlO,GACpB,GAAIwJ,GAAOxH,KAAMmD,EAAQqE,EAAKoC,OAAQzI,EAAQqG,EAAK1L,QAAQqF,KAC3D,IAAKnD,EAGL,MAAImF,KAAUpE,GAAMoC,IACXsC,EAAY+D,EAAKiC,OAAQjC,EAAKgC,WAAc/F,EAAY+D,EAAKiC,OAAQzL,KACtEwJ,EAAKxJ,MAAMA,GACXwJ,EAAK2E,QAAQzG,KAEjB,IAEJ8B,EAAK0D,SAASlN,IAASmF,GAAvBqE,IAEJ0D,SAAU,SAAUlN,EAAOnC,GAAjB,GAEF2L,GAAa1L,EAAwBgF,EAA2BzF,EAAmBC,EAAmBH,EAAqBiR,EAAoBC,EAAsBC,EAA8BC,EAA0C1B,EAAuD2B,EAAIvK,EAAa3E,EAASyC,EA6C1T0M,CA9CR5Q,GAAO2F,MAAM3F,GAAQkD,GAAMlD,GAAQA,EAC/B2L,EAAOxH,KAAMlE,EAAU0L,EAAK1L,QAASgF,EAAUhF,EAAQgF,QAASzF,EAAMS,EAAQT,IAAKC,EAAMQ,EAAQR,IAAKH,EAAQqM,EAAK8D,OAAQc,EAAO5E,EAAKgE,OAAQa,EAAM7E,EAAKkF,UAAWJ,EAAe9E,EAAKgC,SAAU+C,EAASvO,IAAUA,GAASsO,EAAczB,EAAWhP,IAASX,GAAaW,IAAS2L,EAAKoC,OAC3R5L,IACDA,EAAQsO,GAEZ9E,EAAKgC,SAAWxL,EAAQ,GAAIF,MAAMC,EAAcC,EAAO3C,EAAKC,KACxDO,IAASX,EACTW,EAAO2L,EAAKoC,OAEZpC,EAAKoC,OAAS/N,EAElB2L,EAAKkB,MAAQzG,EAAcnD,EAASC,MAAMlD,GAC1CyB,EAAU2E,EAAY3E,QACtByC,EAAWlE,IAASkD,GAAM0G,IAC1BtK,EAAM+E,YAAY2F,GAAU9F,GAAUgC,KAAK+E,GAAe/G,GAC1DA,EAAWzC,EAAQU,EAAO3C,GAAO,EACjCmM,EAAKZ,IAAW1G,YAAY2F,GAAU9F,GAAUgC,KAAK+E,GAAe/G,GAChEyH,EAAKZ,IAAW3G,SAAS4F,KACzB2B,EAAKZ,IAAWwD,YAAYjK,IAEhCJ,EAAWzC,EAAQU,EAAO1C,MAC1BkM,EAAKX,IAAW3G,YAAY2F,GAAU9F,GAAUgC,KAAK+E,GAAe/G,GAChEyH,EAAKX,IAAW5G,SAAS4F,KACzB2B,EAAKX,IAAWuD,YAAYjK,IAE5BiM,GAAQC,GAAOA,EAAItQ,KAAK,eACxBsQ,EAAIM,WAAU,GAAM,GACpBP,EAAKO,WAAU,GAAM,IAEzBnF,EAAKkF,UAAYN,EACZA,IAAQ5E,EAAKoF,cACdzR,EAAM4B,KAAKkF,EAAY9G,MAAM6C,EAAO3C,EAAKC,EAAKwF,IAC9C0G,EAAKgE,OAASgB,EAAKvR,EAAEgH,EAAYtF,QAAQuK,IACrC7L,IAAKA,EACLC,IAAKA,EACLF,KAAM4C,EACN4J,IAAK9L,EAAQ8L,IACblG,MAAO5F,EAAQ4F,MACfN,OAAQtF,EAAQsF,OAChBN,QAASA,EACT1D,aAActB,EAAQsB,aACtBd,oBAAqBR,EAAQW,WAC7BqO,SAAUhP,EAAQgP,UACnBtD,EAAKvF,EAAY0G,SACpB3G,EAAwBwK,EAAIvK,EAAY0G,MACxChH,EAAiB6K,GACbC,EAAUL,GAAQA,EAAKrQ,KAAK,WAAayQ,EAAGzQ,KAAK,SACrDyL,EAAKqF,UACDT,KAAMA,EACNI,GAAIA,EACJ3B,SAAUA,EACV0B,OAAQA,EACRE,QAASA,IAEbjF,EAAK2E,QAAQxG,IACb6B,EAAKsF,OAAO9O,IAEZnC,IAASkD,GAAMjD,EAAQqF,QAAUqG,EAAKmC,aAAavN,OAAS,GAC5DoL,EAAKuF,gCAEuB,WAA5BvF,EAAK1L,QAAQ8M,YACT/M,IAASkD,GAAMjD,EAAQqF,QAAUqG,EAAKiC,SAAWjC,EAAK1L,QAAQsB,aAAaoK,EAAKiC,SAChFjC,EAAKkC,OAAO,mBAAoBlC,EAAKiC,QAG7CjC,EAAKkC,OAAO5D,GAAS9H,IAChBoO,GAAQ5E,EAAKuC,OACdvC,EAAKuC,MAAMK,YAAYtE,IAE3B0B,EAAKoF,aAAc,GAEvBvC,YAAa,SAAU3I,GACnB,GAAiBsL,GAAoBC,EAAjCzF,EAAOxH,IACX,OAAI0B,KAAUxG,EACHsM,EAAKmC,cAEhBsD,EAAcvL,EAAMwL,IAAI,SAAU9R,GAC9B,MAAOA,GAAKuE,YACbwN,OAAO,SAAU/R,EAAMgS,EAAUlP,GAChC,MAAOA,GAAMmC,QAAQjF,KAAUgS,IAChCF,IAAI,SAAUG,GACb,MAAO,IAAIrO,MAAKqO,KAEpBL,EAAqB/R,EAAEqS,KAAKL,EAAa,SAAUjP,GAC/C,GAAIA,EACA,OAAQwJ,EAAK+F,eAAe,GAAIvO,MAAKhB,EAAM+E,SAAS,EAAG,EAAG,EAAG,QAAU/E,IAG/EwJ,EAAKmC,aAAeqD,EAAmB5Q,OAAS,EAAI4Q,EAA4C,IAAvBC,EAAY7Q,OAAe6Q,EAAczF,EAAKmC,aACvHnC,EAAKuF,gCAbLE,IAeJjP,MAAO,SAAUA,GAAV,GAOK5C,GANJoM,EAAOxH,KAAMqM,EAAM7E,EAAKkB,MAAO7M,EAAO2L,EAAKkB,KAC/C,OAAI1K,KAAU9C,EACHsM,EAAKiC,QAEhBzL,EAAQwJ,EAAK+F,eAAevP,GACxBA,GAASwJ,EAAKyB,yBACV7N,EAAO,GAAI4D,QAAMhB,IACrB5C,EAAK2H,SAAS,EAAG,EAAG,EAAG,GACvByE,EAAKmC,cAAgBvO,GACrBoM,EAAKoB,WAAWS,YAAc,MAE9BgD,GAAiB,OAAVrO,GAAkBwJ,EAAKuC,MAC9BvC,EAAKuC,MAAMK,YAAY/D,KAEvBmB,EAAKoF,aAAe5O,GAASnC,GAA+C,IAAvCA,EAAKyB,QAAQU,EAAOwJ,EAAKgC,UAC9DhC,EAAK0D,SAASlN,IAXlBA,IAcJuP,eAAgB,SAAUvP,GACtB,GAAIwJ,GAAOxH,KAAMlE,EAAU0L,EAAK1L,QAAST,EAAMS,EAAQT,IAAKC,EAAMQ,EAAQR,GAgB1E,OAfc,QAAV0C,IACAwJ,EAAKgC,SAAWxM,EAAWwK,EAAKgC,SAAS9N,cAAe8L,EAAKgC,SAASvM,WAAYuK,EAAKgC,SAAStM,YAEpGc,EAAQiG,EAAMjG,EAAOlC,EAAQsF,OAAQtF,EAAQgF,SAC/B,OAAV9C,IACAA,EAAQ,GAAIF,MAAME,IACbX,EAAUW,EAAO3C,EAAKC,KACvB0C,EAAQ,OAGF,OAAVA,GAAmBwJ,EAAK1L,QAAQsB,aAAa,GAAI4B,QAAMhB,KAEhDwJ,EAAKiC,SAAWvO,IACvBsM,EAAKiC,OAAS,MAFdjC,EAAKiC,OAASzL,EAIXwJ,EAAKiC,QAEhBsD,8BAA+B,WAAA,GAOvB1Q,GANAmL,EAAOxH,KACPwN,IACJvS,GAAEwS,KAAKjG,EAAKmC,aAAc,SAAUxG,EAAOnF,GACvCwP,EAAcpO,EAAMN,SAASC,MAAM,GAAGkL,aAAajM,IAAUA,IAEjEwJ,EAAKoB,WAAW8E,QACZrR,EAAQmL,EAAKgE,OAAO1J,KAAKoE,IAAciH,OAAO,SAAUhK,EAAOvB,GAC/D,MAAO4L,GAAcvS,EAAE2G,EAAQ2G,YAAYxG,KAAK3C,EAAM2C,KAAK6D,QAE3DvJ,EAAMD,OAAS,GACfoL,EAAKoB,WAAW+E,eAAetR,GAAO,IAG9C4M,qBAAsB,WAClB,GAAIzB,GAAOxH,IACX,OAAmC,aAA5BwH,EAAK1L,QAAQ8M,YAExBb,YAAa,WAAA,GAKLa,GAAsCgF,EAJtCpG,EAAOxH,IACNwH,GAAKyB,yBAGNL,EAAapB,EAAK1L,QAAQ8M,WAAYgF,EAAoBxJ,EAAWyJ,aAAajF,GAClFgF,EAAkBE,UAClBtG,EAAK5F,QAAQG,KAAK,uBAAwB,QAE9CyF,EAAKoB,WAAa,GAAIxE,GAAWoD,EAAKG,SAClCoG,MAAM,EACNC,eAAgB,0IAChBF,SAAUF,EAAkBE,SAC5BX,OAAQ,uBAAyBhH,GACjC8H,OAAQhH,GAAMO,EAAK0G,UAAW1G,GAC9B2G,cAAelH,GAAMO,EAAK4G,iBAAkB5G,OAGpD4G,iBAAkB,SAAUC,GACxB,GAAI7G,GAAOxH,IACPwH,GAAKoB,WAAW9M,QAAQgS,UAAYO,EAAOC,GAAGnI,MAC9CqB,EAAKgC,SAAWhC,EAAKgB,cAAc6F,EAAOvM,KAAK,MAC/C0F,EAAKkC,OAAO5D,GAAS0B,EAAKgB,cAAc6F,EAAOvM,KAAK,SAG5DoM,UAAW,SAAUpO,GACjB,GAAI0H,GAAOxH,KAAMuO,EAAYzO,EAAG8N,EAAoBxJ,EAAWyJ,aAAarG,EAAK1L,QAAQ8M,WACzF,OAAKgF,GAAkBE,UAQnBS,EAAUhF,MAAMiF,SAAWD,EAAUhF,MAAMkF,QACvCxT,EAAEsT,EAAUhF,MAAMjB,eAAegG,GAAGnI,IACpCqB,EAAKkH,iBAAiBzT,EAAEsT,EAAUhF,MAAMjB,iBAExCd,EAAKmH,iBAAiBxI,IAAmBsH,KAAK,SAAUtK,EAAOvB,GAC3D,GAAI5D,GAAQwJ,EAAKgB,cAAcvN,EAAE2G,GAASE,KAAK,KAC/C0F,GAAKoH,UAAU5Q,KAEnBwJ,EAAKqH,4BAEFN,EAAUhF,MAAMuF,SACvBtH,EAAKuH,gBAAgBvH,EAAKuC,OACnB9O,EAAEsT,EAAUhF,MAAMjB,eAAegG,GAAGpI,IAC3CsB,EAAKxJ,MAAMwJ,EAAKgB,cAAcvN,EAAEsT,EAAUhF,MAAMjB,eAAexG,KAAK,QAEpE0F,EAAKmC,gBACLnC,EAAKqH,4BAETrH,EAAK2E,QAAQzG,IAlBb,IAPQzK,EAAEsT,EAAUhF,MAAMjB,eAAegG,GAAG,QAAUrT,EAAEsT,EAAUhF,MAAMjB,eAAerI,SAAS,oBACxFhF,EAAEsT,EAAUhF,MAAMjB,eAAepG,SAAS,oBAE1CsF,EAAKqB,OAAO5N,EAAEsT,EAAUhF,MAAMjB,eAAexG,KAAK,MAEtD,IAsBRyJ,mBAAoB,WAChB,GAAI/D,GAAOxH,IACPwH,GAAKoB,aACLpB,EAAKoB,WAAWuC,UAChB3D,EAAKoB,WAAa,OAG1B8F,iBAAkB,SAAUM,GACxB,GAAIxH,GAAOxH,KAAM5E,EAAOoM,EAAKgB,cAAcwG,EAAYlN,KAAK,KACxDkN,GAAY/O,SAAS,oBACrBuH,EAAKmC,aAAa/J,KAAKxE,GAEvBoM,EAAKoH,UAAUxT,IAGvB2T,gBAAiB,SAAUE,EAAYxQ,GACnC,GAA2JyQ,GAAvJ1H,EAAOxH,KAAMR,EAAWf,GAAa+I,EAAKgB,cAAchB,EAAKoB,WAAW5K,QAAQkL,QAAQpH,KAAK,MAAOqN,EAAS3H,EAAKgB,cAAcyG,EAAWnN,KAAK,KAChJ0F,GAAKoB,WAAWS,aAAe7B,EAAKiC,OACpCjK,EAAWgI,EAAKoB,WAAWS,YAAc7B,EAAKgB,cAAchB,EAAKoB,WAAWS,YAAYvH,KAAK,MAAQ,GAAI9C,QAAMwI,EAAKiC,SAEpHjC,EAAKoB,WAAWS,YAAc5K,EAAY+I,EAAK0C,YAAY1C,EAAKkB,MAAMuB,aAAaxL,GAAY0H,IAAqBqB,EAAKoB,WAAW5K,QAAQkL,QAEhJ1B,EAAKmC,gBACLuF,EAAiB1Q,EAAoBgB,EAAU2P,GAC/C7P,EAAekI,EAAKmC,aAAcuF,EAAgB1P,EAAUgI,EAAK1L,QAAQsB,cACzEoK,EAAKuF,iCAET4B,iBAAkB,SAAUS,GACxB,GAAI5H,GAAOxH,IACX,OAAOwH,GAAKgE,OAAO1J,KAAKsN,IAE5BP,yBAA0B,WACtB,GAAIrH,GAAOxH,IACXwH,GAAKoB,WAAW5K,QAAQyP,KAAK,SAAUtK,EAAOkM,GAC1C,GAAIjU,GAAOoM,EAAKgB,cAAcvN,EAAEoU,EAAK9G,YAChCf,GAAK1L,QAAQsB,aAAahC,IAC3BoM,EAAKmC,aAAa/J,KAAKxE,MAInCwT,UAAW,SAAUxT,GAAV,GACHoM,GAAOxH,KACPsP,EAAmB9H,EAAKmC,aAAauD,IAAIqC,QAAQlP,SAASjF,EAC1DkU,QACA9H,EAAKmC,aAAa6F,OAAOF,EAAkB,IAGnDG,YAAa,SAAUrU,GACnB,GAAIoM,GAAOxH,KAAM0P,EAAkBlI,EAAKgB,cAAchB,EAAKmH,iBAAiBzI,GAAe,UAAUpE,KAAK,MAAO6N,EAAiBnI,EAAKgB,cAAchB,EAAKmH,iBAAiBzI,GAAe,SAASpE,KAAK,KACxM,QAAQ1G,IAASuU,IAAmBvU,IAASsU,GAEjDtH,MAAO,SAAUtI,GAAV,GAC2Q9B,GAAOwC,EAASoP,EAAQjR,EAyC1RkR,EAzCRrI,EAAOxH,KAAMlE,EAAU0L,EAAK1L,QAASgU,EAAMhQ,EAAEiQ,QAASlU,EAAO2L,EAAKkB,MAAOvF,EAAQqE,EAAKoC,OAAQvO,EAAMmM,EAAK1L,QAAQT,IAAKC,EAAMkM,EAAK1L,QAAQR,IAAKgR,EAAe,GAAIxO,MAAM0J,EAAKgC,WAAWwG,EAAQ5Q,EAAMyE,QAAQmM,MAAMxI,EAAKG,SAAUsI,EAAazI,EAAK1L,QAAQsB,YAyGhQ,OAxGI0C,GAAEuO,SAAW7G,EAAKgE,OAAO,KACzBhE,EAAKsC,SAAU,GAEfgG,GAAO9L,EAAKkM,QAAUF,GAASF,GAAO9L,EAAKuB,MAAQyK,GACnDhS,EAAQ,EACRwC,GAAU,GACHsP,GAAO9L,EAAKuB,OAASyK,GAASF,GAAO9L,EAAKkM,OAASF,GAC1DhS,KACAwC,GAAU,GACHsP,GAAO9L,EAAKmM,IACnBnS,EAAkB,IAAVmF,QACR3C,GAAU,GACHsP,GAAO9L,EAAKoM,MACnBpS,EAAkB,IAAVmF,EAAc,EAAI,EAC1B3C,GAAU,GACHsP,GAAO9L,EAAKqM,UACnBrS,EAAQ,EACRwC,GAAU,GACHsP,GAAO9L,EAAKsM,MAAQR,GAAO9L,EAAKuM,MACvCX,EAASE,GAAO9L,EAAKsM,KAAO,QAAU,OACtC3R,EAAO9C,EAAK+T,GAAQtD,GACpBA,EAAe,GAAIxO,IAAKa,EAAKjD,cAAeiD,EAAK1B,WAAY0B,EAAKzB,UAAWoP,EAAakE,WAAYlE,EAAamE,aAAcnE,EAAaoE,aAAcpE,EAAaqE,mBACzKrE,EAAa/N,YAAYI,EAAKjD,eAC9B8E,GAAU,GAEVV,EAAE0O,SAAW1O,EAAE2O,QACXqB,GAAO9L,EAAKkM,QAAUF,GAASF,GAAO9L,EAAKuB,MAAQyK,GACnDxI,EAAKwE,mBACLxL,GAAU,GACHsP,GAAO9L,EAAKuB,OAASyK,GAASF,GAAO9L,EAAKkM,OAASF,GAC1DxI,EAAKsE,iBACLtL,GAAU,GACHsP,GAAO9L,EAAKmM,IACnB3I,EAAKyE,aACLzL,GAAU,GACHsP,GAAO9L,EAAKoM,MACnB5I,EAAKqB,OAAO5N,EAAEuM,EAAKuC,MAAM,GAAGxB,aAC5B/H,GAAU,GACFsP,GAAO9L,EAAK4M,OAASd,GAAO9L,EAAKqM,WAAa7I,EAAKyB,yBAC3DzB,EAAKqJ,yBAAyB/Q,GAC1B+P,EAAcrI,EAAKgB,cAAcvN,EAAEuM,EAAKuC,MAAM,IAAIjI,KAAK,MAC3D0F,EAAKkC,OAAO5D,GAAS+J,IAElB/P,EAAEgP,UACL9Q,IAAU9C,GAAa0U,KAClBA,GACD/T,EAAKwC,QAAQiO,EAActO,GAE1BX,EAAUiP,EAAcjR,EAAKC,KAC9BgR,EAAevO,EAAcuO,EAAcxQ,EAAQT,IAAKS,EAAQR,MAEhE2U,EAAW3D,KACXA,EAAe9E,EAAKsJ,iBAAiBxE,EAActO,IAEvD3C,EAAM2B,EAAW3B,EAAIK,cAAeL,EAAI4B,WAAY5B,EAAI6B,WACpDsK,EAAKyB,uBACLzB,EAAKuJ,wBAAwBjR,EAAGwM,GAEhC9E,EAAKsF,OAAOR,KAIhBwD,GAAO9L,EAAK4M,OAASd,GAAO9L,EAAKqM,UAChB,SAAbxU,EAAK8M,MAAmBnB,EAAKyB,wBAC7BzB,EAAKxJ,MAAMwJ,EAAKgB,cAAcvN,EAAEuM,EAAKuC,MAAMjI,KAAK,QAChD0F,EAAKoB,WAAWS,YAAcpO,EAAEuM,EAAKuC,MAAM,IAC3CvC,EAAK2E,QAAQzG,KAEb8B,EAAKqB,OAAO5N,EAAEuM,EAAKuC,MAAM,GAAGxB,aAEhC/H,GAAU,GACHsP,GAAO9L,EAAKgN,QACnBxQ,GAAU,EACVgH,EAAKsE,kBACEgE,GAAO9L,EAAKiN,WACnBzQ,GAAU,EACVgH,EAAKwE,qBAELhO,GAAS4R,KACJA,GACD/T,EAAKwC,QAAQiO,EAActO,GAE/B3C,EAAM2B,EAAW3B,EAAIK,cAAeL,EAAI4B,WAAY5B,EAAI6B,WACnDG,EAAUiP,EAAcjR,EAAKC,KAC9BgR,EAAevO,EAAcuO,EAAcxQ,EAAQT,IAAKS,EAAQR,MAEhE2U,EAAW3D,KACXA,EAAe9E,EAAKsJ,iBAAiBxE,EAActO,IAEnDwJ,EAAKyB,uBACAzB,EAAKiI,YAAYnD,IAGlB9E,EAAKgC,SAAW8C,EAChB9E,EAAKkC,OAAO5D,GAASwG,IAHrB9E,EAAK0D,SAASoB,GAMlB9E,EAAKsF,OAAOR,KAIpB9L,GACAV,EAAEW,iBAEC+G,EAAKgC,UAEhBuH,wBAAyB,SAAUxH,EAAO+C,GACtC,GAAiB9M,GAAU0P,EAAvB1H,EAAOxH,IACX,OAAKwH,GAAKiI,YAAYnD,IAWtB9E,EAAKoB,WAAW9M,QAAQqR,OAAS3F,EAAKG,QAAQ7F,KAAK,SAAS1F,OAAS,IAAMkQ,GAAgB9E,EAAKgC,SAAW,uBAAyBrD,GAAoB,uBAAyBA,GACjLqB,EAAKkC,OAAO5D,GAASwG,GACrB9E,EAAKgC,SAAW8C,EAChB9E,EAAKuH,gBAAgBvH,EAAK0C,YAAY1C,EAAKkB,MAAMuB,aAAaqC,GAAenG,IAAoBmG,GACjG9E,EAAK2E,QAAQzG,IACb8B,EAAKoB,WAAW9M,QAAQqR,OAAS,uBAAyBhH,GAL1DqB,IAVIA,EAAKmC,gBACLnK,EAAWgI,EAAKoB,WAAWS,YAAc7B,EAAKgB,cAAchB,EAAKoB,WAAWS,YAAYvH,KAAK,MAAQwK,EACrG4C,EAAiB1Q,EAAoBgB,EAAU,GAAIR,QAAMsN,KACzDhN,EAAekI,EAAKmC,aAAcuF,EAAgB1P,EAAUgI,EAAK1L,QAAQsB,cACzEoK,EAAK0D,SAASoB,GACd9E,EAAKgC,SAAW8C,EAChB9E,EAAKoB,WAAWS,YAAc7B,EAAKoB,WAAWS,aAAe7B,EAAK0C,YAAY1C,EAAKkB,MAAMuB,aAAaqC,GAAenG,IACrHqB,EAAK2E,QAAQzG,IACb,IASRmL,yBAA0B,SAAUtH,GAChC,GAAI/B,GAAOxH,IACXuJ,GAAMjB,cAAgBd,EAAKuC,MAAM,GACjCvC,EAAKoB,WAAWS,YAAcpO,EAAEuM,EAAKuC,MAAM,IACvC9O,EAAEuM,EAAKuC,MAAM,IAAI9J,SAASoG,KAC1BmB,EAAKoB,WAAWsI,UAAUjW,EAAEuM,EAAKuC,MAAM,KACvCvC,EAAKoB,WAAWuD,QAAQzG,IAAU6D,MAAOA,KAEzC/B,EAAKoB,WAAW5K,MAAM/C,EAAEuM,EAAKuC,MAAM,KAAOR,MAAOA,KAGzDuH,iBAAkB,SAAUxE,EAActO,GACtC,GAAIwJ,GAAOxH,KAAMD,GAAW,EAAMlE,EAAO2L,EAAKkB,MAAOrN,EAAMmM,EAAK1L,QAAQT,IAAKC,EAAMkM,EAAK1L,QAAQR,IAAK2U,EAAazI,EAAK1L,QAAQsB,aAAc+T,EAAkB,GAAInS,MAAKsN,EAAa3M,UAErL,KADA9D,EAAKwC,QAAQ8S,GAAkBnT,GACxB+B,GAAU,CAEb,GADAlE,EAAKwC,QAAQiO,EAActO,IACtBX,EAAUiP,EAAcjR,EAAKC,GAAM,CACpCgR,EAAe6E,CACf,OAEJpR,EAAWkQ,EAAW3D,GAE1B,MAAOA,IAEXO,SAAU,SAAU/Q,GAChB,GAAI0L,GAAOxH,KAAMoM,EAAOtQ,EAAQsQ,KAAMI,EAAK1Q,EAAQ0Q,GAAI4E,EAAS5J,EAAKsC,OAChEsC,GAGMA,EAAKiF,SAAStV,KAAK,cAC1BqQ,EAAKf,IAAInG,GACTkH,EAAKiF,SAAS1E,WAAU,GAAM,GAAM2E,SACpClF,EAAKkF,SACL9E,EAAG+E,YAAY/J,EAAK5F,QAAQ,GAAG2G,YAC/Bf,EAAKsB,WAAWsI,KACRhF,EAAKkC,GAAG,aAAe9G,EAAK1L,QAAQyO,aAAc,GAASzO,EAAQ2Q,SAC3ED,EAAG+E,YAAYnF,GACfA,EAAKf,IAAInG,GAAIoM,SACb9J,EAAKsB,WAAWsI,IAEhB5J,EAAK1L,EAAQ+O,SAAW,YAAc,eAAeuB,EAAMI,EAAI1Q,EAAQyQ,SAbvEC,EAAG+E,YAAY/J,EAAK5F,QAAQ,GAAG2G,YAC/Bf,EAAKoE,WAAWY,KAexBgF,YAAa,SAAUpF,EAAMI,EAAID,GAC7B,GAAI/E,GAAOxH,KAAMoR,EAAS5J,EAAKsC,QAASU,EAAahD,EAAK1L,QAAQyO,UAAUC,WAAYC,EAAUD,EAAWC,QAASgH,EAAYzM,EAAWoH,EACzI3B,IAAWA,EAAQpK,QAAQmF,UAC3B4G,EAAKsF,IAAIlF,GAAI/H,KAAMkN,MAAOF,IAC1BrF,EAAKwF,KAAK,UACVpK,EAAKsB,WAAWsI,EAAQhF,GACxBA,EAAKiF,SAAS5M,KACV2I,SAAU,WACVuE,MAAmB,EAAZF,EACPI,QAAStM,EACTuM,cAAevF,EAAS,GAAKkF,IAEjCjF,EAAGD,EAAS,cAAgB,gBAAgBH,GAC5ClF,GAAOsD,GACHC,QAASjF,GAAQ,KAAO+G,EAAS,QAAUhH,GAC3CwM,SAAU,WACN3F,EAAKf,IAAInG,GAAIoM,SACb9J,EAAKkF,UAAY,KACjBF,EAAGwF,SACHxK,EAAKsB,WAAWsI,MAGxBhF,EAAKiF,SAAS1E,WAAU,GAAM,GAAMsF,aAAazH,KAGzD0H,UAAW,SAAU9F,EAAMI,GACvB,GAAgH2F,GAAM/E,EAAlH5F,EAAOxH,KAAM6K,EAAWrD,EAAK1L,QAAQyO,UAAUM,SAAUJ,EAAUI,EAASJ,QAAS2G,EAAS5J,EAAKsC,OACnGW,IAAWA,EAAQpK,QAAQ,cAC3BmM,EAAG/H,KACC2I,SAAU,WACVgF,IAAKtN,EAAYsH,EAAKiG,QACtBC,KAAM,IACPC,aAAanG,GACZ5H,IACA2N,EAAO3K,EAAK0C,YAAY1C,EAAKkB,MAAMuB,aAAazC,EAAKgC,WACrD4D,EAAW+E,EAAK/E,WAChBA,EAAWA,EAASkF,KAAOE,SAASL,EAAKR,QAAU,EAAG,IAAM,OAAcvE,EAASgF,IAAMI,SAASL,EAAKM,SAAW,EAAG,IAAM,MAC3HjG,EAAG/H,IAAID,EAAkB4I,IAE7BhB,EAAKO,WAAU,GAAM,GAAMsF,cACvBxH,QAAS,UACTE,SAAU,IACVoH,SAAU,WACN3F,EAAKf,IAAInG,GAAIoM,SACb9J,EAAKkF,UAAY,KACjBF,EAAG/H,KACC2I,SAAU,SACVgF,IAAK,EACLE,KAAM,IAEV9K,EAAKsB,WAAWsI,MAGxB5E,EAAGG,WAAU,GAAM,GAAMsF,aAAapH,KAG9CX,YAAa,SAAUlM,EAAOoR,GAC1B,MAAOpP,MAAKwL,OAAO1J,KAAKsN,EAAWA,EAAW,WAAarJ,GAAa,KAAKoH,OAAO,WAChF,MAAOlS,GAAE+E,KAAKuI,YAAYxG,KAAK3C,EAAM2C,KAAK6D,OAAY5H,KAG9D0L,OAAQ,SAAUgJ,EAAWtX,GACzB,GAA8FuX,GAA1FnL,EAAOxH,KAAMuH,EAAKC,EAAKwB,QAASmJ,EAAO3K,EAAKuC,MAAO/L,EAAQwJ,EAAKkB,MAAMuB,aAAa7O,EACnF+W,IACAA,EAAKS,WAAW7L,IAAe6L,WAAW5L,IAAY4L,WAAWvN,GAEjEjK,GAA2B,SAAnBoM,EAAKkB,MAAMC,OACnBgK,EAAenL,EAAK1L,QAAQsB,aAAahC,IAE7CoM,EAAKmH,iBAAiBnH,EAAKyB,uBAAyB/C,GAAe,WAAaH,GAAa,KAAKqE,YAAYsI,GAC9GP,EAAO3K,EAAK0C,YAAYlM,EAAkC,YAA3BwJ,EAAK1L,QAAQ8M,WAA2B1C,GAAe,WAAaH,GAAa,KAAKhE,KAAKgF,IAAe,IACrI2L,IAAc5M,KAAY0B,EAAKsC,SAAWtC,EAAK1L,QAAQiN,cAAe,GAAS4J,KAC/ED,EAAY,IAEhBP,EAAKjQ,SAASwQ,GACVP,EAAK,KACL3K,EAAKuC,MAAQoI,GAEb5K,IACA4K,EAAKpQ,KAAKsD,EAAIkC,GACdC,EAAKgE,OAAOoH,WAAW,yBAAyB7Q,KAAK,wBAAyBwF,KAGtFqE,WAAY,SAAUD,GAClBA,EAAMxD,GAAG5B,GAAevG,KAAK6J,gBAAgB1B,GAAG7B,GAAMtG,KAAKmK,oBAE/DtB,OAAQ,SAAUR,GACd,GAAIb,GAAOxH,KAAMlE,EAAU0L,EAAK1L,QAASwQ,EAAe,GAAItN,QAAMwI,EAAKgC,WAAWxL,EAAQwJ,EAAKgB,cAAcH,EAC7GlL,GAAUa,EAAO,GACM,SAAnBwJ,EAAKkB,MAAMC,MAAmBnB,EAAK1L,QAAQsB,aAAaY,KACxDA,EAAQwJ,EAAKiC,QAEjBjC,EAAKkB,MAAMrK,QAAQiO,EAActO,GACjCwJ,EAAK0E,aAAanO,EAAcuO,EAAcxQ,EAAQT,IAAKS,EAAQR,OAEvEwR,OAAQ,SAAU9O,GACd,GAAIwJ,GAAOxH,KAAMnE,EAAO2L,EAAKkB,KACc,KAAvC7M,EAAKyB,QAAQU,EAAOwJ,EAAKgC,UACzBhC,EAAK0D,SAASlN,IAEdwJ,EAAKgC,SAAWxL,EAChBwJ,EAAKkC,OAAO5D,GAAS9H,KAG7B8K,WAAY,SAAUsI,EAAQzF,GACtByF,GACApR,KAAK0L,MAAMC,IAGnB1D,QAAS,SAAU3D,GACf,GAAIkD,GAAOxH,KAAMnC,EAAQD,IAAYgE,EAAU4F,EAAK5F,QAASsG,EAAStG,EAAQE,KAAK,YACnF,OAAKwC,IAKA4D,EAAO,KACRA,EAASjN,EAAE,2EAA2E4X,SAASjR,IAEnG4F,EAAK4D,OAASlD,EAAO4K,OAAOhR,KAAK,WAAW/E,KAAKuH,EAASzG,IAAQkE,KAAK,QAAS3C,EAAM2T,SAASlV,EAAO,IAAK2J,EAAK1L,QAAQgF,UACxH0G,EAAKwL,UAJL,IAJIxL,EAAKwL,SAAQ,GACb9K,EAAO+K,OACP,IAQRjL,QAAS,WACL,GAAyCkL,GAArC1L,EAAOxH,KAAM4B,EAAU4F,EAAK5F,OAC3BA,GAAQE,KAAK,aAAa,IAC3BF,EAAQ7E,KAAK,6EAAoFiK,GAAa,sNAAkOA,GAAa,qEAEjWkM,EAAQtR,EAAQE,KAAK,WAAWqG,GAAG1B,GAAqB,IAAMC,GAAa,IAAMH,GAAgB,IAAMD,GAAMzG,GAAasT,OAAM,GAChI3L,EAAK8D,OAAS4H,EAAME,GAAG,GAAGjL,GAAGhD,EAAO,WAChCqC,EAAKsC,QAAUtC,EAAK1L,QAAQiN,cAAe,EAC3CvB,EAAKyE,eAETzE,EAAKZ,IAAasM,EAAME,GAAG,GAAGjL,GAAGhD,EAAO,WACpCqC,EAAKsC,QAAUtC,EAAK1L,QAAQiN,cAAe,EAC3CvB,EAAKsE,mBAETtE,EAAKX,IAAaqM,EAAME,GAAG,GAAGjL,GAAGhD,EAAO,WACpCqC,EAAKsC,QAAUtC,EAAK1L,QAAQiN,cAAe,EAC3CvB,EAAKwE,sBAGbD,UAAW,SAAUsH,EAAO5V,GAAjB,GAGC6V,GAFJ9L,EAAOxH,KAAMmD,EAAQqE,EAAKoC,OAAS,EAAG0C,EAAe,GAAIxO,MAAM0J,EAAKgC,UACpEhC,GAAKyB,yBACDqK,EAAuB9L,EAAKgE,OAAO1J,KAAK,0BAA0ByR,IAAI,WAAWrK,QACrFoD,EAAe9E,EAAKgB,cAAc8K,EAAqBxR,KAAK,MAC5D0F,EAAKgC,SAAW,GAAIxK,QAAMsN,KAE9B+G,EAAQ7L,EAAK6L,GACRA,EAAMpT,SAAS4F,MACZ1C,EAAQ,EACRmJ,EAAa/N,YAAY+N,EAAa5Q,cAAgB,IAAM+B,GAE5DqB,EAASC,MAAMoE,GAAO9E,QAAQiO,EAAc7O,GAEhD+J,EAAK0D,SAASoB,KAGtBT,QAAS,SAAUpJ,EAAQzE,GACvB,GAAsFwV,GAAlFhM,EAAOxH,KAAMlE,EAAU0L,EAAK1L,QAASwQ,EAAe9E,EAAKiC,QAAUjC,EAAKgC,QAC5E,OAAIxL,KAAU9C,EACHY,EAAQ2G,IAEnBzE,EAAQiG,EAAMjG,EAAOlC,EAAQsF,OAAQtF,EAAQgF,SACxC9C,IAGLlC,EAAQ2G,GAAU,GAAI3E,MAAME,IAExBwV,EADA/Q,IAAW6C,EACAtH,EAAQsO,EAERA,EAAetO,GAE1BwV,GAAYjR,EAAa+J,EAActO,MACnCwV,IACAhM,EAAKiC,OAAS,MAElBjC,EAAKoF,aAAc,GAElBpF,EAAKoF,cACNpF,EAAKoF,eAAiB9Q,EAAQ6E,MAAMhE,UAAWb,EAAQ6E,MAAM9D,QAEjE2K,EAAK0D,SAAS1D,EAAKiC,QACnBjC,EAAKwL,WApBLhV,IAsBJgV,QAAS,SAAUS,GACf,GAAIjM,GAAOxH,KAAMlE,EAAU0L,EAAK1L,QAAS4X,EAAkBlM,EAAK1L,QAAQsB,aAAaQ,KAAayK,EAAOb,EAAK4D,MAC1GqI,KAAWvY,IACXuY,EAASpW,EAAUO,IAAY9B,EAAQT,IAAKS,EAAQR,MAEpD+M,IACAA,EAAKgD,IAAIlG,GACLsO,IAAWC,EACXrL,EAAKnG,SAAS+D,IAAOmE,YAAYvE,IAAUsC,GAAGhD,EAAO8B,GAAMO,EAAKmM,YAAanM,IAE7Ea,EAAK+B,YAAYnE,IAAO/D,SAAS2D,IAAUsC,GAAGhD,EAAO3E,KAIjEmT,YAAa,SAAU7T,GACnB,GAAI0H,GAAOxH,KAAMmB,EAAQpC,GAAMyI,EAAK1L,QAAQqF,OAAQpB,EAAWyH,EAAK1L,QAAQsB,aAAcS,EAAQD,GAClGkC,GAAEW,iBACEV,EAASlC,KAGoC,IAA7C2J,EAAKkB,MAAMpL,QAAQkK,EAAKgC,SAAU3L,IAAgB2J,EAAKoC,QAAUzI,IACjEqG,EAAKoF,aAAc,GAEnBpF,EAAKyB,yBACLzB,EAAKmC,cAAgB9L,GACrB2J,EAAKoB,WAAWS,YAAc,MAElC7B,EAAKiC,OAAS5L,EACd2J,EAAK0D,SAASrN,EAAOsD,GACrBqG,EAAK2E,QAAQzG,MAEjB8C,cAAe,SAAUH,GACrB,GAAIrK,GAAQ/C,EAAEoN,GAAMtG,KAAK3C,EAAM2C,KAAK6D,KAAQgO,MAAM,IAElD,OADA5V,GAAQhB,EAAWgB,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAGjD8J,WAAY,WACR,GAAIN,GAAOxH,KAAMlE,EAAU0L,EAAK1L,QAASoM,EAASpM,EAAQoM,OAAQvH,EAAQ7E,EAAQ6E,MAAOhE,EAAUgE,EAAMhE,QAASF,EAAakE,EAAMlE,WAAYI,EAAQ8D,EAAM9D,MAAOgX,EAAiB,+BAAiC/X,EAAQgF,QAAU,MAC1O0G,GAAK7G,OACDhE,QAAS2H,EAAS,2GAA6GlF,EAAM2C,KAAK6D,IAAS,gDAAkDjJ,GAAW,iBAAmB,aAAe+H,eAAgB/H,IAClQE,MAAOyH,EAAS,wBAA0BzH,GAAS,UAAY,SAAW6H,eAAgB7H,IAC1FJ,WAAY6H,EAAS,sBAAwB7H,GAAc,wBAA0B,SAAWiI,eAAgBjI,KAEhHyL,GAAUA,KAAW,IACrB2L,EAAiB3L,GAErBV,EAAKU,OAASA,KAAW,EAAQ5D,EAASuP,GAAkBnP,cAAc,IAAW,OAG7FZ,GAAGgQ,OAAOzM,IACNvI,GACAiV,gBAAiB,SAAU3Y,GACvB,MAAO4B,GAAW5B,EAAKM,cAAeN,EAAK6B,WAAY,IAE3D+W,gBAAiB,SAAU5Y,EAAM6Y,GAC7BA,EAAeA,GAAgB7U,EAAM0B,UAAUhC,QAC/C,IAAIoV,GAAWD,EAAaC,SAAUF,EAAkB,GAAIlW,IAAK1C,EAAKM,cAAeN,EAAK6B,WAAY,EAAG7B,EAAKoV,WAAYpV,EAAKqV,aAAcrV,EAAKsV,aAActV,EAAKuV,kBAErK,KADAqD,EAAgBzV,YAAYnD,EAAKM,eAC1BsY,EAAgBG,UAAYD,GAC/BpV,EAASsV,QAAQJ,KAAsB3U,GAE3C,OAAO2U,IAEXI,QAAS,SAAUhZ,EAAMiS,GACrB,GAAIgH,GAAiBjZ,EAAKkZ,oBAAqBC,EAAa,GAAIzW,IAAK1C,EAAKuE,UAAY0N,GAAOmH,EAAeD,EAAWD,oBAAsBD,CAC7IjZ,GAAKgZ,QAAQG,EAAW5U,UAAY6U,EAAe7N,KAEvD5H,QAEQ4J,KAAMlH,GACNtG,MAAO,SAAUC,EAAMC,EAAKC,EAAKwF,GAC7B,MAAOD,GAAgBC,GAAS2T,OAAOC,MAAMtZ,EAAK6B,YAAc,IAAM7B,EAAKM,eAE/EiB,QAAS,SAAUb,GACf,GAAI0L,GAAOxH,KAAMhE,EAAM,EAAGX,EAAMS,EAAQT,IAAKC,EAAMQ,EAAQR,IAAKF,EAAOU,EAAQV,KAAMsG,EAAQ5F,EAAQ4F,MAAON,EAAStF,EAAQsF,OAAQN,EAAUhF,EAAQgF,QAAS6T,EAAc7Y,EAAQ8L,IAAKtL,EAAsBR,EAAQQ,oBAAqBsY,EAASD,GAAejT,EAAM,GAAImT,EAAkBhU,EAAgBC,GAAUgU,EAAcD,EAAgBX,SAAU7Q,EAAOwR,EAAgBxR,KAAMqR,EAAQzW,EAAWoF,EAAKqR,MAAOI,GAAcC,EAAa9W,EAAWoF,EAAK2R,WAAYF,GAAcrZ,EAAQqD,EAASkV,gBAAgB5Y,EAAMyZ,GAAkBd,EAAkBvM,EAAK0B,MAAM9N,GAAO6Z,EAAiBzN,EAAK4B,KAAKhO,GAAO6O,EAAezC,EAAKyC,aAAcpM,EAAQD,IAAYb,EAAO,iFAAmFkN,EAAaxO,GAAS,0BAI1wB,KAHIa,IACAS,GAAQ,iCAAmCjB,EAAQgP,SAASC,iBAAmB,SAE5E/O,EAAM,EAAGA,IACZe,GAAQ,0BAA4B2X,EAAM1Y,GAAO,KAAO+Y,EAAW/Y,GAAO,OAI9E,OAFAmB,GAAUU,EAAO,GACjBA,GAASA,EACFhC,GACHQ,MAAO,GACPG,OAAQ,EACRO,KAAMA,GAAQ,sCACdtB,MAAOA,EACPa,oBAAqBA,EACrBG,WAAYX,EAAQW,WACpBpB,IAAK2B,EAAW3B,EAAIK,cAAeL,EAAI4B,WAAY5B,EAAI6B,WACvD5B,IAAK0B,EAAW1B,EAAII,cAAeJ,EAAI2B,WAAY3B,EAAI4B,WACvDP,QAASb,EAAQa,QACjBE,MAAOf,EAAQe,MACfZ,OAAQuL,EAAKnJ,QACbjB,aAActB,EAAQsB,aACtBlB,MAAO,SAAUd,EAAMY,EAAKoB,GACxB,GAAI8X,MAAehS,EAAM9H,EAAK+Y,SAAUgB,EAAY,GAAIvN,EAAM,GAiB9D,QAhBIxM,EAAO2Y,GAAmB3Y,EAAO6Z,IACjCC,EAAStV,KAAKmG,IAEd3I,EAAahC,IACb8Z,EAAStV,KAAKiG,KAEbzK,IAASyC,GACVqX,EAAStV,KAAK,WAEN,IAARsD,GAAqB,IAARA,GACbgS,EAAStV,KAAK,aAEdgV,GAAUzS,GAAS/G,EAAMsG,KACzBkG,EAAM+M,EAAYlI,QAAQ,MAAOrN,EAAM2T,SAAS3X,EAAMgG,EAAQN,IAC9DqU,EAAY,mBAGZ/Z,KAAMA,EACNsG,MAAOA,EACPwD,GAAI9F,EAAM8F,GACV/J,MAAOiE,EAAM2T,SAAS3X,EAAM,IAAK0F,GACjC9C,MAAO5C,EAAK8B,UACZkY,WAAYnL,EAAa7O,GACzB8Z,SAAUA,EAAS,GAAK,WAAaA,EAASG,KAAK,KAAO,IAAM,GAChEF,UAAWA,EACXvN,IAAKA,IAGbzL,gBAAiB,SAAUf,GACvB,OACIqB,WAAY0H,EAAW/I,EAAMgE,EAAM0B,UAAUhC,SAASoV,UACtDoB,YAAala,OAK7B8N,MAAO,SAAU9N,GACb,MAAO0D,GAASiV,gBAAgB3Y,IAEpCgO,KAAM,SAAUhO,GACZ,GAAIgO,GAAOpM,EAAW5B,EAAKM,cAAeN,EAAK6B,WAAa,EAAG,GAAIiM,EAAQpK,EAASiV,gBAAgB3Y,GAAOma,EAAarW,KAAKsW,IAAIpM,EAAKkL,oBAAsBpL,EAAMoL,oBAIlK,OAHIiB,IACAnM,EAAKrG,SAASmG,EAAMsH,WAAa+E,EAAa,IAE3CnM,GAEX9L,QAAS,SAAUC,EAAOC,GACtB,GAAIG,GAAQ8X,EAASlY,EAAMN,WAAYS,EAAQH,EAAM7B,cAAega,EAASlY,EAAMP,WAAY0Y,EAAQnY,EAAM9B,aAQ7G,OANIiC,GADAD,EAAQiY,EACC,EACFjY,EAAQiY,KAGNF,GAAUC,EAAS,EAAID,EAASC,EAAS,MAI1DrX,QAAS,SAAUjD,EAAM4C,GACrB,GAAI4X,GAAQxa,EAAKoV,UACbxS,aAAiBF,IACjB1C,EAAKmD,YAAYP,EAAMtC,cAAesC,EAAMf,WAAYe,EAAMd,WAE9D4B,EAASsV,QAAQhZ,EAAM4C,EAAQqB,IAEnClC,EAAU/B,EAAMwa,IAEpB3L,aAAc,SAAU7O,GACpB,MAAOA,GAAKM,cAAgB,IAAMN,EAAK6B,WAAa,IAAM7B,EAAK8B,aAInEyL,KAAM,OACNxN,MAAO,SAAUC,GACb,MAAOA,GAAKM,eAEhBiB,QAAS,SAAUb,GACf,GAAI+Z,GAAYhV,EAAgB/E,EAAQgF,SAAS2T,OAAOoB,UAAW5L,EAAejK,KAAKiK,aAAc5O,EAAMS,EAAQT,IAAKC,EAAMQ,EAAQR,GACtI,OAAOO,IACHR,IAAK2B,EAAW3B,EAAIK,cAAeL,EAAI4B,WAAY,GACnD3B,IAAK0B,EAAW1B,EAAII,cAAeJ,EAAI2B,WAAY,GACnDxB,MAAOuB,EAAWlB,EAAQV,KAAKM,cAAe,EAAG,GACjDO,OAAQ+D,KAAK3B,QACbnC,MAAO,SAAUd,GACb,OACI4C,MAAO6X,EAAUza,EAAK6B,YACtBiI,GAAI9F,EAAM8F,GACVkQ,WAAYnL,EAAa7O,GACzB8Z,SAAU,QAK1BhM,MAAO,SAAU9N,GACb,MAAO4B,GAAW5B,EAAKM,cAAe,EAAGN,EAAK8B,YAElDkM,KAAM,SAAUhO,GACZ,MAAO4B,GAAW5B,EAAKM,cAAe,GAAIN,EAAK8B,YAEnDI,QAAS,SAAUC,EAAOC,GACtB,MAAOF,GAAQC,EAAOC,IAE1Ba,QAAS,SAAUjD,EAAM4C,GACrB,GAAI2C,GAAOiV,EAAQxa,EAAKoV,UACpBxS,aAAiBF,KACjB6C,EAAQ3C,EAAMf,WACd7B,EAAKmD,YAAYP,EAAMtC,cAAeiF,EAAOvF,EAAK8B,WAC9CyD,IAAUvF,EAAK6B,YACf7B,EAAKiD,QAAQ,KAGjBsC,EAAQvF,EAAK6B,WAAae,EAC1B5C,EAAK0a,SAASnV,GACVA,EAAQ,KACRA,GAAS,IAETA,EAAQ,GAAKvF,EAAK6B,YAAc0D,GAChCvF,EAAKiD,QAAQ,IAGrBlB,EAAU/B,EAAMwa,IAEpB3L,aAAc,SAAU7O,GACpB,MAAOA,GAAKM,cAAgB,IAAMN,EAAK6B,WAAa,QAIxD0L,KAAM,SACNxN,MAAO,SAAUC,EAAMC,EAAKC,GACxB,MAAOH,GAAMC,EAAMC,EAAKC,EAAK,KAEjCqB,QAAS,SAAUb,GACf,GAAI4E,GAAO5E,EAAQV,KAAKM,cAAeuO,EAAejK,KAAKiK,YAC3D,OAAOpO,IACHJ,MAAOuB,EAAW0D,EAAOA,EAAO,GAAK,EAAG,EAAG,GAC3CrF,IAAK2B,EAAWlB,EAAQT,IAAIK,cAAe,EAAG,GAC9CJ,IAAK0B,EAAWlB,EAAQR,IAAII,cAAe,EAAG,GAC9CO,OAAQ+D,KAAK3B,QACbnC,MAAO,SAAUd,EAAMY,GACnB,OACIgC,MAAO5C,EAAKM,cACZwJ,GAAI9F,EAAM8F,GACVkQ,WAAYnL,EAAa7O,GACzB8Z,SAAkB,IAARlZ,GAAoB,IAAPA,EAAYgK,GAAkB,QAKrEkD,MAAO,SAAU9N,GACb,GAAIsF,GAAOtF,EAAKM,aAChB,OAAOsB,GAAW0D,EAAOA,EAAO,GAAItF,EAAK6B,WAAY7B,EAAK8B,YAE9DkM,KAAM,SAAUhO,GACZ,GAAIsF,GAAOtF,EAAKM,aAChB,OAAOsB,GAAW0D,EAAOA,EAAO,GAAK,EAAGtF,EAAK6B,WAAY7B,EAAK8B,YAElEI,QAAS,SAAUC,EAAOC,GACtB,MAAOF,GAAQC,EAAOC,EAAO,KAEjCa,QAAS,SAAUjD,EAAM4C,GACrBK,EAAQjD,EAAM4C,EAAO,IAEzBiM,aAAc,SAAU7O,GACpB,MAAOA,GAAKM,cAAgB,UAIhCiN,KAAMlD,GACNtK,MAAO,SAAUC,EAAMC,EAAKC,GACxB,MAAOH,GAAMC,EAAMC,EAAKC,EAAK,MAEjCqB,QAAS,SAAUb,GACf,GAAI4E,GAAO5E,EAAQV,KAAKM,cAAeL,EAAMS,EAAQT,IAAIK,cAAeJ,EAAMQ,EAAQR,IAAII,cAAeuO,EAAejK,KAAKiK,aAActO,EAAUN,EAAKO,EAAUN,CAMpK,OALAK,IAAoBA,EAAU,GAC9BC,GAAoBA,EAAU,GAC1BA,EAAUD,EAAU,KACpBC,EAAUD,EAAU,GAEjBE,GACHJ,MAAOuB,EAAW0D,EAAOA,EAAO,IAAM,GAAI,EAAG,GAC7CrF,IAAK2B,EAAWrB,EAAS,EAAG,GAC5BL,IAAK0B,EAAWpB,EAAS,EAAG,GAC5BK,OAAQ+D,KAAK3B,QACbnC,MAAO,SAAUd,EAAMY,GACnB,GAAIP,GAAQL,EAAKM,cAAeF,EAAMC,EAAQ,CAO9C,OANIA,GAAQJ,IACRI,EAAQJ,GAERG,EAAMF,IACNE,EAAMF,IAGN4J,GAAI9F,EAAM8F,GACVlH,MAAOvC,EAAQ,MAAQD,EACvB4Z,WAAYnL,EAAa7O,GACzB8Z,SAAkB,IAARlZ,GAAoB,IAAPA,EAAYgK,GAAkB,QAKrEkD,MAAO,SAAU9N,GACb,GAAIsF,GAAOtF,EAAKM,aAChB,OAAOsB,GAAW0D,EAAOA,EAAO,IAAKtF,EAAK6B,WAAY7B,EAAK8B,YAE/DkM,KAAM,SAAUhO,GACZ,GAAIsF,GAAOtF,EAAKM,aAChB,OAAOsB,GAAW0D,EAAOA,EAAO,IAAM,GAAItF,EAAK6B,WAAY7B,EAAK8B,YAEpEI,QAAS,SAAUC,EAAOC,GACtB,MAAOF,GAAQC,EAAOC,EAAO,MAEjCa,QAAS,SAAUjD,EAAM4C,GACrBK,EAAQjD,EAAM4C,EAAO,KAEzBiM,aAAc,SAAU7O,GACpB,GAAIsF,GAAOtF,EAAKM,aAChB,OAAOgF,GAAOA,EAAO,GAAK,WA2M1C5B,EAASsD,gBAAkBA,EAC3BtD,EAAS2E,YAAcA,EACvB3E,EAAS6C,iBAAmBA,EAC5B7C,EAASf,cAAgBA,EACzBe,EAASzB,UAAYA,EACrByB,EAASkD,wBAA0BA,EACnClD,EAASoC,UAAYA,EACrBpC,EAASiX,UAAYhX,GACrBD,EAASiB,SAAWyC,EACpBpD,EAAMN,SAAWA,GACnB8E,OAAOxE,MAAM4W,QACRpS,OAAOxE,OACE,kBAAVpE,SAAwBA,OAAOib,IAAMjb,OAAS,SAAUkb,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.calendar.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.calendar', [\n 'kendo.core',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: [\n 'core',\n 'selectable'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, weekInYear = kendo.date.weekInYear, Selectable = kendo.ui.Selectable, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('#=data.value#', { useWithBlock: false }), emptyCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerHeight = kendo._outerHeight, outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + ')', WEEKCOLUMNSELECTOR = 'td:not(:has(.k-link))', SELECTED = 'k-state-selected', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', ARIA_LABEL = 'aria-label', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n };\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = window.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._footer(that.footer);\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK, CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = that._toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n if (that._view.name != 'month' || options.selectable == 'single') {\n that._click($(link));\n }\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (id) {\n that._cellID = id + '_cell_selected';\n }\n if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = that._toDateObject(last.find('a'));\n that._class(FOCUSED, that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: { weekColumnHeader: '' }\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._footer(that.footer);\n that._index = views[that.options.start];\n that.navigate();\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n that._destroySelectable();\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.focus();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled;\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[PREVARROW].hasClass(DISABLED)) {\n that[PREVARROW].removeClass(HOVER);\n }\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[NEXTARROW].hasClass(DISABLED)) {\n that[NEXTARROW].removeClass(HOVER);\n }\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : datesUnique.length === 0 ? datesUnique : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = that._toDateObject(target.find('a'));\n that._class(FOCUSED, that._toDateObject(target.find('a')));\n }\n },\n _onSelect: function (e) {\n var that = this, eventArgs = e, selectableOptions = Selectable.parseOptions(that.options.selectable);\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is('td') && !$(eventArgs.event.currentTarget).hasClass('k-state-selected')) {\n $(eventArgs.event.currentTarget).addClass('k-state-selected');\n } else {\n that._click($(eventArgs.event.currentTarget).find('a'));\n }\n return;\n }\n if (eventArgs.event.ctrlKey || eventArgs.event.metaKey) {\n if ($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n that._toggleSelection($(eventArgs.event.currentTarget));\n } else {\n that._cellsBySelector(CELLSELECTORVALID).each(function (index, element) {\n var value = that._toDateObject($(element).find('a'));\n that._deselect(value);\n });\n that._addSelectedCellsToArray();\n }\n } else if (eventArgs.event.shiftKey) {\n that._rangeSelection(that._cell);\n } else if ($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n that.value(that._toDateObject($(eventArgs.event.currentTarget).find('a')));\n } else {\n that._selectDates = [];\n that._addSelectedCellsToArray();\n }\n that.trigger(CHANGE);\n },\n _destroySelectable: function () {\n var that = this;\n if (that.selectable) {\n that.selectable.destroy();\n that.selectable = null;\n }\n },\n _toggleSelection: function (currentCell) {\n var that = this, date = that._toDateObject(currentCell.find('a'));\n if (currentCell.hasClass('k-state-selected')) {\n that._selectDates.push(date);\n } else {\n that._deselect(date);\n }\n },\n _rangeSelection: function (toDateCell, startDate) {\n var that = this, fromDate = startDate || that._toDateObject(that.selectable.value().first().find('a')), toDate = that._toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? that._toDateObject(that.selectable._lastActive.find('a')) : new Date(+that._value);\n } else {\n that.selectable._lastActive = startDate ? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID) : that.selectable.value().first();\n }\n that._selectDates = [];\n daysDifference = daysBetweenTwoDates(fromDate, toDate);\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that._visualizeSelectedDatesInView();\n },\n _cellsBySelector: function (selector) {\n var that = this;\n return that._table.find(selector);\n },\n _addSelectedCellsToArray: function () {\n var that = this;\n that.selectable.value().each(function (index, item) {\n var date = that._toDateObject($(item.firstChild));\n if (!that.options.disableDates(date)) {\n that._selectDates.push(date);\n }\n });\n },\n _deselect: function (date) {\n var that = this;\n var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n if (currentDateIndex != -1) {\n that._selectDates.splice(currentDateIndex, 1);\n }\n },\n _dateInView: function (date) {\n var that = this, firstDateInView = that._toDateObject(that._cellsBySelector(CELLSELECTOR + ':first').find('a')), lastDateInView = that._toDateObject(that._cellsBySelector(CELLSELECTOR + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey || e.metaKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = that._toDateObject($(that._cell[0]).find('a'));\n that._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(currentValue);\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(that._toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._class(FOCUSED, currentValue);\n }\n } else {\n that._focus(currentValue);\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? that._toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this, from = options.from, to = options.to, active = that._active;\n if (!from) {\n to.insertAfter(that.element[0].firstChild);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n to.insertAfter(that.element[0].firstChild);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('
');\n that._focusView(active, from);\n from.parent().css({\n position: 'relative',\n width: viewWidth * 2,\n 'float': LEFT,\n 'margin-left': future ? 0 : -viewWidth\n });\n to[future ? 'insertAfter' : 'insertBefore'](from);\n extend(horizontal, {\n effects: SLIDE + ':' + (future ? 'right' : LEFT),\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.unwrap();\n that._focusView(active);\n }\n });\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n _vertical: function (from, to) {\n var that = this, vertical = that.options.animation.vertical, effects = vertical.effects, active = that._active, cell, position;\n if (effects && effects.indexOf('zoom') != -1) {\n to.css({\n position: 'absolute',\n top: outerHeight(from.prev()),\n left: 0\n }).insertBefore(from);\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = position.left + parseInt(cell.width() / 2, 10) + 'px' + ' ' + (position.top + parseInt(cell.height() / 2, 10) + 'px');\n to.css(transitionOrigin, position);\n }\n from.kendoStop(true, true).kendoAnimate({\n effects: 'fadeOut',\n duration: 600,\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.css({\n position: 'static',\n top: 0,\n left: 0\n });\n that._focusView(active);\n }\n });\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n _cellByDate: function (value, selector) {\n return this._table.find(selector ? selector : 'td:not(.' + OTHERMONTH + ')').filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell) {\n cell.removeAttr(ARIA_SELECTED).removeAttr(ARIA_LABEL).removeAttr(ID);\n }\n if (date && that._view.name == 'month') {\n disabledDate = that.options.disableDates(date);\n }\n that._cellsBySelector(that._isMultipleSelection() ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').removeClass(className);\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').attr(ARIA_SELECTED, true);\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n className = '';\n }\n cell.addClass(className);\n if (cell[0]) {\n that._cell = cell;\n }\n if (id) {\n cell.attr(ID, id);\n that._table.removeAttr('aria-activedescendant').attr('aria-activedescendant', id);\n }\n },\n _bindTable: function (table) {\n table.on(FOCUS_WITH_NS, this._addClassProxy).on(BLUR, this._removeClassProxy);\n },\n _click: function (link) {\n var that = this, options = that.options, currentValue = new Date(+that._current), value = that._toDateObject(link);\n adjustDST(value, 0);\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n value = that._value;\n }\n that._view.setDate(currentValue, value);\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n _focus: function (value) {\n var that = this, view = that._view;\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._class(FOCUSED, value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('
').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, links;\n if (!element.find('.k-header')[0]) {\n element.html('
' + '' + '' + '' + '
');\n }\n links = element.find('.k-link').on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).click(false);\n that._title = links.eq(1).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month)').has('.k-link').first();\n currentValue = that._toDateObject(firstDayCurrentMonth.find('a'));\n that._current = new Date(+currentValue);\n }\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today;\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(TODAY).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(TODAY).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _toDateObject: function (link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty, footerTemplate = '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #';\n that.month = {\n content: template('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty }),\n weekNumber: template('' + (weekNumber || '#= data.weekNumber #') + '', { useWithBlock: !!weekNumber })\n };\n if (footer && footer !== true) {\n footerTemplate = footer;\n }\n that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return createDate(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = getToday(), html = '';\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n content: options.content,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max;\n return view({\n min: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(options.date.getFullYear(), 0, 1),\n setter: this.setDate,\n build: function (date) {\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\n };\n }\n });\n },\n first: function (date) {\n return createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return createDate(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString;\n return view({\n start: createDate(year - year % 10 - 1, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(options.max.getFullYear(), 0, 1),\n setter: this.setDate,\n build: function (date, idx) {\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max;\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n return view({\n start: createDate(year - year % 100 - 10, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(maxYear, 0, 1),\n setter: this.setDate,\n build: function (date, idx) {\n var start = date.getFullYear(), end = start + 9;\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n }\n }\n ]\n };\n function title(date, min, max, modular) {\n var start = date.getFullYear(), minYear = min.getFullYear(), maxYear = max.getFullYear(), end;\n start = start - start % modular;\n end = start + (modular - 1);\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n return start + '-' + end;\n }\n function view(options) {\n var idx = 0, data, min = options.min, max = options.max, start = options.start, setter = options.setter, build = options.build, weekNumberBuild = options.weekNumberBuild, length = options.cells || 12, isWeekColumnVisible = options.isWeekColumnVisible, cellsPerRow = options.perRow || 4, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, html = options.html || '
' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '
';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function createDate(year, month, date) {\n var dateObject = new DATE(year, month, date);\n dateObject.setFullYear(year, month, date);\n return dateObject;\n }\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var found = date && window.kendo.jQuery.inArray(date.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var found = date && window.kendo.jQuery.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}