{"version":3,"sources":["kendo.core.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","shadows","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","isRtl","parent","hasClass","style","is","show","percentRegExp","test","outerWidth","outerHeight","boxSizing","mozBoxSizing","webkitBoxSizing","opera","addClass","marginLeft","paddingLeft","paddingRight","paddingBottom","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","sign","pointers","msPointers","top","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","filters","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","String","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","name","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","RegExp","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","offset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","2","3","4","parseDate","tzoffset","timezone","convert","percentSymbol","table","transforms","elementProto","mobileOS","documentMode","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","MSPointerEvent","PointerEvent","HTMLElement","hasHW3D","WebKitCSSMatrix","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","kineticScrollNeeded","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","detectClipboardAccess","commands","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","down","up","in","out","enabled","display","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","fromLocalOffset","toLocalOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","toUtcTime","isInTimeRange","msValue","msMin","msMax","MS_PER_DAY","isInDateRange","addDays","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3"],"mappings":"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","file":"kendo.core.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.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice;\n kendo.version = '2016.3.1028'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n return customPrecision ? number.toExponential(precision) : number.toExponential();\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (negative) {\n number = -number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0) {\n format = format[2] || format[0];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n if (idx > -1) {\n number = round(number, idx);\n }\n } else {\n number = round(number);\n }\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n parts.push(integer.substring(0, idx));\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var patterns = culture.calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n kendo.parseDate = function (value, formats, culture) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture);\n if (date) {\n return date;\n }\n }\n return date;\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, isRtl = element.css('direction') == 'rtl';\n if (!element.parent().hasClass('k-animation-container')) {\n var shadows = getShadows(element), width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n if (browser.opera) {\n shadows.left = shadows.right = shadows.bottom = 5;\n }\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = element.outerWidth();\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = element.outerHeight();\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height,\n marginLeft: shadows.left * (isRtl ? 1 : -1),\n paddingLeft: shadows.left,\n paddingRight: shadows.right,\n paddingBottom: shadows.bottom\n }));\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.show();\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: element.outerWidth(),\n height: element.outerHeight(),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n support.msPointers = window.MSPointerEvent;\n support.pointers = window.PointerEvent;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in document.documentElement.style || 'msPerspective' in document.documentElement.style;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3].replace('_', '.');\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\n support.detectClipboardAccess = function () {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false\n };\n if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof document.documentElement.style.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var result = element[type]();\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset + sign * document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n webComponents: kendo.webComponents || [],\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value)) {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {}, option, value;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\n value = kendo.template($('#' + value).html());\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft;\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $('
' + kendo.ui.progress.messages.loading + '
').width('100%').height('100%').css('top', container.scrollTop()).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\n }\n for (i = 0, length = widgets.length; i < length; i++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data('kendo' + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\n };\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr[':'], {\n kendoFocusable: function (element) {\n var idx = $.attr(element, 'tabindex');\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n var handler = function (e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === 'click') {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n muteMouse: function (e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\n };\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: 'touchstart',\n move: 'touchmove',\n up: 'touchend touchcancel',\n cancel: 'touchcancel'\n };\n } else if (support.pointers) {\n eventMap = {\n down: 'pointerdown',\n move: 'pointermove',\n up: 'pointerup',\n cancel: 'pointercancel pointerleave'\n };\n } else if (support.msPointers) {\n eventMap = {\n down: 'MSPointerDown',\n move: 'MSPointerMove',\n up: 'MSPointerUp',\n cancel: 'MSPointerCancel MSPointerLeave'\n };\n }\n if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n if (!related || related !== target && !$.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n extend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\n }\n if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n Sat: 6\n };\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\n }\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf('last') === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf('>=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = 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 function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return date.getTime() - getDate(date);\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n element.setSelectionRange(start, end);\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}