{"version":3,"sources":["webpack://App.[name]/./reports/psAppRankings.js","webpack://App.[name]/./vendor/jquery/jquery-1.10.2.js","webpack://App.[name]/(webpack)/buildin/module.js","webpack://App.[name]/(webpack)/buildin/global.js","webpack://App.[name]/./vendor/jquery/jquery-1.10.2.js-exposed","webpack://App.[name]/./vendor/jquery/jquery-1.10.2.js-exposed?978e"],"names":["main","analytics","Highcharts","chartData","JSON","parse","$","html","versionData","rankingsChart","seriesSets","series","versions","key","forEach","datum","index","label","name","data","push","date","ranking","hasOwnProperty","length","points","newpoints","i","thisDate","xMin","unshift","x","y","z","type","color","marker","symbol","radius","enabled","Chart","chart","renderTo","zoomType","spacingRight","events","load","this","renderer","image","add","credits","exporting","chartOptions","title","text","subtitle","location","href","position","align","undefined","document","ontouchstart","xAxis","maxZoom","yAxis","min","reversed","tooltip","shared","formatter","s","Date","toDateString","point","legend","plotOptions","column","legendItemClick","e","trackEvent","container","parent","attr","stacking","dataLabels","theme","dataLabelsColor","window","readyList","rootjQuery","docElem","documentElement","_jQuery","_$","class2type","core_deletedIds","core_concat","concat","core_push","core_slice","slice","core_indexOf","indexOf","core_toString","toString","core_hasOwn","core_trim","trim","jQuery","selector","context","fn","init","core_pnum","source","core_rnotwhite","rtrim","rquickExpr","rsingleTag","rvalidchars","rvalidbraces","rvalidescape","rvalidtokens","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","completed","event","addEventListener","readyState","detach","ready","removeEventListener","detachEvent","isArraylike","obj","isWindow","nodeType","prototype","jquery","constructor","match","elem","charAt","exec","find","merge","parseHTML","ownerDocument","test","isPlainObject","isFunction","getElementById","parentNode","id","makeArray","toArray","call","get","num","pushStack","elems","ret","prevObject","each","callback","args","promise","done","apply","arguments","first","eq","last","len","j","map","end","sort","splice","extend","src","copyIsArray","copy","options","clone","target","deep","isArray","expando","Math","random","replace","noConflict","isReady","readyWait","holdReady","hold","wait","body","setTimeout","resolveWith","trigger","off","Array","isNumeric","isNaN","parseFloat","isFinite","String","support","ownLast","isEmptyObject","error","msg","Error","keepScripts","parsed","scripts","createElement","buildFragment","remove","childNodes","parseJSON","Function","parseXML","xml","DOMParser","parseFromString","ActiveXObject","async","loadXML","getElementsByTagName","noop","globalEval","execScript","camelCase","string","nodeName","toLowerCase","arr","results","Object","inArray","max","second","l","grep","inv","arg","value","guid","proxy","tmp","access","chainable","emptyGet","raw","bulk","now","getTime","swap","old","style","Deferred","attachEvent","top","frameElement","doScroll","doScrollCheck","split","cachedruns","Expr","getText","isXML","compile","outermostContext","sortInput","setDocument","documentIsHTML","rbuggyQSA","rbuggyMatches","matches","contains","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","hasDuplicate","sortOrder","a","b","hasOwn","pop","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rsibling","rattributeQuotes","rpseudo","ridentifier","matchExpr","rnative","rinputs","rheader","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","fromCharCode","els","Sizzle","seed","m","groups","nid","newContext","newSelector","getElementsByClassName","qsa","tokenize","getAttribute","setAttribute","toSelector","join","querySelectorAll","qsaError","removeAttribute","tokens","token","getById","relative","shift","select","keys","cache","cacheLength","markFunction","assert","div","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","node","doc","defaultView","className","appendChild","createComment","innerHTML","firstChild","getElementsByName","filter","attrId","getAttributeNode","tag","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","elements","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo","dir","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","matcher","unmatched","innerText","lang","elemLang","hash","activeElement","hasFocus","tabIndex","disabled","checked","selected","selectedIndex","radio","checkbox","file","password","submit","reset","parseOnly","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","dirkey","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","group","setMatchers","elementMatchers","matcherCachedRuns","bySet","byElement","superMatcher","expandContext","setMatched","matchedCount","outermost","contextBackup","dirrunsUnique","matcherFromGroupMatchers","div1","defaultValue","unique","isXMLDoc","optionsCache","Callbacks","object","flag","createOptions","firing","memory","fired","firingLength","firingIndex","firingStart","list","stack","once","fire","stopOnFalse","self","disable","has","empty","lock","locked","fireWith","func","tuples","state","always","deferred","fail","then","fns","newDefer","tuple","action","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","remaining","updateFunc","values","notifyWith","fragment","opt","eventName","isSupported","cssText","getSetAttribute","leadingWhitespace","tbody","htmlSerialize","hrefNormalized","opacity","cssFloat","checkOn","optSelected","enctype","html5Clone","cloneNode","outerHTML","inlineBlockNeedsLayout","shrinkWrapBlocks","pixelPosition","deleteExpando","noCloneEvent","reliableMarginRight","boxSizingReliable","noCloneChecked","optDisabled","radioValue","createDocumentFragment","appendChecked","checkClone","click","change","focusin","backgroundClip","clearCloneStyle","marginDiv","tds","divReset","offsetHeight","display","reliableHiddenOffsets","zoom","boxSizing","offsetWidth","getComputedStyle","width","marginRight","rbrace","rmultiDash","internalData","pvt","acceptData","thisCache","internalKey","isNode","toJSON","internalRemoveData","isEmptyDataObject","cleanData","dataAttr","noData","hasData","removeData","_data","_removeData","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","delay","time","fx","speeds","next","timeout","clearTimeout","clearQueue","count","defer","nodeHook","boolHook","rclass","rreturn","rfocusable","rclickable","ruseDefault","getSetInput","removeAttr","prop","removeProp","propFix","addClass","classes","clazz","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","valHooks","set","option","one","optionSet","nType","attrHooks","bool","propName","attrNames","propHooks","tabindex","parseInt","getter","setAttributeNode","createAttribute","coords","button","contenteditable","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","global","types","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","needsContext","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","props","srcElement","metaKey","original","which","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","focus","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","getPreventDefault","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","orig","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","origFn","triggerHandler","isSimple","rparentsprev","rneedsContext","guaranteedUnique","children","contents","prev","sibling","winnow","qualifier","not","createSafeFragment","nodeNames","safeFrag","targets","is","closest","pos","prevAll","addBack","parents","parentsUntil","until","nextAll","nextUntil","prevUntil","siblings","contentDocument","contentWindow","reverse","n","r","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","manipulation_rcheckableType","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","area","param","thead","tr","col","td","fragmentDiv","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultChecked","defaultSelected","getAll","found","fixDefaultChecked","optgroup","tfoot","colgroup","caption","th","append","createTextNode","domManip","prepend","insertBefore","before","after","keepData","dataAndEvents","deepDataAndEvents","replaceWith","allowIntersection","hasScripts","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","destElements","srcElements","inPage","selection","wrap","safe","nodes","url","ajax","dataType","wrapAll","wrapInner","unwrap","iframe","getStyles","curCSS","ralpha","ropacity","rposition","rdisplayswap","rmargin","rnumsplit","rnumnonpx","rrelNum","elemdisplay","BODY","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","cssExpand","cssPrefixes","vendorPropName","capName","origName","isHidden","el","css","showHide","show","hidden","css_defaultDisplay","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","actualDisplay","write","close","hide","toggle","cssHooks","computed","cssNumber","cssProps","_computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","$1","visible","margin","padding","border","prefix","suffix","expand","expanded","parts","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","v","serialize","serializeArray","encodeURIComponent","ajaxSettings","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","ajaxLocParts","ajaxLocation","ajax_nonce","ajax_rquery","rhash","rts","rheaders","rnoContent","rprotocol","rurl","_load","prefilters","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","originalOptions","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","params","response","responseText","complete","status","active","lastModified","etag","isLocal","processData","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","mimeType","code","abort","statusText","finalText","success","method","crossDomain","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","modified","firstDataType","ct","finalDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","ajaxConvert","rejectWith","getJSON","getScript","script","head","scriptCharset","charset","onload","onreadystatechange","isAbort","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","xhrCallbacks","xhrSupported","xhrId","xhrOnUnloadAbort","createStandardXHR","XMLHttpRequest","xhr","createActiveXHR","cors","username","open","xhrFields","firefoxAccessException","unload","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","opts","tween","oldfire","anim","dataShow","unqueued","overflow","overflowX","overflowY","createTween","tweeners","unit","scale","maxIterations","createFxNow","animation","collection","Animation","properties","stopped","tick","currentTime","startTime","duration","percent","tweens","run","specialEasing","originalProperties","Tween","easing","gotoEnd","propFilter","timer","genFx","includeWidth","height","getWindow","tweener","prefilter","eased","step","cssFn","speed","animate","fadeTo","to","optall","doAnimation","finish","stopQueue","timers","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","linear","p","swing","cos","PI","interval","setInterval","clearInterval","slow","fast","animated","offset","setOffset","win","box","getBoundingClientRect","pageYOffset","pageXOffset","curTop","curLeft","curElem","curOffset","curCSSTop","curCSSLeft","curPosition","using","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","module","exports","webpackPolyfill","deprecate","paths","defineProperty","enumerable","g"],"mappings":"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","file":"33.chunk.js?v=90b7004016e6a76b848c","sourcesContent":["require('expose-loader?$!expose-loader?jQuery!jquery');\nfunction main(analytics, Highcharts) {\n 'use strict';\n\n var chartData = JSON.parse( $('#data-rankings').html() );\n var versionData = JSON.parse( $('#data-versions').html() );\n var rankingsChart = {\n seriesSets: {},\n series: [],\n versions: []\n };\n chartData.forEach(function(datum, index) {\n if (!rankingsChart.seriesSets[datum.label]) {\n rankingsChart.seriesSets[datum.label] = {\n name: datum.label,\n data: []\n };\n }\n rankingsChart.seriesSets[datum.label].data.push([datum.date, datum.ranking]);\n });\n for (var key in rankingsChart.seriesSets) {\n if (rankingsChart.seriesSets.hasOwnProperty(key)) {\n if (rankingsChart.seriesSets[key].data.length >= 5) {\n var points = rankingsChart.seriesSets[key].data;\n var newpoints = [];\n for (var i = 0; i < points.length; i++){\n if (newpoints && newpoints[i - 1]) {\n // if the time gap is more than x days, don't connect the lines by\n // inserting a null\n var unixDay = 24 * 60 * 60 * 1000;\n if (points[i][0] - points[i - 1][0] > 21 * unixDay) {\n newpoints.push([points[i][0] - unixDay, null]);\n }\n }\n newpoints.push(points[i]);\n }\n rankingsChart.seriesSets[key].data = newpoints;\n rankingsChart.series.push(rankingsChart.seriesSets[key]);\n }\n }\n }\n versionData.forEach(function(datum, index) {\n var thisDate = datum.date;\n if (thisDate >= rankingsChart.xMin) {\n rankingsChart.versions.unshift({x: thisDate, y: 1, z: 'v'+ datum.label });\n }\n });\n rankingsChart.series.unshift({\n type: 'scatter',\n name: 'Versions',\n color: '#000',\n marker: {\n symbol: 'diamond',\n radius: 5,\n enabled: true\n },\n data: rankingsChart.versions\n });\n if (chartData.length > 5) {\n new Highcharts.Chart({\n chart: {\n renderTo: 'ranking-trends',\n zoomType: 'x',\n spacingRight: 20,\n events: {\n load: function() {\n this.renderer.image('https://mixrank.com/static/images/logo-grayscale-transparent.png', 235, 150, 185, 31).add();\n }\n }\n },\n credits: {\n enabled: false\n },\n exporting: {\n chartOptions: {\n title: {\n text: 'Rankings - '+ $('#data-app-name').html()\n },\n subtitle: {\n text: null\n },\n credits: {\n enabled: true,\n text: location.href,\n href: location.href,\n position: {\n align: 'center'\n }\n }\n }\n },\n title: {\n text: undefined\n },\n subtitle: {\n text: document.ontouchstart === undefined ?\n 'Click and drag in the plot area to zoom in' :\n 'Pinch the chart to zoom in'\n },\n xAxis: {\n type: 'datetime',\n maxZoom: 14 * 24 * 3600000, // fourteen days\n title: {\n text: null\n }\n },\n yAxis: {\n title: {\n text: undefined\n },\n type: 'logarithmic',\n min: 1,\n reversed: true\n },\n tooltip: {\n shared: false,\n formatter: function() {\n var s = '';\n if (this.series.name !== 'Versions') {\n s = ''+ new Date(this.x).toDateString() +'
';\n s += 'Version: '+ this.series.name +'
';\n s += 'Ranked: '+ this.y +'
';\n return s;\n }\n else {\n s = ''+ new Date(this.x).toDateString() +'
';\n s += 'Version: '+ this.point.z;\n return s;\n }\n }\n },\n legend: {\n enabled: true\n },\n plotOptions: {\n column: {\n events: {\n legendItemClick: function(e) {\n analytics.trackEvent('chartLegend#'+ $(this.chart.container).parent().attr('id'));\n }\n },\n stacking: 'normal',\n dataLabels: {\n enabled: false,\n color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white'\n }\n }\n },\n series: rankingsChart.series\n });\n }\n}\nrequire(['../js/analytics', '../vendor/highcharts/highcharts.src.js', '../vendor/highcharts/exporting'], main);\n","/*!\n * jQuery JavaScript Library v1.10.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03T13:48Z\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<10\n\t// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tlocation = window.location,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.10.2\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t},\n\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( jQuery.support.ownLast ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn core_hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations.\n\t// Note: this method belongs to the css module but it's needed here for the support module.\n\t// If support gets modularized, this method should be moved back to the css module.\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n/*!\n * Sizzle CSS Selector Engine v1.10.2\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03\n */\n(function( window, undefined ) {\n\nvar i,\n\tsupport,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\toutermostContext,\n\tsortInput,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\thasDuplicate = false,\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:([*^$|!~]?=)\" + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t// then not containing pseudos/brackets,\n\t// then attribute selectors/non-parenthetical expressions,\n\t// then anything else\n\t// These preferences are here to reduce the number of selectors\n\t// needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trsibling = new RegExp( whitespace + \"*[+~]\" ),\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key += \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect xml\n * @param {Element|Object} elem An element or a document\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar doc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent.attachEvent && parent !== parent.top ) {\n\t\tparent.attachEvent( \"onbeforeunload\", function() {\n\t\t\tsetDocument();\n\t\t});\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = assert(function( div ) {\n\t\tdiv.innerHTML = \"
\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"\";\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Support: Opera 10-12/IE8\n\t\t\t// ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type attribute is restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"t\", \"\" );\n\n\t\t\tif ( div.querySelectorAll(\"[t^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );\n\n\t\tif ( compare ) {\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === doc || contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\t// Not directly comparable, sort on existence of method\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [elem] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val === undefined ?\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull :\n\t\tval;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[5] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] && match[4] !== undefined ) {\n\t\t\t\tmatch[2] = match[4];\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t// not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t// Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar data, cache, outerCache,\n\t\t\t\tdirkey = dirruns + \" \" + doneName;\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++matcherCachedRuns;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn (val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\telem[ name ] === true ? name.toLowerCase() : null;\n\t\t}\n\t});\n}\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function( support ) {\n\n\tvar all, a, input, select, fragment, opt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"
a\";\n\n\t// Finish early in limited (non-browser) environments\n\tall = div.getElementsByTagName(\"*\") || [];\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !a || !a.style || !all.length ) {\n\t\treturn support;\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName(\"tbody\").length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName(\"link\").length;\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\n\n\t// Make sure that element opacity exists\n\t// (IE uses filter instead)\n\t// Use a regex to work around a WebKit issue. See #5145\n\tsupport.opacity = /^0.5/.test( a.style.opacity );\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!a.style.cssFloat;\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone = document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav>\";\n\n\t// Will be defined later\n\tsupport.inlineBlockNeedsLayout = false;\n\tsupport.shrinkWrapBlocks = false;\n\tsupport.pixelPosition = false;\n\tsupport.deleteExpando = true;\n\tsupport.noCloneEvent = true;\n\tsupport.reliableMarginRight = true;\n\tsupport.boxSizingReliable = true;\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Support: IE<9\n\t// Iteration over object's inherited properties before its own.\n\tfor ( i in jQuery( support ) ) {\n\t\tbreak;\n\t}\n\tsupport.ownLast = i !== \"0\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"
t
\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior.\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\n\t\t// Workaround failing boxSizing test due to offsetWidth returning wrong value\n\t\t// with some non-1 values of body zoom, ticket #13543\n\t\tjQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {\n\t\t\tsupport.boxSizing = div.offsetWidth === 4;\n\t\t});\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"
\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})({});\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"applet\": true,\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\tdata = null,\n\t\t\ti = 0,\n\t\t\telem = this[0];\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf(\"data-\") === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t}) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook,\n\trclass = /[\\t\\r\\n\\f]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = jQuery.trim( cur );\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( core_rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar ret, hooks, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Use proper attribute retrieval(#6932, #12072)\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\telem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( core_rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;\n\n\tjQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar fn = jQuery.expr.attrHandle[ name ],\n\t\t\t\tret = isXML ?\n\t\t\t\t\tundefined :\n\t\t\t\t\t/* jshint eqeqeq: false */\n\t\t\t\t\t(jQuery.expr.attrHandle[ name ] = undefined) !=\n\t\t\t\t\t\tgetter( elem, name, isXML ) ?\n\n\t\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\t\tnull;\n\t\t\tjQuery.expr.attrHandle[ name ] = fn;\n\t\t\treturn ret;\n\t\t} :\n\t\tfunction( elem, name, isXML ) {\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t};\n});\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\tjQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =\n\t\t// Some attributes are constructed with empty-string values when not defined\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\t(ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t};\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ret.specified ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !jQuery.support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\nvar isSimple = /^.[^:#\\[\\.,]*$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tcur = ret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.unique( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tvar elem = elems[ 0 ];\n\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t}));\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"\" ],\n\t\tlegend: [ 1, \"
\", \"
\" ],\n\t\tarea: [ 1, \"\", \"\" ],\n\t\tparam: [ 1, \"\", \"\" ],\n\t\tthead: [ 1, \"\", \"
\" ],\n\t\ttr: [ 2, \"\", \"
\" ],\n\t\tcol: [ 2, \"\", \"
\" ],\n\t\ttd: [ 3, \"\", \"
\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X
\", \"
\" ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar\n\t\t\t// Snapshot the DOM in case .domManip sweeps something relevant into its fragment\n\t\t\targs = jQuery.map( this, function( elem ) {\n\t\t\t\treturn [ elem.nextSibling, elem.parentNode ];\n\t\t\t}),\n\t\t\ti = 0;\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\tvar next = args[ i++ ],\n\t\t\t\tparent = args[ i++ ];\n\n\t\t\tif ( parent ) {\n\t\t\t\t// Don't use the snapshot next if it has moved (#13810)\n\t\t\t\tif ( next && next.parentNode !== parent ) {\n\t\t\t\t\tnext = this.nextSibling;\n\t\t\t\t}\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t// Allow new content to include elements from the context set\n\t\t}, true );\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn i ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback, allowIntersection ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction || !( l <= 1 || typeof value !== \"string\" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback, allowIntersection );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[i], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a , *may* have spurious \n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare or \n\t\t\t\t\t\t\twrap[1] === \"
\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_evalUrl: function( url ) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\t\t\t\"throws\": true\n\t\t});\n\t}\n});\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"