{"mappings":"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","sources":["src/js/solicitor-or-conveyancer-table.js","node_modules/datatables.net-dt/js/dataTables.dataTables.mjs","node_modules/jquery/dist/jquery.js","node_modules/datatables.net/js/jquery.dataTables.mjs"],"sourcesContent":["import DataTable from 'datatables.net-dt';\nconst sFirtImage =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTEiIGhlaWdodD0iMTEiIHZpZXdCb3g9IjAgMCAxMSAxMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUuNSAxTDEuNSA1LjVMNS41IDEwIiBzdHJva2U9IiM0NjE0NEYiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxwYXRoIGQ9Ik05LjUgMUw1LjUgNS41TDkuNSAxMCIgc3Ryb2tlPSIjNDYxNDRGIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8L3N2Zz4K';\nconst sPrevImage =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMSIgdmlld0JveD0iMCAwIDcgMTEiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01LjUgMUwxLjUgNS41TDUuNSAxMCIgc3Ryb2tlPSIjNDYxNDRGIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8L3N2Zz4K';\n\nlet table = new DataTable('#solicitor-conveyancer-table', {\n responsive: true,\n bLengthChange: false,\n pagingType: 'full_numbers',\n scrollX: true,\n language: {\n search: '',\n searchPlaceholder: 'Search by keyword ...',\n info: '_PAGE_ of _PAGES_',\n paginate: {\n sFirst: `<span class='pagination-icon sfirstIcon'><img aria-label='Navigate to First page' src=${sFirtImage} /></span>`, // This is the link to the first page\n sPrevious: `<span class='pagination-icon sprevIcon'><img aria-label='Navigate to Previous page' src=${sPrevImage} /></span>`, // This is the link to the previous page\n sNext: `<span class='pagination-icon snextIcon'><img aria-label='Navigate to Next page' src=${sPrevImage} /></span>`, // This is the link to the next page\n sLast: `<span class='pagination-icon slastIcon'><img aria-label='Navigate to Last page' src=${sFirtImage} /></span>`, // This is the link to the last page\n },\n },\n drawCallback: function (settings) {\n let paginateContainer = document.querySelector('.dataTables_paginate');\n let infoContainer = document.querySelector('.dataTables_info');\n let newInfoElement = infoContainer.cloneNode(true);\n newInfoElement.style.display = 'inline-block';\n newInfoElement.style.float = 'unset';\n paginateContainer.children[1].after(newInfoElement);\n },\n});\n\nlet tableHeaders = document.querySelectorAll('th');\n\ntableHeaders.forEach(function (header) {\n header.removeAttribute('aria-label');\n});\n","/*! DataTables styling integration\n * ©2018 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n\n\nexport default DataTable;\n","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn 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\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : 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\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\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\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\tslice: function() {\n\t\treturn this.pushStack( 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\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\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\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, 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\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || 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 ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\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\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\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\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.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\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\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\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\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.push( 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.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\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\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\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\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\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( rtrimCSS, \"$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\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\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 jQuery selector module\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 element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\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\treturn nodeName( elem, \"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\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\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 * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\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 programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\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\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\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 !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && 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\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( 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\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ 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\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\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.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 */\njQuery.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\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, 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\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\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\tATTR: 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[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.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\tCHILD: function( match ) {\n\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\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.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 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\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\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && 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 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\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\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: 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 +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.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\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: 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, 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\t\t\t\t\t\tdiff = false;\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 ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\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\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\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 = nodeIndex && 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} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\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\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\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\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\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\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://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\tfind.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 jQuery 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\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\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( rtrimCSS, \"$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\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( 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// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.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\ttarget: 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\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\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\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\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\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: 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\todd: 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\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\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\tgt: 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\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 = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\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\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\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\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\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\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator 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\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\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\treturn false;\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 multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\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, matcherOut,\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 ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.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\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\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\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\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\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !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\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\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\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\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 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$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\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\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\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, 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}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\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// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\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\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\tjQuery.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\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ 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,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\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\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\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\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\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// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\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// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\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\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 ( 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\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\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 || root ).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[ 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 ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\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\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; 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\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\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 this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\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 indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\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\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\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 dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn 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 dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = 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\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\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\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], 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\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\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\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\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\tif ( isFunction( arg ) ) {\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 && toType( arg ) !== \"string\" ) {\n\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\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\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\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 ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\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 ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\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\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};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\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\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\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 && 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.progress( newDefer.notify )\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} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\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\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\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 jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\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// 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[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = 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(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\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( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\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 trac-6781\n\treadyWait: 1,\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// 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\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\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\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\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\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tdataPriv.set( elem, \"hasDataAttrs\", 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\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\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 = dataPriv.get( 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 || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( 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 public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", 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\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\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 = dataPriv.get( 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 pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\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\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\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 ( isHiddenWithinTree( 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} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\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\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\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// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, 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 = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\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 !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\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 if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( 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},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( 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( rnothtmlwhite ) || [ \"\" ];\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 ] &&\n\t\t\t\tnew 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 ||\n\t\t\t\t\t\tselector === \"**\" && 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 ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\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 data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ 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\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\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++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.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 ||\n\t\t\t\t\t\thandleObj.handler ).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 i, handleObj, sel, matchedHandlers, matchedSelectors,\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\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\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 (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\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 ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\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\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( 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// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\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\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\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 ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\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 || Date.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// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\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 mouseenter/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\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, 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\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 ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.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\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\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\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\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\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\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, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], 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\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\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// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, 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 domManip( this, 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 domManip( this, 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 domManip( this, 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\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\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 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 && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\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!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\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 ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\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\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\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// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// 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\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\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\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\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: 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\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\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 = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then 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 \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !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 ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\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 val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\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// Make numeric 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 || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.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} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn 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\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( 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 === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\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\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\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\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\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\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\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\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\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}\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\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\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 classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\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 classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\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 ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", 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\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\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 ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\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\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = 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 ( valueIsFunction ) {\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\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.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\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\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\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\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\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// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\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!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!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\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\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\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 ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = 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( \".\" ) > -1 ) {\n\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.rnamespace = 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 (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !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\t\t\tlastElement = cur;\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 = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( 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 && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\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 ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !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\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\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\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\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}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\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} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\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// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\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\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = 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.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\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 ( 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 htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\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} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\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\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\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\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\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\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*! DataTables 1.13.7\n * ©2008-2023 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\n\n// DataTables code uses $ internally, but we want to be able to\n// reassign $ with the `use` method, so it is a regular var.\nvar $ = jQuery;\n\n\nvar DataTable = function ( selector, options )\n{\n\t// Check if called with a window or jQuery object for DOM less applications\n\t// This is for backwards compatibility\n\tif (DataTable.factory(selector, options)) {\n\t\treturn DataTable;\n\t}\n\n\t// When creating with `new`, create a new DataTable, returning the API instance\n\tif (this instanceof DataTable) {\n\t\treturn $(selector).DataTable(options);\n\t}\n\telse {\n\t\t// Argument switching\n\t\toptions = selector;\n\t}\n\n\t/**\n\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t * return the resulting jQuery object.\n\t * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t * @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t * criterion (\"applied\") or all TR elements (i.e. no filter).\n\t * @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t * Can be either 'current', whereby the current sorting of the table is used, or\n\t * 'original' whereby the original order the data was read into the table is used.\n\t * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t * (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t * 'current' and filter is 'applied', regardless of what they might be given as.\n\t * @returns {object} jQuery object, filtered by the given selector.\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Highlight every second row\n\t * oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t * } );\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Filter to rows with 'Webkit' in them, add a background colour and then\n\t * // remove the filter, thus highlighting the 'Webkit' rows only.\n\t * oTable.fnFilter('Webkit');\n\t * oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t * oTable.fnFilter('');\n\t * } );\n\t */\n\tthis.$ = function ( sSelector, oOpts )\n\t{\n\t\treturn this.api(true).$( sSelector, oOpts );\n\t};\n\t\n\t\n\t/**\n\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t * rows are found, the data returned is the original data array/object that was used to\n\t * create the row (or a generated array if from a DOM source).\n\t *\n\t * This method is often useful in-combination with $ where both functions are given the\n\t * same parameters and the array indexes will match identically.\n\t * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t * @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t * @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t * criterion (\"applied\") or all elements (i.e. no filter).\n\t * @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t * Can be either 'current', whereby the current sorting of the table is used, or\n\t * 'original' whereby the original order the data was read into the table is used.\n\t * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t * (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t * 'current' and filter is 'applied', regardless of what they might be given as.\n\t * @returns {array} Data for the matched elements. If any elements, as a result of the\n\t * selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t * entry in the array.\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Get the data from the first row in the table\n\t * var data = oTable._('tr:first');\n\t *\n\t * // Do something useful with the data\n\t * alert( \"First cell is: \"+data[0] );\n\t * } );\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Filter to 'Webkit' and get all data for\n\t * oTable.fnFilter('Webkit');\n\t * var data = oTable._('tr', {\"search\": \"applied\"});\n\t *\n\t * // Do something with the data\n\t * alert( data.length+\" rows matched the search\" );\n\t * } );\n\t */\n\tthis._ = function ( sSelector, oOpts )\n\t{\n\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t};\n\t\n\t\n\t/**\n\t * Create a DataTables Api instance, with the currently selected tables for\n\t * the Api's context.\n\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t * only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t * used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t * or if all tables captured in the jQuery object should be used.\n\t * @return {DataTables.Api}\n\t */\n\tthis.api = function ( traditional )\n\t{\n\t\treturn traditional ?\n\t\t\tnew _Api(\n\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t) :\n\t\t\tnew _Api( this );\n\t};\n\t\n\t\n\t/**\n\t * Add a single new row or multiple rows of data to the table. Please note\n\t * that this is suitable for client-side processing only - if you are using\n\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t * @param {array|object} data The data to be added to the table. This can be:\n\t * <ul>\n\t * <li>1D array of data - add a single row with the data provided</li>\n\t * <li>2D array of arrays - add multiple rows in a single call</li>\n\t * <li>object - data object when using <i>mData</i></li>\n\t * <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t * </ul>\n\t * @param {bool} [redraw=true] redraw the table or not\n\t * @returns {array} An array of integers, representing the list of indexes in\n\t * <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t * the table.\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * // Global var for counter\n\t * var giCount = 2;\n\t *\n\t * $(document).ready(function() {\n\t * $('#example').dataTable();\n\t * } );\n\t *\n\t * function fnClickAddRow() {\n\t * $('#example').dataTable().fnAddData( [\n\t * giCount+\".1\",\n\t * giCount+\".2\",\n\t * giCount+\".3\",\n\t * giCount+\".4\" ]\n\t * );\n\t *\n\t * giCount++;\n\t * }\n\t */\n\tthis.fnAddData = function( data, redraw )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\t/* Check if we want to add multiple rows or not */\n\t\tvar rows = Array.isArray(data) && ( Array.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\tapi.rows.add( data ) :\n\t\t\tapi.row.add( data );\n\t\n\t\tif ( redraw === undefined || redraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\n\t\treturn rows.flatten().toArray();\n\t};\n\t\n\t\n\t/**\n\t * This function will make DataTables recalculate the column sizes, based on the data\n\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t * through the sWidth parameter). This can be useful when the width of the table's\n\t * parent element changes (for example a window resize).\n\t * @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable( {\n\t * \"sScrollY\": \"200px\",\n\t * \"bPaginate\": false\n\t * } );\n\t *\n\t * $(window).on('resize', function () {\n\t * oTable.fnAdjustColumnSizing();\n\t * } );\n\t * } );\n\t */\n\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t{\n\t\tvar api = this.api( true ).columns.adjust();\n\t\tvar settings = api.settings()[0];\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw( false );\n\t\t}\n\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Quickly and simply clear a table\n\t * @param {bool} [bRedraw=true] redraw the table or not\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t * oTable.fnClearTable();\n\t * } );\n\t */\n\tthis.fnClearTable = function( bRedraw )\n\t{\n\t\tvar api = this.api( true ).clear();\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t * are currently 'open'.\n\t * @param {node} nTr the table row to 'close'\n\t * @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable;\n\t *\n\t * // 'open' an information row when a row is clicked on\n\t * $('#example tbody tr').click( function () {\n\t * if ( oTable.fnIsOpen(this) ) {\n\t * oTable.fnClose( this );\n\t * } else {\n\t * oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t * }\n\t * } );\n\t *\n\t * oTable = $('#example').dataTable();\n\t * } );\n\t */\n\tthis.fnClose = function( nTr )\n\t{\n\t\tthis.api( true ).row( nTr ).child.hide();\n\t};\n\t\n\t\n\t/**\n\t * Remove a row for the table\n\t * @param {mixed} target The index of the row from aoData to be deleted, or\n\t * the TR element you want to delete\n\t * @param {function|null} [callBack] Callback function\n\t * @param {bool} [redraw=true] Redraw the table or not\n\t * @returns {array} The row that was deleted\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Immediately remove the first row\n\t * oTable.fnDeleteRow( 0 );\n\t * } );\n\t */\n\tthis.fnDeleteRow = function( target, callback, redraw )\n\t{\n\t\tvar api = this.api( true );\n\t\tvar rows = api.rows( target );\n\t\tvar settings = rows.settings()[0];\n\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\n\t\trows.remove();\n\t\n\t\tif ( callback ) {\n\t\t\tcallback.call( this, settings, data );\n\t\t}\n\t\n\t\tif ( redraw === undefined || redraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\n\t\treturn data;\n\t};\n\t\n\t\n\t/**\n\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t * @param {boolean} [remove=false] Completely remove the table from the DOM\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t * var oTable = $('#example').dataTable();\n\t * oTable.fnDestroy();\n\t * } );\n\t */\n\tthis.fnDestroy = function ( remove )\n\t{\n\t\tthis.api( true ).destroy( remove );\n\t};\n\t\n\t\n\t/**\n\t * Redraw the table\n\t * @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t * oTable.fnDraw();\n\t * } );\n\t */\n\tthis.fnDraw = function( complete )\n\t{\n\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t// into account the new data, but can hold position.\n\t\tthis.api( true ).draw( complete );\n\t};\n\t\n\t\n\t/**\n\t * Filter the input based on data\n\t * @param {string} sInput String to filter the table on\n\t * @param {int|null} [iColumn] Column to limit filtering to\n\t * @param {bool} [bRegex=false] Treat as regular expression or not\n\t * @param {bool} [bSmart=true] Perform smart filtering or not\n\t * @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t * @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Sometime later - filter...\n\t * oTable.fnFilter( 'test string' );\n\t * } );\n\t */\n\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t}\n\t\telse {\n\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t}\n\t\n\t\tapi.draw();\n\t};\n\t\n\t\n\t/**\n\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t * provided parameters.\n\t * @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t * a TR node then the data source for the whole row will be returned. If given as a\n\t * TD/TH cell node then iCol will be automatically calculated and the data for the\n\t * cell returned. If given as an integer, then this is treated as the aoData internal\n\t * data index for the row (see fnGetPosition) and the data for that row used.\n\t * @param {int} [col] Optional column index that you want the data of.\n\t * @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t * returned. If mRow is defined, just data for that row, and is iCol is\n\t * defined, only data for the designated cell is returned.\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * // Row data\n\t * $(document).ready(function() {\n\t * oTable = $('#example').dataTable();\n\t *\n\t * oTable.$('tr').click( function () {\n\t * var data = oTable.fnGetData( this );\n\t * // ... do something with the array / object of data for the row\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Individual cell data\n\t * $(document).ready(function() {\n\t * oTable = $('#example').dataTable();\n\t *\n\t * oTable.$('td').click( function () {\n\t * var sData = oTable.fnGetData( this );\n\t * alert( 'The cell clicked on had the value of '+sData );\n\t * } );\n\t * } );\n\t */\n\tthis.fnGetData = function( src, col )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( src !== undefined ) {\n\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\n\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\tapi.row( src ).data() || null;\n\t\t}\n\t\n\t\treturn api.data().toArray();\n\t};\n\t\n\t\n\t/**\n\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t * typically want to use the '$' API method in preference to this as it is more\n\t * flexible.\n\t * @param {int} [iRow] Optional row index for the TR element you want\n\t * @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t * in the table's body, or iRow is defined, just the TR element requested.\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Get the nodes from the table\n\t * var nNodes = oTable.fnGetNodes( );\n\t * } );\n\t */\n\tthis.fnGetNodes = function( iRow )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\treturn iRow !== undefined ?\n\t\t\tapi.row( iRow ).node() :\n\t\t\tapi.rows().nodes().flatten().toArray();\n\t};\n\t\n\t\n\t/**\n\t * Get the array indexes of a particular cell from it's DOM element\n\t * and column index including hidden columns\n\t * @param {node} node this can either be a TR, TD or TH in the table's body\n\t * @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t * if given as a cell, an array of [row index, column index (visible),\n\t * column index (all)] is given.\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * $('#example tbody td').click( function () {\n\t * // Get the position of the current data from the node\n\t * var aPos = oTable.fnGetPosition( this );\n\t *\n\t * // Get the data array for this row\n\t * var aData = oTable.fnGetData( aPos[0] );\n\t *\n\t * // Update the data array and return the value\n\t * aData[ aPos[1] ] = 'clicked';\n\t * this.innerHTML = 'clicked';\n\t * } );\n\t *\n\t * // Init DataTables\n\t * oTable = $('#example').dataTable();\n\t * } );\n\t */\n\tthis.fnGetPosition = function( node )\n\t{\n\t\tvar api = this.api( true );\n\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\n\t\tif ( nodeName == 'TR' ) {\n\t\t\treturn api.row( node ).index();\n\t\t}\n\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\tvar cell = api.cell( node ).index();\n\t\n\t\t\treturn [\n\t\t\t\tcell.row,\n\t\t\t\tcell.columnVisible,\n\t\t\t\tcell.column\n\t\t\t];\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t\n\t/**\n\t * Check to see if a row is 'open' or not.\n\t * @param {node} nTr the table row to check\n\t * @returns {boolean} true if the row is currently open, false otherwise\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable;\n\t *\n\t * // 'open' an information row when a row is clicked on\n\t * $('#example tbody tr').click( function () {\n\t * if ( oTable.fnIsOpen(this) ) {\n\t * oTable.fnClose( this );\n\t * } else {\n\t * oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t * }\n\t * } );\n\t *\n\t * oTable = $('#example').dataTable();\n\t * } );\n\t */\n\tthis.fnIsOpen = function( nTr )\n\t{\n\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t};\n\t\n\t\n\t/**\n\t * This function will place a new row directly after a row which is currently\n\t * on display on the page, with the HTML contents that is passed into the\n\t * function. This can be used, for example, to ask for confirmation that a\n\t * particular record should be deleted.\n\t * @param {node} nTr The table row to 'open'\n\t * @param {string|node|jQuery} mHtml The HTML to put into the row\n\t * @param {string} sClass Class to give the new TD cell\n\t * @returns {node} The row opened. Note that if the table row passed in as the\n\t * first parameter, is not found in the table, this method will silently\n\t * return.\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable;\n\t *\n\t * // 'open' an information row when a row is clicked on\n\t * $('#example tbody tr').click( function () {\n\t * if ( oTable.fnIsOpen(this) ) {\n\t * oTable.fnClose( this );\n\t * } else {\n\t * oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t * }\n\t * } );\n\t *\n\t * oTable = $('#example').dataTable();\n\t * } );\n\t */\n\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t{\n\t\treturn this.api( true )\n\t\t\t.row( nTr )\n\t\t\t.child( mHtml, sClass )\n\t\t\t.show()\n\t\t\t.child()[0];\n\t};\n\t\n\t\n\t/**\n\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t * function. With this function you can have a DataTables table go to the next,\n\t * previous, first or last pages.\n\t * @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t * or page number to jump to (integer), note that page 0 is the first page.\n\t * @param {bool} [bRedraw=true] Redraw the table or not\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t * oTable.fnPageChange( 'next' );\n\t * } );\n\t */\n\tthis.fnPageChange = function ( mAction, bRedraw )\n\t{\n\t\tvar api = this.api( true ).page( mAction );\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw(false);\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Show a particular column\n\t * @param {int} iCol The column whose display should be changed\n\t * @param {bool} bShow Show (true) or hide (false) the column\n\t * @param {bool} [bRedraw=true] Redraw the table or not\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Hide the second column after initialisation\n\t * oTable.fnSetColumnVis( 1, false );\n\t * } );\n\t */\n\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t{\n\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.columns.adjust().draw();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the settings for a particular table for external manipulation\n\t * @returns {object} DataTables settings object. See\n\t * {@link DataTable.models.oSettings}\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t * var oSettings = oTable.fnSettings();\n\t *\n\t * // Show an example parameter from the settings\n\t * alert( oSettings._iDisplayStart );\n\t * } );\n\t */\n\tthis.fnSettings = function()\n\t{\n\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t};\n\t\n\t\n\t/**\n\t * Sort the table by a particular column\n\t * @param {int} iCol the data index to sort on. Note that this will not match the\n\t * 'display index' if you have hidden data entries\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Sort immediately with columns 0 and 1\n\t * oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t * } );\n\t */\n\tthis.fnSort = function( aaSort )\n\t{\n\t\tthis.api( true ).order( aaSort ).draw();\n\t};\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t * @param {node} nNode the element to attach the sort listener to\n\t * @param {int} iColumn the column that a click on this node will sort on\n\t * @param {function} [fnCallback] callback function when sort is run\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t *\n\t * // Sort on column 1, when 'sorter' is clicked on\n\t * oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t * } );\n\t */\n\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t{\n\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t};\n\t\n\t\n\t/**\n\t * Update a table cell or row - this method will accept either a single value to\n\t * update the cell with, an array of values with one element for each column or\n\t * an object in the same format as the original data source. The function is\n\t * self-referencing in order to make the multi column updates easier.\n\t * @param {object|array|string} mData Data to update the cell/row with\n\t * @param {node|int} mRow TR element you want to update or the aoData index\n\t * @param {int} [iColumn] The column to update, give as null or undefined to\n\t * update a whole row.\n\t * @param {bool} [bRedraw=true] Redraw the table or not\n\t * @param {bool} [bAction=true] Perform pre-draw actions or not\n\t * @returns {int} 0 on success, 1 on error\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t * oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t * oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t * } );\n\t */\n\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\tapi.row( mRow ).data( mData );\n\t\t}\n\t\telse {\n\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t}\n\t\n\t\tif ( bAction === undefined || bAction ) {\n\t\t\tapi.columns.adjust();\n\t\t}\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\treturn 0;\n\t};\n\t\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t * to ensure compatibility.\n\t * @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t * formats \"X\" and \"X.Y\" are also acceptable.\n\t * @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t * version, or false if this version of DataTales is not suitable\n\t * @method\n\t * @dtopt API\n\t * @deprecated Since v1.10\n\t *\n\t * @example\n\t * $(document).ready(function() {\n\t * var oTable = $('#example').dataTable();\n\t * alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t * } );\n\t */\n\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\n\n\tvar _that = this;\n\tvar emptyInit = options === undefined;\n\tvar len = this.length;\n\n\tif ( emptyInit ) {\n\t\toptions = {};\n\t}\n\n\tthis.oApi = this.internal = _ext.internal;\n\n\t// Extend with old style plug-in API methods\n\tfor ( var fn in DataTable.ext.internal ) {\n\t\tif ( fn ) {\n\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t}\n\t}\n\n\tthis.each(function() {\n\t\t// For each initialisation we want to give it a clean initialisation\n\t\t// object that can be bashed around\n\t\tvar o = {};\n\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t_fnExtend( o, options, true ) :\n\t\t\toptions;\n\n\t\t/*global oInit,_that,emptyInit*/\n\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\tvar sId = this.getAttribute( 'id' );\n\t\tvar bInitHandedOff = false;\n\t\tvar defaults = DataTable.defaults;\n\t\tvar $this = $(this);\n\t\t\n\t\t\n\t\t/* Sanity check */\n\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t{\n\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t/* Backwards compatibility for the defaults */\n\t\t_fnCompatOpts( defaults );\n\t\t_fnCompatCols( defaults.column );\n\t\t\n\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\n\t\t/* Setting up the initialisation object */\n\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );\n\t\t\n\t\t\n\t\t\n\t\t/* Check to see if we are re-initialising a table */\n\t\tvar allSettings = DataTable.settings;\n\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar s = allSettings[i];\n\t\t\n\t\t\t/* Base check on table node */\n\t\t\tif (\n\t\t\t\ts.nTable == this ||\n\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t) {\n\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\n\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t{\n\t\t\t\t\treturn s.oInstance;\n\t\t\t\t}\n\t\t\t\telse if ( bDestroy )\n\t\t\t\t{\n\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t */\n\t\t\tif ( s.sTableId == this.id )\n\t\t\t{\n\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* Ensure the table has an ID - required for accessibility */\n\t\tif ( sId === null || sId === \"\" )\n\t\t{\n\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\tthis.id = sId;\n\t\t}\n\t\t\n\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\"sInstance\": sId,\n\t\t\t\"sTableId\": sId\n\t\t} );\n\t\toSettings.nTable = this;\n\t\toSettings.oApi = _that.internal;\n\t\toSettings.oInit = oInit;\n\t\t\n\t\tallSettings.push( oSettings );\n\t\t\n\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\n\t\t// Backwards compatibility, before we apply all the defaults\n\t\t_fnCompatOpts( oInit );\n\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\n\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t{\n\t\t\toInit.iDisplayLength = Array.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t}\n\t\t\n\t\t// Apply the defaults and init options to make a single init object will all\n\t\t// options defined from defaults and instance options.\n\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\n\t\t\n\t\t// Map the initialisation options onto the settings object\n\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\"bPaginate\",\n\t\t\t\"bLengthChange\",\n\t\t\t\"bFilter\",\n\t\t\t\"bSort\",\n\t\t\t\"bSortMulti\",\n\t\t\t\"bInfo\",\n\t\t\t\"bProcessing\",\n\t\t\t\"bAutoWidth\",\n\t\t\t\"bSortClasses\",\n\t\t\t\"bServerSide\",\n\t\t\t\"bDeferRender\"\n\t\t] );\n\t\t_fnMap( oSettings, oInit, [\n\t\t\t\"asStripeClasses\",\n\t\t\t\"ajax\",\n\t\t\t\"fnServerData\",\n\t\t\t\"fnFormatNumber\",\n\t\t\t\"sServerMethod\",\n\t\t\t\"aaSorting\",\n\t\t\t\"aaSortingFixed\",\n\t\t\t\"aLengthMenu\",\n\t\t\t\"sPaginationType\",\n\t\t\t\"sAjaxSource\",\n\t\t\t\"sAjaxDataProp\",\n\t\t\t\"iStateDuration\",\n\t\t\t\"sDom\",\n\t\t\t\"bSortCellsTop\",\n\t\t\t\"iTabIndex\",\n\t\t\t\"fnStateLoadCallback\",\n\t\t\t\"fnStateSaveCallback\",\n\t\t\t\"renderer\",\n\t\t\t\"searchDelay\",\n\t\t\t\"rowId\",\n\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t] );\n\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t] );\n\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\n\t\t/* Callback functions which are array driven */\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', oInit.fnDrawCallback, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoServerParams', oInit.fnServerParams, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams', oInit.fnStateSaveParams, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams', oInit.fnStateLoadParams, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateLoaded', oInit.fnStateLoaded, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoRowCallback', oInit.fnRowCallback, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback', oInit.fnHeaderCallback, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoFooterCallback', oInit.fnFooterCallback, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user' );\n\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user' );\n\t\t\n\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\n\t\t/* Browser support detection */\n\t\t_fnBrowserDetect( oSettings );\n\t\t\n\t\tvar oClasses = oSettings.oClasses;\n\t\t\n\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t$this.addClass( oClasses.sTable );\n\t\t\n\t\t\n\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t{\n\t\t\t/* Display start point, taking into account the save saving */\n\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t}\n\t\t\n\t\tif ( oInit.iDeferLoading !== null )\n\t\t{\n\t\t\toSettings.bDeferLoading = true;\n\t\t\tvar tmp = Array.isArray( oInit.iDeferLoading );\n\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t}\n\t\t\n\t\t/* Language definitions */\n\t\tvar oLanguage = oSettings.oLanguage;\n\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\n\t\tif ( oLanguage.sUrl )\n\t\t{\n\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t */\n\t\t\t$.ajax( {\n\t\t\t\tdataType: 'json',\n\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\n\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t},\n\t\t\t\terror: function () {\n\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tbInitHandedOff = true;\n\t\t}\n\t\telse {\n\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t}\n\t\t\n\t\t/*\n\t\t * Stripes\n\t\t */\n\t\tif ( oInit.asStripeClasses === null )\n\t\t{\n\t\t\toSettings.asStripeClasses =[\n\t\t\t\toClasses.sStripeOdd,\n\t\t\t\toClasses.sStripeEven\n\t\t\t];\n\t\t}\n\t\t\n\t\t/* Remove row stripe classes if they are already on the table row */\n\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\treturn rowOne.hasClass(el);\n\t\t} ) ) !== -1 ) {\n\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t}\n\t\t\n\t\t/*\n\t\t * Columns\n\t\t * See if we should load columns automatically or use defined ones\n\t\t */\n\t\tvar anThs = [];\n\t\tvar aoColumnsInit;\n\t\tvar nThead = this.getElementsByTagName('thead');\n\t\tif ( nThead.length !== 0 )\n\t\t{\n\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t}\n\t\t\n\t\t/* If not given a column array, generate one with nulls */\n\t\tif ( oInit.aoColumns === null )\n\t\t{\n\t\t\taoColumnsInit = [];\n\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taoColumnsInit.push( null );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t}\n\t\t\n\t\t/* Add the columns */\n\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t{\n\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t}\n\t\t\n\t\t/* Apply the column definitions */\n\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t} );\n\t\t\n\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t * attributes are found\n\t\t */\n\t\tif ( rowOne.length ) {\n\t\t\tvar a = function ( cell, name ) {\n\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t};\n\t\t\n\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\n\t\t\t\tif (! col) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\t\n\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\n\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t_: i+'.display',\n\t\t\t\t\t\t\tsort: sort !== null ? i+'.@data-'+sort : undefined,\n\t\t\t\t\t\t\ttype: sort !== null ? i+'.@data-'+sort : undefined,\n\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcol._isArrayHost = true;\n\t\t\n\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\t\n\t\tvar features = oSettings.oFeatures;\n\t\tvar loadedInit = function () {\n\t\t\t/*\n\t\t\t * Sorting\n\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t */\n\t\t\n\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t */\n\t\t\t_fnSortingClasses( oSettings );\n\t\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\n\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t}\n\t\t\t}, 'sc' );\n\t\t\n\t\t\n\t\t\t/*\n\t\t\t * Final init\n\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t */\n\t\t\n\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\tthis._captionSide = $(this).css('caption-side');\n\t\t\t} );\n\t\t\n\t\t\tvar thead = $this.children('thead');\n\t\t\tif ( thead.length === 0 ) {\n\t\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t\t}\n\t\t\toSettings.nTHead = thead[0];\n\t\t\n\t\t\tvar tbody = $this.children('tbody');\n\t\t\tif ( tbody.length === 0 ) {\n\t\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t\t}\n\t\t\toSettings.nTBody = tbody[0];\n\t\t\n\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") ) {\n\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t\t}\n\t\t\n\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t}\n\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t}\n\t\t\n\t\t\t/* Check if there is data passing into the constructor */\n\t\t\tif ( oInit.aaData ) {\n\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ ) {\n\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {\n\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t * to replace it with Ajax data\n\t\t\t\t */\n\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t}\n\t\t\n\t\t\t/* Copy the data index array */\n\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\n\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\toSettings.bInitialised = true;\n\t\t\n\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t * language processor)\n\t\t\t */\n\t\t\tif ( bInitHandedOff === false ) {\n\t\t\t\t_fnInitialise( oSettings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\n\t\tif ( oInit.bStateSave )\n\t\t{\n\t\t\tfeatures.bStateSave = true;\n\t\t\t_fnLoadState( oSettings, oInit, loadedInit );\n\t\t}\n\t\telse {\n\t\t\tloadedInit();\n\t\t}\n\t\t\n\t} );\n\t_that = null;\n\treturn this;\n};\n\n\n/*\n * It is useful to have variables which are scoped locally so only the\n * DataTables functions can access them and they don't leak into global space.\n * At the same time these functions are often useful over multiple files in the\n * core and API, so we list, or at least document, all variables which are used\n * by DataTables as private variables here. This also ensures that there is no\n * clashing of variable names and that they can easily referenced for reuse.\n */\n\n\n// Defined else where\n// _selector_run\n// _selector_opts\n// _selector_first\n// _selector_row_indexes\n\nvar _ext; // DataTable.ext\nvar _Api; // DataTable.Api\nvar _api_register; // DataTable.Api.register\nvar _api_registerPlural; // DataTable.Api.registerPlural\n\nvar _re_dic = {};\nvar _re_new_lines = /[\\r\\n\\u2028]/g;\nvar _re_html = /<.*?>/g;\n\n// This is not strict ISO8601 - Date.parse() is quite lax, although\n// implementations differ between browsers.\nvar _re_date = /^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/;\n\n// Escape regular expression special characters\nvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\n// https://en.wikipedia.org/wiki/Foreign_exchange_market\n// - \\u20BD - Russian ruble.\n// - \\u20a9 - South Korean Won\n// - \\u20BA - Turkish Lira\n// - \\u20B9 - Indian Rupee\n// - R - Brazil (R$) and South Africa\n// - fr - Swiss Franc\n// - kr - Swedish krona, Norwegian krone and Danish krone\n// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n// - Ƀ - Bitcoin\n// - Ξ - Ethereum\n// standards as thousands separators.\nvar _re_formatted_numeric = /['\\u00A0,$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfkɃΞ]/gi;\n\n\nvar _empty = function ( d ) {\n\treturn !d || d === true || d === '-' ? true : false;\n};\n\n\nvar _intVal = function ( s ) {\n\tvar integer = parseInt( s, 10 );\n\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n};\n\n// Convert from a formatted number with characters other than `.` as the\n// decimal place, to a Javascript number\nvar _numToDecimal = function ( num, decimalPoint ) {\n\t// Cache created regular expressions for speed as this function is called often\n\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t}\n\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\tnum;\n};\n\n\nvar _isNumber = function ( d, decimalPoint, formatted ) {\n\tvar type = typeof d;\n\tvar strType = type === 'string';\n\n\tif ( type === 'number' || type === 'bigint') {\n\t\treturn true;\n\t}\n\n\t// If empty return immediately so there must be a number if it is a\n\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t// as a formatted number for currency\n\tif ( _empty( d ) ) {\n\t\treturn true;\n\t}\n\n\tif ( decimalPoint && strType ) {\n\t\td = _numToDecimal( d, decimalPoint );\n\t}\n\n\tif ( formatted && strType ) {\n\t\td = d.replace( _re_formatted_numeric, '' );\n\t}\n\n\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n};\n\n\n// A string without HTML in it can be considered to be HTML still\nvar _isHtml = function ( d ) {\n\treturn _empty( d ) || typeof d === 'string';\n};\n\n\nvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\tif ( _empty( d ) ) {\n\t\treturn true;\n\t}\n\n\tvar html = _isHtml( d );\n\treturn ! html ?\n\t\tnull :\n\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\ttrue :\n\t\t\tnull;\n};\n\n\nvar _pluck = function ( a, prop, prop2 ) {\n\tvar out = [];\n\tvar i=0, ien=a.length;\n\n\t// Could have the test in the loop for slightly smaller code, but speed\n\t// is essential here\n\tif ( prop2 !== undefined ) {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) {\n\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\n// Basically the same as _pluck, but rather than looping over `a` we use `order`\n// as the indexes to pick from `a`\nvar _pluck_order = function ( a, order, prop, prop2 )\n{\n\tvar out = [];\n\tvar i=0, ien=order.length;\n\n\t// Could have the test in the loop for slightly smaller code, but speed\n\t// is essential here\n\tif ( prop2 !== undefined ) {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\nvar _range = function ( len, start )\n{\n\tvar out = [];\n\tvar end;\n\n\tif ( start === undefined ) {\n\t\tstart = 0;\n\t\tend = len;\n\t}\n\telse {\n\t\tend = start;\n\t\tstart = len;\n\t}\n\n\tfor ( var i=start ; i<end ; i++ ) {\n\t\tout.push( i );\n\t}\n\n\treturn out;\n};\n\n\nvar _removeEmpty = function ( a )\n{\n\tvar out = [];\n\n\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\tout.push( a[i] );\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\nvar _stripHtml = function ( d ) {\n\treturn d\n\t\t.replace( _re_html, '' ) // Complete tags\n\t\t.replace(/<script/i, ''); // Safety for incomplete script tag\n};\n\n\n/**\n * Determine if all values in the array are unique. This means we can short\n * cut the _unique method at the cost of a single loop. A sorted array is used\n * to easily check the values.\n *\n * @param {array} src Source array\n * @return {boolean} true if all unique, false otherwise\n * @ignore\n */\nvar _areAllUnique = function ( src ) {\n\tif ( src.length < 2 ) {\n\t\treturn true;\n\t}\n\n\tvar sorted = src.slice().sort();\n\tvar last = sorted[0];\n\n\tfor ( var i=1, ien=sorted.length ; i<ien ; i++ ) {\n\t\tif ( sorted[i] === last ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlast = sorted[i];\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Find the unique elements in a source array.\n *\n * @param {array} src Source array\n * @return {array} Array of unique items\n * @ignore\n */\nvar _unique = function ( src )\n{\n\tif ( _areAllUnique( src ) ) {\n\t\treturn src.slice();\n\t}\n\n\t// A faster unique method is to use object keys to identify used values,\n\t// but this doesn't work with arrays or objects, which we must also\n\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t// information.\n\tvar\n\t\tout = [],\n\t\tval,\n\t\ti, ien=src.length,\n\t\tj, k=0;\n\n\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\tval = src[i];\n\n\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\tif ( out[j] === val ) {\n\t\t\t\tcontinue again;\n\t\t\t}\n\t\t}\n\n\t\tout.push( val );\n\t\tk++;\n\t}\n\n\treturn out;\n};\n\n// Surprisingly this is faster than [].concat.apply\n// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\nvar _flatten = function (out, val) {\n\tif (Array.isArray(val)) {\n\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t_flatten(out, val[i]);\n\t\t}\n\t}\n\telse {\n\t\tout.push(val);\n\t}\n \n\treturn out;\n}\n\nvar _includes = function (search, start) {\n\tif (start === undefined) {\n\t\tstart = 0;\n\t}\n\n\treturn this.indexOf(search, start) !== -1;\t\n};\n\n// Array.isArray polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (! Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (! Array.prototype.includes) {\n\tArray.prototype.includes = _includes;\n}\n\n// .trim() polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim\nif (!String.prototype.trim) {\n String.prototype.trim = function () {\n return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n };\n}\n\nif (! String.prototype.includes) {\n\tString.prototype.includes = _includes;\n}\n\n/**\n * DataTables utility methods\n * \n * This namespace provides helper methods that DataTables uses internally to\n * create a DataTable, but which are not exclusively used only for DataTables.\n * These methods can be used by extension authors to save the duplication of\n * code.\n *\n * @namespace\n */\nDataTable.util = {\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained\n\t * for the throttled function.\n\t *\n\t * @param {function} fn Function to be called\n\t * @param {integer} freq Call frequency in mS\n\t * @return {function} Wrapped function\n\t */\n\tthrottle: function ( fn, freq ) {\n\t\tvar\n\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\tlast,\n\t\t\ttimer;\n\n\t\treturn function () {\n\t\t\tvar\n\t\t\t\tthat = this,\n\t\t\t\tnow = +new Date(),\n\t\t\t\targs = arguments;\n\n\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\tclearTimeout( timer );\n\n\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\tlast = undefined;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}, frequency );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlast = now;\n\t\t\t\tfn.apply( that, args );\n\t\t\t}\n\t\t};\n\t},\n\n\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *\n\t * @param {string} val string to escape\n\t * @returns {string} escaped string\n\t */\n\tescapeRegex: function ( val ) {\n\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t},\n\n\t/**\n\t * Create a function that will write to a nested object or array\n\t * @param {*} source JSON notation string\n\t * @returns Write function\n\t */\n\tset: function ( source ) {\n\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t * for `mRender` which is read only.\n\t\t\t */\n\t\t\treturn DataTable.util.set( source._ );\n\t\t}\n\t\telse if ( source === null ) {\n\t\t\t// Nothing to do when the data source is null\n\t\t\treturn function () {};\n\t\t}\n\t\telse if ( typeof source === 'function' ) {\n\t\t\treturn function (data, val, meta) {\n\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t{\n\t\t\t// Like the get, we need to get data from a nested object\n\t\t\tvar setData = function (data, val, src) {\n\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\n\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\n\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\n\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t}\n\t\n\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t// Function call\n\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\treturn setData( data, val, source );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Array or flat object mapping\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\tdata[source] = val;\n\t\t\t};\n\t\t}\n\t},\n\n\t/**\n\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t * @param {*} source JSON notation string\n\t * @returns Value read\n\t */\n\tget: function ( source ) {\n\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\tvar o = {};\n\t\t\t$.each( source, function (key, val) {\n\t\t\t\tif ( val ) {\n\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\tvar t = o[type] || o._;\n\t\t\t\treturn t !== undefined ?\n\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\tdata;\n\t\t\t};\n\t\t}\n\t\telse if ( source === null ) {\n\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\treturn data;\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'function' ) {\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\treturn source( data, type, row, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t * be used if defined, rather than throwing an error\n\t\t\t */\n\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\n\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\n\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tout = [];\n\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\n\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\n\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (data === null || data[ a[i] ] === null) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( data === undefined || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn data;\n\t\t\t};\n\t\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn fetchData( data, type, source );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Array or flat object mapping\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn data[source];\n\t\t\t};\n\t\t}\n\t}\n};\n\n\n\n/**\n * Create a mapping object that allows camel case parameters to be looked up\n * for their Hungarian counterparts. The mapping is stored in a private\n * parameter called `_hungarianMap` which can be accessed on the source object.\n * @param {object} o\n * @memberof DataTable#oApi\n */\nfunction _fnHungarianMap ( o )\n{\n\tvar\n\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\tmatch,\n\t\tnewKey,\n\t\tmap = {};\n\n\t$.each( o, function (key, val) {\n\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\n\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t{\n\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\tmap[ newKey ] = key;\n\n\t\t\tif ( match[1] === 'o' )\n\t\t\t{\n\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t}\n\t\t}\n\t} );\n\n\to._hungarianMap = map;\n}\n\n\n/**\n * Convert from camel case parameters to Hungarian, based on a Hungarian map\n * created by _fnHungarianMap.\n * @param {object} src The model object which holds all parameters that can be\n * mapped.\n * @param {object} user The object to convert from camel case to Hungarian.\n * @param {boolean} force When set to `true`, properties which already have a\n * Hungarian value in the `user` object will be overwritten. Otherwise they\n * won't be.\n * @memberof DataTable#oApi\n */\nfunction _fnCamelToHungarian ( src, user, force )\n{\n\tif ( ! src._hungarianMap ) {\n\t\t_fnHungarianMap( src );\n\t}\n\n\tvar hungarianKey;\n\n\t$.each( user, function (key, val) {\n\t\thungarianKey = src._hungarianMap[ key ];\n\n\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t{\n\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t{\n\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t}\n\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\n\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t}\n\t\t}\n\t} );\n}\n\n\n/**\n * Language compatibility - when certain options are given, and others aren't, we\n * need to duplicate the values over, in order to provide backwards compatibility\n * with older language files.\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnLanguageCompat( lang )\n{\n\t// Note the use of the Hungarian notation for the parameters in this method as\n\t// this is called after the mapping of camelCase to Hungarian\n\tvar defaults = DataTable.defaults.oLanguage;\n\n\t// Default mapping\n\tvar defaultDecimal = defaults.sDecimal;\n\tif ( defaultDecimal ) {\n\t\t_addNumericSort( defaultDecimal );\n\t}\n\n\tif ( lang ) {\n\t\tvar zeroRecords = lang.sZeroRecords;\n\n\t\t// Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t// sZeroRecords - assuming that is given.\n\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t}\n\n\t\t// Likewise with loading records\n\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t}\n\n\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\tif ( lang.sInfoThousands ) {\n\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t}\n\n\t\tvar decimal = lang.sDecimal;\n\t\tif ( decimal && defaultDecimal !== decimal ) {\n\t\t\t_addNumericSort( decimal );\n\t\t}\n\t}\n}\n\n\n/**\n * Map one parameter onto another\n * @param {object} o Object to map\n * @param {*} knew The new parameter name\n * @param {*} old The old parameter name\n */\nvar _fnCompatMap = function ( o, knew, old ) {\n\tif ( o[ knew ] !== undefined ) {\n\t\to[ old ] = o[ knew ];\n\t}\n};\n\n\n/**\n * Provide backwards compatibility for the main DT options. Note that the new\n * options are mapped onto the old parameters, so this is an external interface\n * change only.\n * @param {object} init Object to map\n */\nfunction _fnCompatOpts ( init )\n{\n\t_fnCompatMap( init, 'ordering', 'bSort' );\n\t_fnCompatMap( init, 'orderMulti', 'bSortMulti' );\n\t_fnCompatMap( init, 'orderClasses', 'bSortClasses' );\n\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t_fnCompatMap( init, 'order', 'aaSorting' );\n\t_fnCompatMap( init, 'orderFixed', 'aaSortingFixed' );\n\t_fnCompatMap( init, 'paging', 'bPaginate' );\n\t_fnCompatMap( init, 'pagingType', 'sPaginationType' );\n\t_fnCompatMap( init, 'pageLength', 'iDisplayLength' );\n\t_fnCompatMap( init, 'searching', 'bFilter' );\n\n\t// Boolean initialisation of x-scrolling\n\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t}\n\tif ( typeof init.scrollX === 'boolean' ) {\n\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t}\n\n\t// Column search objects are in an array, so it needs to be converted\n\t// element by element\n\tvar searchCols = init.aoSearchCols;\n\n\tif ( searchCols ) {\n\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\tif ( searchCols[i] ) {\n\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Provide backwards compatibility for column options. Note that the new options\n * are mapped onto the old parameters, so this is an external interface change\n * only.\n * @param {object} init Object to map\n */\nfunction _fnCompatCols ( init )\n{\n\t_fnCompatMap( init, 'orderable', 'bSortable' );\n\t_fnCompatMap( init, 'orderData', 'aDataSort' );\n\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\n\t// orderData can be given as an integer\n\tvar dataSort = init.aDataSort;\n\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\tinit.aDataSort = [ dataSort ];\n\t}\n}\n\n\n/**\n * Browser feature detection for capabilities, quirks\n * @param {object} settings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnBrowserDetect( settings )\n{\n\t// We don't need to do this every time DataTables is constructed, the values\n\t// calculated are specific to the browser and OS configuration which we\n\t// don't expect to change between initialisations\n\tif ( ! DataTable.__browser ) {\n\t\tvar browser = {};\n\t\tDataTable.__browser = browser;\n\n\t\t// Scrolling feature / quirks detection\n\t\tvar n = $('<div/>')\n\t\t\t.css( {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: $(window).scrollLeft()*-1, // allow for scrolling\n\t\t\t\theight: 1,\n\t\t\t\twidth: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.appendTo( 'body' );\n\n\t\tvar outer = n.children();\n\t\tvar inner = outer.children();\n\n\t\t// Numbers below, in order, are:\n\t\t// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth\n\t\t//\n\t\t// IE6 XP: 100 100 100 83\n\t\t// IE7 Vista: 100 100 100 83\n\t\t// IE 8+ Windows: 83 83 100 83\n\t\t// Evergreen Windows: 83 83 100 83\n\t\t// Evergreen Mac with scrollbars: 85 85 100 85\n\t\t// Evergreen Mac without scrollbars: 100 100 100 100\n\n\t\t// Get scrollbar width\n\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\n\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t// element is contained without forcing scrolling\n\t\tbrowser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;\n\n\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t// scrollbar on the left, rather than the right.\n\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\n\t\t// IE8- don't provide height and width for getBoundingClientRect\n\t\tbrowser.bBounding = n[0].getBoundingClientRect().width ? true : false;\n\n\t\tn.remove();\n\t}\n\n\t$.extend( settings.oBrowser, DataTable.__browser );\n\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n}\n\n\n/**\n * Array.prototype reduce[Right] method, used for browsers which don't support\n * JS 1.6. Done this way to reduce code size, since we iterate either way\n * @param {object} settings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnReduce ( that, fn, init, start, end, inc )\n{\n\tvar\n\t\ti = start,\n\t\tvalue,\n\t\tisSet = false;\n\n\tif ( init !== undefined ) {\n\t\tvalue = init;\n\t\tisSet = true;\n\t}\n\n\twhile ( i !== end ) {\n\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalue = isSet ?\n\t\t\tfn( value, that[i], i, that ) :\n\t\t\tthat[i];\n\n\t\tisSet = true;\n\t\ti += inc;\n\t}\n\n\treturn value;\n}\n\n/**\n * Add a column to the list used for the table with default values\n * @param {object} oSettings dataTables settings object\n * @param {node} nTh The th element for this column\n * @memberof DataTable#oApi\n */\nfunction _fnAddColumn( oSettings, nTh )\n{\n\t// Add column to aoColumns array\n\tvar oDefaults = DataTable.defaults.column;\n\tvar iCol = oSettings.aoColumns.length;\n\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\"sTitle\": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '',\n\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\tidx: iCol\n\t} );\n\toSettings.aoColumns.push( oCol );\n\n\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t// passed into extend can be undefined. This allows the user to give a default\n\t// with only some of the parameters defined, and also not give a default\n\tvar searchCols = oSettings.aoPreSearchCols;\n\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\n\t// Use the default column options function to initialise classes etc\n\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n}\n\n\n/**\n * Apply options for a column\n * @param {object} oSettings dataTables settings object\n * @param {int} iCol column index to consider\n * @param {object} oOptions object with sType, bVisible and bSearchable etc\n * @memberof DataTable#oApi\n */\nfunction _fnColumnOptions( oSettings, iCol, oOptions )\n{\n\tvar oCol = oSettings.aoColumns[ iCol ];\n\tvar oClasses = oSettings.oClasses;\n\tvar th = $(oCol.nTh);\n\n\t// Try to get width information from the DOM. We can't get it from CSS\n\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\tif ( ! oCol.sWidthOrig ) {\n\t\t// Width attribute\n\t\toCol.sWidthOrig = th.attr('width') || null;\n\n\t\t// Style attribute\n\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\tif ( t ) {\n\t\t\toCol.sWidthOrig = t[1];\n\t\t}\n\t}\n\n\t/* User specified column options */\n\tif ( oOptions !== undefined && oOptions !== null )\n\t{\n\t\t// Backwards compatibility\n\t\t_fnCompatCols( oOptions );\n\n\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\n\t\t/* Backwards compatibility for mDataProp */\n\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t{\n\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t}\n\n\t\tif ( oOptions.sType )\n\t\t{\n\t\t\toCol._sManualType = oOptions.sType;\n\t\t}\n\n\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t// the ability to use a valid name for the camel case input\n\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t{\n\t\t\toOptions.sClass = oOptions.className;\n\t\t}\n\t\tif ( oOptions.sClass ) {\n\t\t\tth.addClass( oOptions.sClass );\n\t\t}\n\n\t\tvar origClass = oCol.sClass;\n\n\t\t$.extend( oCol, oOptions );\n\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\n\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t// overwriting it in the extend above\n\t\tif (origClass !== oCol.sClass) {\n\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t}\n\n\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t * priority if defined\n\t\t */\n\t\tif ( oOptions.iDataSort !== undefined )\n\t\t{\n\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t}\n\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\n\t\t// Fall back to the aria-label attribute on the table header if no ariaTitle is\n\t\t// provided.\n\t\tif (! oCol.ariaTitle) {\n\t\t\toCol.ariaTitle = th.attr(\"aria-label\");\n\t\t}\n\t}\n\n\t/* Cache the data get and set functions for speed */\n\tvar mDataSrc = oCol.mData;\n\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\n\tvar attrTest = function( src ) {\n\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t};\n\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t);\n\toCol._setter = null;\n\n\toCol.fnGetData = function (rowData, type, meta) {\n\t\tvar innerData = mData( rowData, type, undefined, meta );\n\n\t\treturn mRender && type ?\n\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\tinnerData;\n\t};\n\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t};\n\n\t// Indicate if DataTables should read DOM data as an object or array\n\t// Used in _fnGetRowElements\n\tif ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {\n\t\toSettings._rowReadObject = true;\n\t}\n\n\t/* Feature sorting overrides column specific when off */\n\tif ( !oSettings.oFeatures.bSort )\n\t{\n\t\toCol.bSortable = false;\n\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t}\n\n\t/* Check that the class assignment is correct for sorting */\n\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\toCol.sSortingClassJUI = \"\";\n\t}\n\telse if ( bAsc && !bDesc )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t}\n\telse if ( !bAsc && bDesc )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t}\n\telse\n\t{\n\t\toCol.sSortingClass = oClasses.sSortable;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t}\n}\n\n\n/**\n * Adjust the table column widths for new data. Note: you would probably want to\n * do a redraw after calling this function!\n * @param {object} settings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnAdjustColumnSizing ( settings )\n{\n\t/* Not interested in doing column width calculation if auto-width is disabled */\n\tif ( settings.oFeatures.bAutoWidth !== false )\n\t{\n\t\tvar columns = settings.aoColumns;\n\n\t\t_fnCalculateColumnWidths( settings );\n\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t}\n\t}\n\n\tvar scroll = settings.oScroll;\n\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t{\n\t\t_fnScrollDraw( settings );\n\t}\n\n\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n}\n\n\n/**\n * Convert the index of a visible column to the index in the data array (take account\n * of hidden columns)\n * @param {object} oSettings dataTables settings object\n * @param {int} iMatch Visible column index to lookup\n * @returns {int} i the data index\n * @memberof DataTable#oApi\n */\nfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n{\n\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\n\treturn typeof aiVis[iMatch] === 'number' ?\n\t\taiVis[iMatch] :\n\t\tnull;\n}\n\n\n/**\n * Convert the index of an index in the data array and convert it to the visible\n * column index (take account of hidden columns)\n * @param {int} iMatch Column index to lookup\n * @param {object} oSettings dataTables settings object\n * @returns {int} i the data index\n * @memberof DataTable#oApi\n */\nfunction _fnColumnIndexToVisible( oSettings, iMatch )\n{\n\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\tvar iPos = $.inArray( iMatch, aiVis );\n\n\treturn iPos !== -1 ? iPos : null;\n}\n\n\n/**\n * Get the number of visible columns\n * @param {object} oSettings dataTables settings object\n * @returns {int} i the number of visible columns\n * @memberof DataTable#oApi\n */\nfunction _fnVisbleColumns( oSettings )\n{\n\tvar vis = 0;\n\n\t// No reduce in IE8, use a loop for now\n\t$.each( oSettings.aoColumns, function ( i, col ) {\n\t\tif ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {\n\t\t\tvis++;\n\t\t}\n\t} );\n\n\treturn vis;\n}\n\n\n/**\n * Get an array of column indexes that match a given property\n * @param {object} oSettings dataTables settings object\n * @param {string} sParam Parameter in aoColumns to look for - typically\n * bVisible or bSearchable\n * @returns {array} Array of indexes with matched properties\n * @memberof DataTable#oApi\n */\nfunction _fnGetColumns( oSettings, sParam )\n{\n\tvar a = [];\n\n\t$.map( oSettings.aoColumns, function(val, i) {\n\t\tif ( val[sParam] ) {\n\t\t\ta.push( i );\n\t\t}\n\t} );\n\n\treturn a;\n}\n\n\n/**\n * Calculate the 'type' of a column\n * @param {object} settings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnColumnTypes ( settings )\n{\n\tvar columns = settings.aoColumns;\n\tvar data = settings.aoData;\n\tvar types = DataTable.ext.type.detect;\n\tvar i, ien, j, jen, k, ken;\n\tvar col, cell, detectedType, cache;\n\n\t// For each column, spin over the \n\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\tcol = columns[i];\n\t\tcache = [];\n\n\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\tcol.sType = col._sManualType;\n\t\t}\n\t\telse if ( ! col.sType ) {\n\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t}\n\n\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\n\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t// types\n\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t// must not be empty\n\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t// type\n\t\t\t\tif ( detectedType ) {\n\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fall back - if no type was detected, always use string\n\t\t\tif ( ! col.sType ) {\n\t\t\t\tcol.sType = 'string';\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Take the column definitions and static columns arrays and calculate how\n * they relate to column indexes. The callback function will then apply the\n * definition found for a column to a suitable configuration object.\n * @param {object} oSettings dataTables settings object\n * @param {array} aoColDefs The aoColumnDefs array that is to be applied\n * @param {array} aoCols The aoColumns array that defines columns individually\n * @param {function} fn Callback function - takes two parameters, the calculated\n * column index and the definition for that column.\n * @memberof DataTable#oApi\n */\nfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n{\n\tvar i, iLen, j, jLen, k, kLen, def;\n\tvar columns = oSettings.aoColumns;\n\n\t// Column definitions with aTargets\n\tif ( aoColDefs )\n\t{\n\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t{\n\t\t\tdef = aoColDefs[i];\n\n\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t? def.target\n\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t? def.targets\n\t\t\t\t\t: def.aTargets;\n\n\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t{\n\t\t\t\taTargets = [ aTargets ];\n\t\t\t}\n\n\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t}\n\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t}\n\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t{\n\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfn( k, def );\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\t}\n\n\t// Statically defined columns array\n\tif ( aoCols )\n\t{\n\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfn( i, aoCols[i] );\n\t\t}\n\t}\n}\n\n/**\n * Add a data array to the table, creating DOM node etc. This is the parallel to\n * _fnGatherData, but for adding rows from a Javascript source, rather than a\n * DOM source.\n * @param {object} oSettings dataTables settings object\n * @param {array} aData data array to be added\n * @param {node} [nTr] TR element to add to the table - optional. If not given,\n * DataTables will create a row automatically\n * @param {array} [anTds] Array of TD|TH elements for the row - must be given\n * if nTr is.\n * @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n * @memberof DataTable#oApi\n */\nfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n{\n\t/* Create the object for storing information about this new row */\n\tvar iRow = oSettings.aoData.length;\n\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\tsrc: nTr ? 'dom' : 'data',\n\t\tidx: iRow\n\t} );\n\n\toData._aData = aDataIn;\n\toSettings.aoData.push( oData );\n\n\t/* Create the cells */\n\tvar nTd, sThisType;\n\tvar columns = oSettings.aoColumns;\n\n\t// Invalidate the column types as the new data needs to be revalidated\n\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t{\n\t\tcolumns[i].sType = null;\n\t}\n\n\t/* Add to the display array */\n\toSettings.aiDisplayMaster.push( iRow );\n\n\tvar id = oSettings.rowIdFn( aDataIn );\n\tif ( id !== undefined ) {\n\t\toSettings.aIds[ id ] = oData;\n\t}\n\n\t/* Create the DOM information, or register it if already present */\n\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t{\n\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t}\n\n\treturn iRow;\n}\n\n\n/**\n * Add one or more TR elements to the table. Generally we'd expect to\n * use this for reading data from a DOM sourced table, but it could be\n * used for an TR element. Note that if a TR is given, it is used (i.e.\n * it is not cloned).\n * @param {object} settings dataTables settings object\n * @param {array|node|jQuery} trs The TR element(s) to add to the table\n * @returns {array} Array of indexes for the added rows\n * @memberof DataTable#oApi\n */\nfunction _fnAddTr( settings, trs )\n{\n\tvar row;\n\n\t// Allow an individual node to be passed in\n\tif ( ! (trs instanceof $) ) {\n\t\ttrs = $(trs);\n\t}\n\n\treturn trs.map( function (i, el) {\n\t\trow = _fnGetRowElements( settings, el );\n\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t} );\n}\n\n\n/**\n * Take a TR element and convert it to an index in aoData\n * @param {object} oSettings dataTables settings object\n * @param {node} n the TR element to find\n * @returns {int} index if the node is found, null if not\n * @memberof DataTable#oApi\n */\nfunction _fnNodeToDataIndex( oSettings, n )\n{\n\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n}\n\n\n/**\n * Take a TD element and convert it into a column data index (not the visible index)\n * @param {object} oSettings dataTables settings object\n * @param {int} iRow The row number the TD/TH can be found in\n * @param {node} n The TD/TH element to find\n * @returns {int} index if the node is found, -1 if not\n * @memberof DataTable#oApi\n */\nfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n{\n\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n}\n\n\n/**\n * Get the data for a given cell from the internal cache, taking into account data mapping\n * @param {object} settings dataTables settings object\n * @param {int} rowIdx aoData row id\n * @param {int} colIdx Column index\n * @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n * @returns {*} Cell data\n * @memberof DataTable#oApi\n */\nfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n{\n\tif (type === 'search') {\n\t\ttype = 'filter';\n\t}\n\telse if (type === 'order') {\n\t\ttype = 'sort';\n\t}\n\n\tvar draw = settings.iDraw;\n\tvar col = settings.aoColumns[colIdx];\n\tvar rowData = settings.aoData[rowIdx]._aData;\n\tvar defaultContent = col.sDefaultContent;\n\tvar cellData = col.fnGetData( rowData, type, {\n\t\tsettings: settings,\n\t\trow: rowIdx,\n\t\tcol: colIdx\n\t} );\n\n\tif ( cellData === undefined ) {\n\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\tsettings.iDrawError = draw;\n\t\t}\n\t\treturn defaultContent;\n\t}\n\n\t// When the data source is null and a specific data type is requested (i.e.\n\t// not the original data), we can use default column data\n\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\tcellData = defaultContent;\n\t}\n\telse if ( typeof cellData === 'function' ) {\n\t\t// If the data source is a function, then we run it and use the return,\n\t\t// executing in the scope of the data object (for instances)\n\t\treturn cellData.call( rowData );\n\t}\n\n\tif ( cellData === null && type === 'display' ) {\n\t\treturn '';\n\t}\n\n\tif ( type === 'filter' ) {\n\t\tvar fomatters = DataTable.ext.type.search;\n\n\t\tif ( fomatters[ col.sType ] ) {\n\t\t\tcellData = fomatters[ col.sType ]( cellData );\n\t\t}\n\t}\n\n\treturn cellData;\n}\n\n\n/**\n * Set the value for a specific cell, into the internal data cache\n * @param {object} settings dataTables settings object\n * @param {int} rowIdx aoData row id\n * @param {int} colIdx Column index\n * @param {*} val Value to set\n * @memberof DataTable#oApi\n */\nfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n{\n\tvar col = settings.aoColumns[colIdx];\n\tvar rowData = settings.aoData[rowIdx]._aData;\n\n\tcol.fnSetData( rowData, val, {\n\t\tsettings: settings,\n\t\trow: rowIdx,\n\t\tcol: colIdx\n\t} );\n}\n\n\n// Private variable that is used to match action syntax in the data property object\nvar __reArray = /\\[.*?\\]$/;\nvar __reFn = /\\(\\)$/;\n\n/**\n * Split string on periods, taking into account escaped periods\n * @param {string} str String to split\n * @return {array} Split string\n */\nfunction _fnSplitObjNotation( str )\n{\n\treturn $.map( str.match(/(\\\\.|[^\\.])+/g) || [''], function ( s ) {\n\t\treturn s.replace(/\\\\\\./g, '.');\n\t} );\n}\n\n\n/**\n * Return a function that can be used to get data from a source object, taking\n * into account the ability to use nested objects as a source\n * @param {string|int|function} mSource The data source for the object\n * @returns {function} Data get function\n * @memberof DataTable#oApi\n */\nvar _fnGetObjectDataFn = DataTable.util.get;\n\n\n/**\n * Return a function that can be used to set data from a source object, taking\n * into account the ability to use nested objects as a source\n * @param {string|int|function} mSource The data source for the object\n * @returns {function} Data set function\n * @memberof DataTable#oApi\n */\nvar _fnSetObjectDataFn = DataTable.util.set;\n\n\n/**\n * Return an array with the full table data\n * @param {object} oSettings dataTables settings object\n * @returns array {array} aData Master data array\n * @memberof DataTable#oApi\n */\nfunction _fnGetDataMaster ( settings )\n{\n\treturn _pluck( settings.aoData, '_aData' );\n}\n\n\n/**\n * Nuke the table\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnClearTable( settings )\n{\n\tsettings.aoData.length = 0;\n\tsettings.aiDisplayMaster.length = 0;\n\tsettings.aiDisplay.length = 0;\n\tsettings.aIds = {};\n}\n\n\n /**\n * Take an array of integers (index array) and remove a target integer (value - not\n * the key!)\n * @param {array} a Index array to target\n * @param {int} iTarget value to find\n * @memberof DataTable#oApi\n */\nfunction _fnDeleteIndex( a, iTarget, splice )\n{\n\tvar iTargetIndex = -1;\n\n\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t{\n\t\tif ( a[i] == iTarget )\n\t\t{\n\t\t\tiTargetIndex = i;\n\t\t}\n\t\telse if ( a[i] > iTarget )\n\t\t{\n\t\t\ta[i]--;\n\t\t}\n\t}\n\n\tif ( iTargetIndex != -1 && splice === undefined )\n\t{\n\t\ta.splice( iTargetIndex, 1 );\n\t}\n}\n\n\n/**\n * Mark cached data as invalid such that a re-read of the data will occur when\n * the cached data is next requested. Also update from the data source object.\n *\n * @param {object} settings DataTables settings object\n * @param {int} rowIdx Row index to invalidate\n * @param {string} [src] Source to invalidate from: undefined, 'auto', 'dom'\n * or 'data'\n * @param {int} [colIdx] Column index to invalidate. If undefined the whole\n * row will be invalidated\n * @memberof DataTable#oApi\n *\n * @todo For the modularisation of v1.11 this will need to become a callback, so\n * the sort and filter methods can subscribe to it. That will required\n * initialisation options for sorting, which is why it is not already baked in\n */\nfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n{\n\tvar row = settings.aoData[ rowIdx ];\n\tvar i, ien;\n\tvar cellWrite = function ( cell, col ) {\n\t\t// This is very frustrating, but in IE if you just write directly\n\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t// even if there is a reference to them elsewhere\n\t\twhile ( cell.childNodes.length ) {\n\t\t\tcell.removeChild( cell.firstChild );\n\t\t}\n\n\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t};\n\n\t// Are we reading last data from DOM or the data object?\n\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t// Read the data from the DOM\n\t\trow._aData = _fnGetRowElements(\n\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t)\n\t\t\t.data;\n\t}\n\telse {\n\t\t// Reading from data object, update the DOM\n\t\tvar cells = row.anCells;\n\n\t\tif ( cells ) {\n\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// For both row and cell invalidation, the cached data for sorting and\n\t// filtering is nulled out\n\trow._aSortData = null;\n\trow._aFilterData = null;\n\n\t// Invalidate the type for a specific column (if given) or all columns since\n\t// the data might have changed\n\tvar cols = settings.aoColumns;\n\tif ( colIdx !== undefined ) {\n\t\tcols[ colIdx ].sType = null;\n\t}\n\telse {\n\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\tcols[i].sType = null;\n\t\t}\n\n\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t_fnRowAttributes( settings, row );\n\t}\n}\n\n\n/**\n * Build a data source object from an HTML row, reading the contents of the\n * cells that are in the row.\n *\n * @param {object} settings DataTables settings object\n * @param {node|object} TR element from which to read data or existing row\n * object from which to re-read the data from the cells\n * @param {int} [colIdx] Optional column index\n * @param {array|object} [d] Data source object. If `colIdx` is given then this\n * parameter should also be given and will be used to write the data into.\n * Only the column in question will be written\n * @returns {object} Object with two parameters: `data` the data read, in\n * document order, and `cells` and array of nodes (they can be useful to the\n * caller, so rather than needing a second traversal to get them, just return\n * them from here).\n * @memberof DataTable#oApi\n */\nfunction _fnGetRowElements( settings, row, colIdx, d )\n{\n\tvar\n\t\ttds = [],\n\t\ttd = row.firstChild,\n\t\tname, col, o, i=0, contents,\n\t\tcolumns = settings.aoColumns,\n\t\tobjectRead = settings._rowReadObject;\n\n\t// Allow the data object to be passed in, or construct\n\td = d !== undefined ?\n\t\td :\n\t\tobjectRead ?\n\t\t\t{} :\n\t\t\t[];\n\n\tvar attr = function ( str, td ) {\n\t\tif ( typeof str === 'string' ) {\n\t\t\tvar idx = str.indexOf('@');\n\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t}\n\t\t}\n\t};\n\n\t// Read data from a cell and store into the data object\n\tvar cellProcess = function ( cell ) {\n\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\tcol = columns[i];\n\t\t\tcontents = (cell.innerHTML).trim();\n\n\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\tsetter( d, contents );\n\n\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t// be read to either an object or an array.\n\t\t\t\tif ( objectRead ) {\n\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t}\n\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td[i] = contents;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ti++;\n\t};\n\n\tif ( td ) {\n\t\t// `tr` element was passed in\n\t\twhile ( td ) {\n\t\t\tname = td.nodeName.toUpperCase();\n\n\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\tcellProcess( td );\n\t\t\t\ttds.push( td );\n\t\t\t}\n\n\t\t\ttd = td.nextSibling;\n\t\t}\n\t}\n\telse {\n\t\t// Existing row object passed in\n\t\ttds = row.anCells;\n\n\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\tcellProcess( tds[j] );\n\t\t}\n\t}\n\n\t// Read the ID from the DOM if present\n\tvar rowNode = row.firstChild ? row : row.nTr;\n\n\tif ( rowNode ) {\n\t\tvar id = rowNode.getAttribute( 'id' );\n\n\t\tif ( id ) {\n\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t}\n\t}\n\n\treturn {\n\t\tdata: d,\n\t\tcells: tds\n\t};\n}\n/**\n * Create a new TR element (and it's TD children) for a row\n * @param {object} oSettings dataTables settings object\n * @param {int} iRow Row to consider\n * @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n * DataTables will create a row automatically\n * @param {array} [anTds] Array of TD|TH elements for the row - must be given\n * if nTr is.\n * @memberof DataTable#oApi\n */\nfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n{\n\tvar\n\t\trow = oSettings.aoData[iRow],\n\t\trowData = row._aData,\n\t\tcells = [],\n\t\tnTr, nTd, oCol,\n\t\ti, iLen, create;\n\n\tif ( row.nTr === null )\n\t{\n\t\tnTr = nTrIn || document.createElement('tr');\n\n\t\trow.nTr = nTr;\n\t\trow.anCells = cells;\n\n\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t * to the aoData array for fast look up\n\t\t */\n\t\tnTr._DT_RowIndex = iRow;\n\n\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t_fnRowAttributes( oSettings, row );\n\n\t\t/* Process each column */\n\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\toCol = oSettings.aoColumns[i];\n\t\t\tcreate = nTrIn ? false : true;\n\n\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\n\t\t\tif (! nTd) {\n\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t}\n\n\t\t\tnTd._DT_CellIndex = {\n\t\t\t\trow: iRow,\n\t\t\t\tcolumn: i\n\t\t\t};\n\t\t\t\n\t\t\tcells.push( nTd );\n\n\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\tif ( create || ((oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t)) {\n\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t}\n\n\t\t\t/* Add user defined class */\n\t\t\tif ( oCol.sClass )\n\t\t\t{\n\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t}\n\n\t\t\t// Visibility - add or remove as required\n\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t{\n\t\t\t\tnTr.appendChild( nTd );\n\t\t\t}\n\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t{\n\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t}\n\n\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t{\n\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );\n\t}\n}\n\n\n/**\n * Add attributes to a row based on the special `DT_*` parameters in a data\n * source object.\n * @param {object} settings DataTables settings object\n * @param {object} DataTables row object for the row to be modified\n * @memberof DataTable#oApi\n */\nfunction _fnRowAttributes( settings, row )\n{\n\tvar tr = row.nTr;\n\tvar data = row._aData;\n\n\tif ( tr ) {\n\t\tvar id = settings.rowIdFn( data );\n\n\t\tif ( id ) {\n\t\t\ttr.id = id;\n\t\t}\n\n\t\tif ( data.DT_RowClass ) {\n\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\ta;\n\n\t\t\t$(tr)\n\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t.addClass( data.DT_RowClass );\n\t\t}\n\n\t\tif ( data.DT_RowAttr ) {\n\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t}\n\n\t\tif ( data.DT_RowData ) {\n\t\t\t$(tr).data( data.DT_RowData );\n\t\t}\n\t}\n}\n\n\n/**\n * Create the HTML header for the table\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnBuildHead( oSettings )\n{\n\tvar i, ien, cell, row, column;\n\tvar thead = oSettings.nTHead;\n\tvar tfoot = oSettings.nTFoot;\n\tvar createHeader = $('th, td', thead).length === 0;\n\tvar classes = oSettings.oClasses;\n\tvar columns = oSettings.aoColumns;\n\n\tif ( createHeader ) {\n\t\trow = $('<tr/>').appendTo( thead );\n\t}\n\n\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\tcolumn = columns[i];\n\t\tcell = $( column.nTh ).addClass( column.sClass );\n\n\t\tif ( createHeader ) {\n\t\t\tcell.appendTo( row );\n\t\t}\n\n\t\t// 1.11 move into sorting\n\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\tcell.addClass( column.sSortingClass );\n\n\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\tcell\n\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\n\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t}\n\t\t}\n\n\t\tif ( column.sTitle != cell[0].innerHTML ) {\n\t\t\tcell.html( column.sTitle );\n\t\t}\n\n\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\toSettings, cell, column, classes\n\t\t);\n\t}\n\n\tif ( createHeader ) {\n\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t}\n\n\t/* Deal with the footer - add classes if required */\n\t$(thead).children('tr').children('th, td').addClass( classes.sHeaderTH );\n\t$(tfoot).children('tr').children('th, td').addClass( classes.sFooterTH );\n\n\t// Cache the footer cells. Note that we only take the cells from the first\n\t// row in the footer. If there is more than one row the user wants to\n\t// interact with, they need to use the table().foot() method. Note also this\n\t// allows cells to be used for multiple columns using colspan\n\tif ( tfoot !== null ) {\n\t\tvar cells = oSettings.aoFooter[0];\n\n\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\n\t\t\tif (column) {\n\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\n\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Draw the header (or footer) element based on the column visibility states. The\n * methodology here is to use the layout array from _fnDetectHeader, modified for\n * the instantaneous column visibility, to construct the new layout. The grid is\n * traversed over cell at a time in a rows x columns grid fashion, although each\n * cell insert can cover multiple elements in the grid - which is tracks using the\n * aApplied array. Cell inserts in the grid will only occur where there isn't\n * already a cell in that position.\n * @param {object} oSettings dataTables settings object\n * @param array {objects} aoSource Layout array from _fnDetectHeader\n * @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n * @memberof DataTable#oApi\n */\nfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n{\n\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\tvar aoLocal = [];\n\tvar aApplied = [];\n\tvar iColumns = oSettings.aoColumns.length;\n\tvar iRowspan, iColspan;\n\n\tif ( ! aoSource )\n\t{\n\t\treturn;\n\t}\n\n\tif ( bIncludeHidden === undefined )\n\t{\n\t\tbIncludeHidden = false;\n\t}\n\n\t/* Make a copy of the master layout array, but without the visible columns in it */\n\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t{\n\t\taoLocal[i] = aoSource[i].slice();\n\t\taoLocal[i].nTr = aoSource[i].nTr;\n\n\t\t/* Remove any columns which are currently hidden */\n\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t{\n\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t{\n\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t}\n\t\t}\n\n\t\t/* Prep the applied array - it needs an element for each row */\n\t\taApplied.push( [] );\n\t}\n\n\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t{\n\t\tnLocalTr = aoLocal[i].nTr;\n\n\t\t/* All cells are going to be replaced, so empty out the row */\n\t\tif ( nLocalTr )\n\t\t{\n\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t{\n\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t}\n\t\t}\n\n\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t{\n\t\t\tiRowspan = 1;\n\t\t\tiColspan = 1;\n\n\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t */\n\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t{\n\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\taApplied[i][j] = 1;\n\n\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t{\n\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\tiRowspan++;\n\t\t\t\t}\n\n\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t{\n\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t}\n\t\t\t\t\tiColspan++;\n\t\t\t\t}\n\n\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Insert the required TR nodes into the table for display\n * @param {object} oSettings dataTables settings object\n * @param ajaxComplete true after ajax call to complete rendering\n * @memberof DataTable#oApi\n */\nfunction _fnDraw( oSettings, ajaxComplete )\n{\n\t// Allow for state saving and a custom start position\n\t_fnStart( oSettings );\n\n\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t{\n\t\t_fnProcessingDisplay( oSettings, false );\n\t\treturn;\n\t}\n\n\tvar anRows = [];\n\tvar iRowCount = 0;\n\tvar asStripeClasses = oSettings.asStripeClasses;\n\tvar iStripes = asStripeClasses.length;\n\tvar oLang = oSettings.oLanguage;\n\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\tvar aiDisplay = oSettings.aiDisplay;\n\tvar iDisplayStart = oSettings._iDisplayStart;\n\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\n\toSettings.bDrawing = true;\n\n\t/* Server-side processing draw intercept */\n\tif ( oSettings.bDeferLoading )\n\t{\n\t\toSettings.bDeferLoading = false;\n\t\toSettings.iDraw++;\n\t\t_fnProcessingDisplay( oSettings, false );\n\t}\n\telse if ( !bServerSide )\n\t{\n\t\toSettings.iDraw++;\n\t}\n\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t{\n\t\t_fnAjaxUpdate( oSettings );\n\t\treturn;\n\t}\n\n\tif ( aiDisplay.length !== 0 )\n\t{\n\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\n\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t{\n\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\tif ( aoData.nTr === null )\n\t\t\t{\n\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t}\n\n\t\t\tvar nRow = aoData.nTr;\n\n\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\tif ( iStripes !== 0 )\n\t\t\t{\n\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t{\n\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t// useful?\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\n\t\t\tanRows.push( nRow );\n\t\t\tiRowCount++;\n\t\t}\n\t}\n\telse\n\t{\n\t\t/* Table is empty - create a row with an empty message in it */\n\t\tvar sZero = oLang.sZeroRecords;\n\t\tif ( oSettings.iDraw == 1 && _fnDataSource( oSettings ) == 'ajax' )\n\t\t{\n\t\t\tsZero = oLang.sLoadingRecords;\n\t\t}\n\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t{\n\t\t\tsZero = oLang.sEmptyTable;\n\t\t}\n\n\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t.append( $('<td />', {\n\t\t\t\t'valign': 'top',\n\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t'class': oSettings.oClasses.sRowEmpty\n\t\t\t} ).html( sZero ) )[0];\n\t}\n\n\t/* Header and footer callbacks */\n\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\tvar body = $(oSettings.nTBody);\n\n\tbody.children().detach();\n\tbody.append( $(anRows) );\n\n\t/* Call all required callback functions for the end of a draw */\n\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\n\t/* Draw is complete, sorting and filtering must be as well */\n\toSettings.bSorted = false;\n\toSettings.bFiltered = false;\n\toSettings.bDrawing = false;\n}\n\n\n/**\n * Redraw the table - taking account of the various features which are enabled\n * @param {object} oSettings dataTables settings object\n * @param {boolean} [holdPosition] Keep the current paging position. By default\n * the paging is reset to the first page\n * @memberof DataTable#oApi\n */\nfunction _fnReDraw( settings, holdPosition )\n{\n\tvar\n\t\tfeatures = settings.oFeatures,\n\t\tsort = features.bSort,\n\t\tfilter = features.bFilter;\n\n\tif ( sort ) {\n\t\t_fnSort( settings );\n\t}\n\n\tif ( filter ) {\n\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t}\n\telse {\n\t\t// No filtering, so we want to just use the display master\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t}\n\n\tif ( holdPosition !== true ) {\n\t\tsettings._iDisplayStart = 0;\n\t}\n\n\t// Let any modules know about the draw hold position state (used by\n\t// scrolling internally)\n\tsettings._drawHold = holdPosition;\n\n\t_fnDraw( settings );\n\n\tsettings._drawHold = false;\n}\n\n\n/**\n * Add the options to the page HTML for the table\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnAddOptionsHtml ( oSettings )\n{\n\tvar classes = oSettings.oClasses;\n\tvar table = $(oSettings.nTable);\n\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\tvar features = oSettings.oFeatures;\n\n\t// All DataTables are wrapped in a div\n\tvar insert = $('<div/>', {\n\t\tid: oSettings.sTableId+'_wrapper',\n\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t} );\n\n\toSettings.nHolding = holding[0];\n\toSettings.nTableWrapper = insert[0];\n\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\n\t/* Loop over the user set positioning and place the elements as needed */\n\tvar aDom = oSettings.sDom.split('');\n\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t{\n\t\tfeatureNode = null;\n\t\tcOption = aDom[i];\n\n\t\tif ( cOption == '<' )\n\t\t{\n\t\t\t/* New container div */\n\t\t\tnNewNode = $('<div/>')[0];\n\n\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\tcNext = aDom[i+1];\n\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t{\n\t\t\t\tsAttr = \"\";\n\t\t\t\tj = 2;\n\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t{\n\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t{\n\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t}\n\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t{\n\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t}\n\n\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t */\n\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t{\n\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t}\n\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t{\n\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t}\n\n\t\t\t\ti += j; /* Move along the position array */\n\t\t\t}\n\n\t\t\tinsert.append( nNewNode );\n\t\t\tinsert = $(nNewNode);\n\t\t}\n\t\telse if ( cOption == '>' )\n\t\t{\n\t\t\t/* End container div */\n\t\t\tinsert = insert.parent();\n\t\t}\n\t\t// @todo Move options into their own plugins?\n\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t{\n\t\t\t/* Length */\n\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t}\n\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t{\n\t\t\t/* Filter */\n\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t}\n\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t{\n\t\t\t/* pRocessing */\n\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t}\n\t\telse if ( cOption == 't' )\n\t\t{\n\t\t\t/* Table */\n\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t}\n\t\telse if ( cOption == 'i' && features.bInfo )\n\t\t{\n\t\t\t/* Info */\n\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t}\n\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t{\n\t\t\t/* Pagination */\n\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t}\n\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t{\n\t\t\t/* Plug-in features */\n\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t{\n\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Add to the 2D features array */\n\t\tif ( featureNode )\n\t\t{\n\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\n\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t{\n\t\t\t\taanFeatures[cOption] = [];\n\t\t\t}\n\n\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\tinsert.append( featureNode );\n\t\t}\n\t}\n\n\t/* Built our DOM structure - replace the holding div with what we want */\n\tholding.replaceWith( insert );\n\toSettings.nHolding = null;\n}\n\n\n/**\n * Use the DOM source to create up an array of header cells. The idea here is to\n * create a layout grid (array) of rows x columns, which contains a reference\n * to the cell that that point in the grid (regardless of col/rowspan), such that\n * any column / row could be removed and the new grid constructed\n * @param array {object} aLayout Array to store the calculated layout in\n * @param {node} nThead The header/footer element for the table\n * @memberof DataTable#oApi\n */\nfunction _fnDetectHeader ( aLayout, nThead )\n{\n\tvar nTrs = $(nThead).children('tr');\n\tvar nTr, nCell;\n\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\tvar bUnique;\n\tvar fnShiftCol = function ( a, i, j ) {\n\t\tvar k = a[i];\n while ( k[j] ) {\n\t\t\tj++;\n\t\t}\n\t\treturn j;\n\t};\n\n\taLayout.splice( 0, aLayout.length );\n\n\t/* We know how many rows there are in the layout - so prep it */\n\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t{\n\t\taLayout.push( [] );\n\t}\n\n\t/* Calculate a layout array */\n\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t{\n\t\tnTr = nTrs[i];\n\t\tiColumn = 0;\n\n\t\t/* For every cell in the row... */\n\t\tnCell = nTr.firstChild;\n\t\twhile ( nCell ) {\n\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t{\n\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\n\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t * accordingly\n\t\t\t\t */\n\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\n\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\n\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t{\n\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t};\n\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tnCell = nCell.nextSibling;\n\t\t}\n\t}\n}\n\n\n/**\n * Get an array of unique th elements, one for each column\n * @param {object} oSettings dataTables settings object\n * @param {node} nHeader automatically detect the layout from this node - optional\n * @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n * @returns array {node} aReturn list of unique th's\n * @memberof DataTable#oApi\n */\nfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n{\n\tvar aReturn = [];\n\tif ( !aLayout )\n\t{\n\t\taLayout = oSettings.aoHeader;\n\t\tif ( nHeader )\n\t\t{\n\t\t\taLayout = [];\n\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t}\n\t}\n\n\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t{\n\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t{\n\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t{\n\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn aReturn;\n}\n\n/**\n * Set the start position for draw\n * @param {object} oSettings dataTables settings object\n */\nfunction _fnStart( oSettings )\n{\n\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\n\t// Check and see if we have an initial draw position from state saving\n\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t{\n\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\tiInitDisplayStart :\n\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t0 :\n\t\t\t\tiInitDisplayStart;\n\n\t\toSettings.iInitDisplayStart = -1;\n\t}\n}\n\n/**\n * Create an Ajax call based on the table's settings, taking into account that\n * parameters can have multiple forms, and backwards compatibility.\n *\n * @param {object} oSettings dataTables settings object\n * @param {array} data Data to send to the server, required by\n * DataTables - may be augmented by developer callbacks\n * @param {function} fn Callback function to run when data is obtained\n */\nfunction _fnBuildAjax( oSettings, data, fn )\n{\n\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\n\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t// come from server-side processing or serverParams\n\tif ( data && Array.isArray(data) ) {\n\t\tvar tmp = {};\n\t\tvar rbracket = /(.*?)\\[\\]$/;\n\n\t\t$.each( data, function (key, val) {\n\t\t\tvar match = val.name.match(rbracket);\n\n\t\t\tif ( match ) {\n\t\t\t\t// Support for arrays\n\t\t\t\tvar name = match[0];\n\n\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t}\n\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp[val.name] = val.value;\n\t\t\t}\n\t\t} );\n\t\tdata = tmp;\n\t}\n\n\tvar ajaxData;\n\tvar ajax = oSettings.ajax;\n\tvar instance = oSettings.oInstance;\n\tvar callback = function ( json ) {\n\t\tvar status = oSettings.jqXHR\n\t\t\t? oSettings.jqXHR.status\n\t\t\t: null;\n\n\t\tif ( json === null || (typeof status === 'number' && status == 204 ) ) {\n\t\t\tjson = {};\n\t\t\t_fnAjaxDataSrc( oSettings, json, [] );\n\t\t}\n\n\t\tvar error = json.error || json.sError;\n\t\tif ( error ) {\n\t\t\t_fnLog( oSettings, 0, error );\n\t\t}\n\n\t\toSettings.json = json;\n\n\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\tfn( json );\n\t};\n\n\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t{\n\t\tajaxData = ajax.data;\n\n\t\tvar newData = typeof ajaxData === 'function' ?\n\t\t\tajaxData( data, oSettings ) : // fn can manipulate data or return\n\t\t\tajaxData; // an object object or array to merge\n\n\t\t// If the function returned something, use that alone\n\t\tdata = typeof ajaxData === 'function' && newData ?\n\t\t\tnewData :\n\t\t\t$.extend( true, data, newData );\n\n\t\t// Remove the data property as we've resolved it already and don't want\n\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\tdelete ajax.data;\n\t}\n\n\tvar baseAjax = {\n\t\t\"data\": data,\n\t\t\"success\": callback,\n\t\t\"dataType\": \"json\",\n\t\t\"cache\": false,\n\t\t\"type\": oSettings.sServerMethod,\n\t\t\"error\": function (xhr, error, thrown) {\n\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\n\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t}\n\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t};\n\n\t// Store the data submitted for the API\n\toSettings.oAjaxData = data;\n\n\t// Allow plug-ins and external processes to modify the data\n\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\n\tif ( oSettings.fnServerData )\n\t{\n\t\t// DataTables 1.9- compatibility\n\t\toSettings.fnServerData.call( instance,\n\t\t\toSettings.sAjaxSource,\n\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\treturn { name: key, value: val };\n\t\t\t} ),\n\t\t\tcallback,\n\t\t\toSettings\n\t\t);\n\t}\n\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t{\n\t\t// DataTables 1.9- compatibility\n\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t} ) );\n\t}\n\telse if ( typeof ajax === 'function' )\n\t{\n\t\t// Is a function - let the caller define what needs to be done\n\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t}\n\telse\n\t{\n\t\t// Object to extend the base settings\n\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\n\t\t// Restore for next time around\n\t\tajax.data = ajaxData;\n\t}\n}\n\n\n/**\n * Update the table using an Ajax call\n * @param {object} settings dataTables settings object\n * @returns {boolean} Block the table drawing or not\n * @memberof DataTable#oApi\n */\nfunction _fnAjaxUpdate( settings )\n{\n\tsettings.iDraw++;\n\t_fnProcessingDisplay( settings, true );\n\n\t// Keep track of drawHold state to handle scrolling after the Ajax call\n\tvar drawHold = settings._drawHold;\n\n\t_fnBuildAjax(\n\t\tsettings,\n\t\t_fnAjaxParameters( settings ),\n\t\tfunction(json) {\n\t\t\tsettings._drawHold = drawHold;\n\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\tsettings._drawHold = false;\n\t\t}\n\t);\n}\n\n\n/**\n * Build up the parameters in an object needed for a server-side processing\n * request. Note that this is basically done twice, is different ways - a modern\n * method which is used by default in DataTables 1.10 which uses objects and\n * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n * the sAjaxSource option is used in the initialisation, or the legacyAjax\n * option is set.\n * @param {object} oSettings dataTables settings object\n * @returns {bool} block the table drawing or not\n * @memberof DataTable#oApi\n */\nfunction _fnAjaxParameters( settings )\n{\n\tvar\n\t\tcolumns = settings.aoColumns,\n\t\tcolumnCount = columns.length,\n\t\tfeatures = settings.oFeatures,\n\t\tpreSearch = settings.oPreviousSearch,\n\t\tpreColSearch = settings.aoPreSearchCols,\n\t\ti, data = [], dataProp, column, columnSearch,\n\t\tsort = _fnSortFlatten( settings ),\n\t\tdisplayStart = settings._iDisplayStart,\n\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\tsettings._iDisplayLength :\n\t\t\t-1;\n\n\tvar param = function ( name, value ) {\n\t\tdata.push( { 'name': name, 'value': value } );\n\t};\n\n\t// DataTables 1.9- compatible method\n\tparam( 'sEcho', settings.iDraw );\n\tparam( 'iColumns', columnCount );\n\tparam( 'sColumns', _pluck( columns, 'sName' ).join(',') );\n\tparam( 'iDisplayStart', displayStart );\n\tparam( 'iDisplayLength', displayLength );\n\n\t// DataTables 1.10+ method\n\tvar d = {\n\t\tdraw: settings.iDraw,\n\t\tcolumns: [],\n\t\torder: [],\n\t\tstart: displayStart,\n\t\tlength: displayLength,\n\t\tsearch: {\n\t\t\tvalue: preSearch.sSearch,\n\t\t\tregex: preSearch.bRegex\n\t\t}\n\t};\n\n\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\tcolumn = columns[i];\n\t\tcolumnSearch = preColSearch[i];\n\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\n\t\td.columns.push( {\n\t\t\tdata: dataProp,\n\t\t\tname: column.sName,\n\t\t\tsearchable: column.bSearchable,\n\t\t\torderable: column.bSortable,\n\t\t\tsearch: {\n\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\tregex: columnSearch.bRegex\n\t\t\t}\n\t\t} );\n\n\t\tparam( \"mDataProp_\"+i, dataProp );\n\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch_'+i, columnSearch.sSearch );\n\t\t\tparam( 'bRegex_'+i, columnSearch.bRegex );\n\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t}\n\n\t\tif ( features.bSort ) {\n\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t}\n\t}\n\n\tif ( features.bFilter ) {\n\t\tparam( 'sSearch', preSearch.sSearch );\n\t\tparam( 'bRegex', preSearch.bRegex );\n\t}\n\n\tif ( features.bSort ) {\n\t\t$.each( sort, function ( i, val ) {\n\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\n\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t} );\n\n\t\tparam( 'iSortingCols', sort.length );\n\t}\n\n\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t// form to use, based on sAjaxSource\n\tvar legacy = DataTable.ext.legacy.ajax;\n\tif ( legacy === null ) {\n\t\treturn settings.sAjaxSource ? data : d;\n\t}\n\n\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t// form\n\treturn legacy ? data : d;\n}\n\n\n/**\n * Data the data from the server (nuking the old) and redraw the table\n * @param {object} oSettings dataTables settings object\n * @param {object} json json data return from the server.\n * @param {string} json.sEcho Tracking flag for DataTables to match requests\n * @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n * @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n * @param {array} json.aaData The data to display on this page\n * @param {string} [json.sColumns] Column ordering (sName, comma separated)\n * @memberof DataTable#oApi\n */\nfunction _fnAjaxUpdateDraw ( settings, json )\n{\n\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t// Support both\n\tvar compat = function ( old, modern ) {\n\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t};\n\n\tvar data = _fnAjaxDataSrc( settings, json );\n\tvar draw = compat( 'sEcho', 'draw' );\n\tvar recordsTotal = compat( 'iTotalRecords', 'recordsTotal' );\n\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\n\tif ( draw !== undefined ) {\n\t\t// Protect against out of sequence returns\n\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\treturn;\n\t\t}\n\t\tsettings.iDraw = draw * 1;\n\t}\n\n\t// No data in returned object, so rather than an array, we show an empty table\n\tif ( ! data ) {\n\t\tdata = [];\n\t}\n\n\t_fnClearTable( settings );\n\tsettings._iRecordsTotal = parseInt(recordsTotal, 10);\n\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\n\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t_fnAddData( settings, data[i] );\n\t}\n\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\n\t_fnDraw( settings, true );\n\n\tif ( ! settings._bInitComplete ) {\n\t\t_fnInitComplete( settings, json );\n\t}\n\n\t_fnProcessingDisplay( settings, false );\n}\n\n\n/**\n * Get the data from the JSON data source to use for drawing a table. Using\n * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n * source object, or from a processing function.\n * @param {object} oSettings dataTables settings object\n * @param {object} json Data source object / array from the server\n * @return {array} Array of data to use\n */\n function _fnAjaxDataSrc ( oSettings, json, write )\n {\n\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\toSettings.ajax.dataSrc :\n\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\n\tif ( ! write ) {\n\t\tif ( dataSrc === 'data' ) {\n\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t// it if possible\n\t\t\treturn json.aaData || json[dataSrc];\n\t\t}\n\n\t\treturn dataSrc !== \"\" ?\n\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\tjson;\n\t}\n\n\t// set\n\t_fnSetObjectDataFn( dataSrc )( json, write );\n}\n\n/**\n * Generate the node required for filtering text\n * @returns {node} Filter control element\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlFilter ( settings )\n{\n\tvar classes = settings.oClasses;\n\tvar tableId = settings.sTableId;\n\tvar language = settings.oLanguage;\n\tvar previousSearch = settings.oPreviousSearch;\n\tvar features = settings.aanFeatures;\n\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\n\tvar str = language.sSearch;\n\tstr = str.match(/_INPUT_/) ?\n\t\tstr.replace('_INPUT_', input) :\n\t\tstr+input;\n\n\tvar filter = $('<div/>', {\n\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t'class': classes.sFilter\n\t\t} )\n\t\t.append( $('<label/>' ).append( str ) );\n\n\tvar searchFn = function(event) {\n\t\t/* Update all other filter input elements for the new display */\n\t\tvar n = features.f;\n\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\tif(previousSearch['return'] && event.key !== \"Enter\") {\n\t\t\treturn;\n\t\t}\n\t\t/* Now do the filter */\n\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\"sSearch\": val,\n\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive,\n\t\t\t\t\"return\": previousSearch['return']\n\t\t\t} );\n\n\t\t\t// Need to redraw, without resorting\n\t\t\tsettings._iDisplayStart = 0;\n\t\t\t_fnDraw( settings );\n\t\t}\n\t};\n\n\tvar searchDelay = settings.searchDelay !== null ?\n\t\tsettings.searchDelay :\n\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t400 :\n\t\t\t0;\n\n\tvar jqFilter = $('input', filter)\n\t\t.val( previousSearch.sSearch )\n\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t.on(\n\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\tsearchDelay ?\n\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\tsearchFn\n\t\t)\n\t\t.on( 'mouseup.DT', function(e) {\n\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\tsetTimeout( function () {\n\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t}, 10);\n\t\t} )\n\t\t.on( 'keypress.DT', function(e) {\n\t\t\t/* Prevent form submission */\n\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} )\n\t\t.attr('aria-controls', tableId);\n\n\t// Update the input elements whenever the table is filtered\n\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\tif ( settings === s ) {\n\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t// inside an iframe or frame...\n\t\t\ttry {\n\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( e ) {}\n\t\t}\n\t} );\n\n\treturn filter[0];\n}\n\n\n/**\n * Filter the table using both the global filter and column based filtering\n * @param {object} oSettings dataTables settings object\n * @param {object} oSearch search information\n * @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n * @memberof DataTable#oApi\n */\nfunction _fnFilterComplete ( oSettings, oInput, iForce )\n{\n\tvar oPrevSearch = oSettings.oPreviousSearch;\n\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\tvar fnSaveFilter = function ( oFilter ) {\n\t\t/* Save the filtering values */\n\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\toPrevSearch['return'] = oFilter['return'];\n\t};\n\tvar fnRegex = function ( o ) {\n\t\t// Backwards compatibility with the bEscapeRegex option\n\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t};\n\n\t// Resolve any column types that are unknown due to addition or invalidation\n\t// @todo As per sort - can this be moved into an event handler?\n\t_fnColumnTypes( oSettings );\n\n\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t{\n\t\t/* Global filter */\n\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );\n\t\tfnSaveFilter( oInput );\n\n\t\t/* Now do the individual column filter */\n\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t{\n\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t}\n\n\t\t/* Custom filtering */\n\t\t_fnFilterCustom( oSettings );\n\t}\n\telse\n\t{\n\t\tfnSaveFilter( oInput );\n\t}\n\n\t/* Tell the draw function we have been filtering */\n\toSettings.bFiltered = true;\n\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n}\n\n\n/**\n * Apply custom filtering functions\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnFilterCustom( settings )\n{\n\tvar filters = DataTable.ext.search;\n\tvar displayRows = settings.aiDisplay;\n\tvar row, rowIdx;\n\n\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\tvar rows = [];\n\n\t\t// Loop over each row and see if it should be included\n\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\trowIdx = displayRows[ j ];\n\t\t\trow = settings.aoData[ rowIdx ];\n\n\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\trows.push( rowIdx );\n\t\t\t}\n\t\t}\n\n\t\t// So the array reference doesn't break set the results into the\n\t\t// existing array\n\t\tdisplayRows.length = 0;\n\t\t$.merge( displayRows, rows );\n\t}\n}\n\n\n/**\n * Filter the table on a per-column basis\n * @param {object} oSettings dataTables settings object\n * @param {string} sInput string to filter on\n * @param {int} iColumn column to filter\n * @param {bool} bRegex treat search string as a regular expression or not\n * @param {bool} bSmart use smart filtering or not\n * @param {bool} bCaseInsensitive Do case insensitive matching or not\n * @memberof DataTable#oApi\n */\nfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n{\n\tif ( searchStr === '' ) {\n\t\treturn;\n\t}\n\n\tvar data;\n\tvar out = [];\n\tvar display = settings.aiDisplay;\n\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\n\tfor ( var i=0 ; i<display.length ; i++ ) {\n\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\n\t\tif ( rpSearch.test( data ) ) {\n\t\t\tout.push( display[i] );\n\t\t}\n\t}\n\n\tsettings.aiDisplay = out;\n}\n\n\n/**\n * Filter the data table based on user input and draw the table\n * @param {object} settings dataTables settings object\n * @param {string} input string to filter on\n * @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n * @param {bool} regex treat as a regular expression or not\n * @param {bool} smart perform smart filtering or not\n * @param {bool} caseInsensitive Do case insensitive matching or not\n * @memberof DataTable#oApi\n */\nfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n{\n\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\tvar displayMaster = settings.aiDisplayMaster;\n\tvar display, invalidated, i;\n\tvar filtered = [];\n\n\t// Need to take account of custom filtering functions - always filter\n\tif ( DataTable.ext.search.length !== 0 ) {\n\t\tforce = true;\n\t}\n\n\t// Check if any of the rows were invalidated\n\tinvalidated = _fnFilterData( settings );\n\n\t// If the input is blank - we just want the full data set\n\tif ( input.length <= 0 ) {\n\t\tsettings.aiDisplay = displayMaster.slice();\n\t}\n\telse {\n\t\t// New search - start from the master array\n\t\tif ( invalidated ||\n\t\t\t force ||\n\t\t\t regex ||\n\t\t\t prevSearch.length > input.length ||\n\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t // re-filtered since indexes will have changed\n\t\t) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\n\t\t// Search the display array\n\t\tdisplay = settings.aiDisplay;\n\n\t\tfor ( i=0 ; i<display.length ; i++ ) {\n\t\t\tif ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\tfiltered.push( display[i] );\n\t\t\t}\n\t\t}\n\n\t\tsettings.aiDisplay = filtered;\n\t}\n}\n\n\n/**\n * Build a regular expression object suitable for searching a table\n * @param {string} sSearch string to search for\n * @param {bool} bRegex treat as a regular expression or not\n * @param {bool} bSmart perform smart filtering or not\n * @param {bool} bCaseInsensitive Do case insensitive matching or not\n * @returns {RegExp} constructed object\n * @memberof DataTable#oApi\n */\nfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n{\n\tsearch = regex ?\n\t\tsearch :\n\t\t_fnEscapeRegex( search );\n\t\n\tif ( smart ) {\n\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t * order is important - a la google. So this is what we want to\n\t\t * generate:\n\t\t * \n\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t */\n\t\tvar a = $.map( search.match( /[\"\\u201C][^\"\\u201D]+[\"\\u201D]|[^ ]+/g ) || [''], function ( word ) {\n\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\tword = m ? m[1] : word;\n\t\t\t}\n\t\t\telse if ( word.charAt(0) === '\\u201C' ) {\n\t\t\t\tvar m = word.match( /^\\u201C(.*)\\u201D$/ );\n\t\t\t\tword = m ? m[1] : word;\n\t\t\t}\n\n\t\t\treturn word.replace('\"', '');\n\t\t} );\n\n\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t}\n\n\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n}\n\n\n/**\n * Escape a string such that it can be used in a regular expression\n * @param {string} sVal string to escape\n * @returns {string} escaped string\n * @memberof DataTable#oApi\n */\nvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\nvar __filter_div = $('<div>')[0];\nvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\n// Update the filtering data for each row if needed (by invalidation or first run)\nfunction _fnFilterData ( settings )\n{\n\tvar columns = settings.aoColumns;\n\tvar column;\n\tvar i, j, ien, jen, filterData, cellData, row;\n\tvar wasInvalidated = false;\n\n\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\trow = settings.aoData[i];\n\n\t\tif ( ! row._aFilterData ) {\n\t\t\tfilterData = [];\n\n\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\tcolumn = columns[j];\n\n\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\n\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcellData = '';\n\t\t\t\t}\n\n\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t// method used here is much faster https://jsperf.com/html-decode\n\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t}\n\n\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t}\n\n\t\t\t\tfilterData.push( cellData );\n\t\t\t}\n\n\t\t\trow._aFilterData = filterData;\n\t\t\trow._sFilterRow = filterData.join(' ');\n\t\t\twasInvalidated = true;\n\t\t}\n\t}\n\n\treturn wasInvalidated;\n}\n\n\n/**\n * Convert from the internal Hungarian notation to camelCase for external\n * interaction\n * @param {object} obj Object to convert\n * @returns {object} Inverted object\n * @memberof DataTable#oApi\n */\nfunction _fnSearchToCamel ( obj )\n{\n\treturn {\n\t\tsearch: obj.sSearch,\n\t\tsmart: obj.bSmart,\n\t\tregex: obj.bRegex,\n\t\tcaseInsensitive: obj.bCaseInsensitive\n\t};\n}\n\n\n\n/**\n * Convert from camelCase notation to the internal Hungarian. We could use the\n * Hungarian convert function here, but this is cleaner\n * @param {object} obj Object to convert\n * @returns {object} Inverted object\n * @memberof DataTable#oApi\n */\nfunction _fnSearchToHung ( obj )\n{\n\treturn {\n\t\tsSearch: obj.search,\n\t\tbSmart: obj.smart,\n\t\tbRegex: obj.regex,\n\t\tbCaseInsensitive: obj.caseInsensitive\n\t};\n}\n\n/**\n * Generate the node required for the info display\n * @param {object} oSettings dataTables settings object\n * @returns {node} Information element\n * @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlInfo ( settings )\n{\n\tvar\n\t\ttid = settings.sTableId,\n\t\tnodes = settings.aanFeatures.i,\n\t\tn = $('<div/>', {\n\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t} );\n\n\tif ( ! nodes ) {\n\t\t// Update display on each draw\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\"sName\": \"information\"\n\t\t} );\n\n\t\tn\n\t\t\t.attr( 'role', 'status' )\n\t\t\t.attr( 'aria-live', 'polite' );\n\n\t\t// Table is described by our info div\n\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t}\n\n\treturn n[0];\n}\n\n\n/**\n * Update the information elements in the display\n * @param {object} settings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnUpdateInfo ( settings )\n{\n\t/* Show information about the table */\n\tvar nodes = settings.aanFeatures.i;\n\tif ( nodes.length === 0 ) {\n\t\treturn;\n\t}\n\n\tvar\n\t\tlang = settings.oLanguage,\n\t\tstart = settings._iDisplayStart+1,\n\t\tend = settings.fnDisplayEnd(),\n\t\tmax = settings.fnRecordsTotal(),\n\t\ttotal = settings.fnRecordsDisplay(),\n\t\tout = total ?\n\t\t\tlang.sInfo :\n\t\t\tlang.sInfoEmpty;\n\n\tif ( total !== max ) {\n\t\t/* Record set after filtering */\n\t\tout += ' ' + lang.sInfoFiltered;\n\t}\n\n\t// Convert the macros\n\tout += lang.sInfoPostFix;\n\tout = _fnInfoMacros( settings, out );\n\n\tvar callback = lang.fnInfoCallback;\n\tif ( callback !== null ) {\n\t\tout = callback.call( settings.oInstance,\n\t\t\tsettings, start, end, max, total, out\n\t\t);\n\t}\n\n\t$(nodes).html( out );\n}\n\n\nfunction _fnInfoMacros ( settings, str )\n{\n\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t// internally\n\tvar\n\t\tformatter = settings.fnFormatNumber,\n\t\tstart = settings._iDisplayStart+1,\n\t\tlen = settings._iDisplayLength,\n\t\tvis = settings.fnRecordsDisplay(),\n\t\tall = len === -1;\n\n\treturn str.\n\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\treplace(/_END_/g, formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\treplace(/_MAX_/g, formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\treplace(/_PAGE_/g, formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n}\n\n\n\n/**\n * Draw the table for the first time, adding all required features\n * @param {object} settings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnInitialise ( settings )\n{\n\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\tvar columns = settings.aoColumns, column;\n\tvar features = settings.oFeatures;\n\tvar deferLoading = settings.bDeferLoading; // value modified by the draw\n\n\t/* Ensure that the table data is fully initialised */\n\tif ( ! settings.bInitialised ) {\n\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\treturn;\n\t}\n\n\t/* Show the display HTML options */\n\t_fnAddOptionsHtml( settings );\n\n\t/* Build and draw the header / footer for the table */\n\t_fnBuildHead( settings );\n\t_fnDrawHead( settings, settings.aoHeader );\n\t_fnDrawHead( settings, settings.aoFooter );\n\n\t/* Okay to show that something is going on now */\n\t_fnProcessingDisplay( settings, true );\n\n\t/* Calculate sizes for columns */\n\tif ( features.bAutoWidth ) {\n\t\t_fnCalculateColumnWidths( settings );\n\t}\n\n\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\tcolumn = columns[i];\n\n\t\tif ( column.sWidth ) {\n\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t}\n\t}\n\n\t_fnCallbackFire( settings, null, 'preInit', [settings] );\n\n\t// If there is default sorting required - let's do it. The sort function\n\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t// data (show 'loading' message possibly)\n\t_fnReDraw( settings );\n\n\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\tvar dataSrc = _fnDataSource( settings );\n\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t// if there is an ajax source load the data\n\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\n\t\t\t\t// Got the data - add it to the table\n\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t}\n\n\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t// it appear 'fresh'\n\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\n\t\t\t\t_fnReDraw( settings );\n\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t}, settings );\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t_fnInitComplete( settings );\n\t\t}\n\t}\n}\n\n\n/**\n * Draw the table for the first time, adding all required features\n * @param {object} oSettings dataTables settings object\n * @param {object} [json] JSON from the server that completed the table, if using Ajax source\n * with client-side processing (optional)\n * @memberof DataTable#oApi\n */\nfunction _fnInitComplete ( settings, json )\n{\n\tsettings._bInitComplete = true;\n\n\t// When data was added after the initialisation (data or Ajax) we need to\n\t// calculate the column sizing\n\tif ( json || settings.oInit.aaData ) {\n\t\t_fnAdjustColumnSizing( settings );\n\t}\n\n\t_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );\n\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n}\n\n\nfunction _fnLengthChange ( settings, val )\n{\n\tvar len = parseInt( val, 10 );\n\tsettings._iDisplayLength = len;\n\n\t_fnLengthOverflow( settings );\n\n\t// Fire length change event\n\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n}\n\n\n/**\n * Generate the node required for user display length changing\n * @param {object} settings dataTables settings object\n * @returns {node} Display length feature node\n * @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlLength ( settings )\n{\n\tvar\n\t\tclasses = settings.oClasses,\n\t\ttableId = settings.sTableId,\n\t\tmenu = settings.aLengthMenu,\n\t\td2 = Array.isArray( menu[0] ),\n\t\tlengths = d2 ? menu[0] : menu,\n\t\tlanguage = d2 ? menu[1] : menu;\n\n\tvar select = $('<select/>', {\n\t\t'name': tableId+'_length',\n\t\t'aria-controls': tableId,\n\t\t'class': classes.sLengthSelect\n\t} );\n\n\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\tselect[0][ i ] = new Option(\n\t\t\ttypeof language[i] === 'number' ?\n\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\tlanguage[i],\n\t\t\tlengths[i]\n\t\t);\n\t}\n\n\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\tif ( ! settings.aanFeatures.l ) {\n\t\tdiv[0].id = tableId+'_length';\n\t}\n\n\tdiv.children().append(\n\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t);\n\n\t// Can't use `select` variable as user might provide their own and the\n\t// reference is broken by the use of outerHTML\n\t$('select', div)\n\t\t.val( settings._iDisplayLength )\n\t\t.on( 'change.DT', function(e) {\n\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t_fnDraw( settings );\n\t\t} );\n\n\t// Update node value whenever anything changes the table's length\n\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\tif ( settings === s ) {\n\t\t\t$('select', div).val( len );\n\t\t}\n\t} );\n\n\treturn div[0];\n}\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Note that most of the paging logic is done in\n * DataTable.ext.pager\n */\n\n/**\n * Generate the node required for default pagination\n * @param {object} oSettings dataTables settings object\n * @returns {node} Pagination feature node\n * @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlPaginate ( settings )\n{\n\tvar\n\t\ttype = settings.sPaginationType,\n\t\tplugin = DataTable.ext.pager[ type ],\n\t\tmodern = typeof plugin === 'function',\n\t\tredraw = function( settings ) {\n\t\t\t_fnDraw( settings );\n\t\t},\n\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\tfeatures = settings.aanFeatures;\n\n\tif ( ! modern ) {\n\t\tplugin.fnInit( settings, node, redraw );\n\t}\n\n\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\tif ( ! features.p )\n\t{\n\t\tnode.id = settings.sTableId+'_paginate';\n\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": function( settings ) {\n\t\t\t\tif ( modern ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tstart = settings._iDisplayStart,\n\t\t\t\t\t\tlen = settings._iDisplayLength,\n\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\tall = len === -1,\n\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\ti, ien;\n\n\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"sName\": \"pagination\"\n\t\t} );\n\t}\n\n\treturn node;\n}\n\n\n/**\n * Alter the display settings to change the page\n * @param {object} settings DataTables settings object\n * @param {string|int} action Paging action to take: \"first\", \"previous\",\n * \"next\" or \"last\" or page number to jump to (integer)\n * @param [bool] redraw Automatically draw the update or not\n * @returns {bool} true page has changed, false - no change\n * @memberof DataTable#oApi\n */\nfunction _fnPageChange ( settings, action, redraw )\n{\n\tvar\n\t\tstart = settings._iDisplayStart,\n\t\tlen = settings._iDisplayLength,\n\t\trecords = settings.fnRecordsDisplay();\n\n\tif ( records === 0 || len === -1 )\n\t{\n\t\tstart = 0;\n\t}\n\telse if ( typeof action === \"number\" )\n\t{\n\t\tstart = action * len;\n\n\t\tif ( start > records )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t}\n\telse if ( action == \"first\" )\n\t{\n\t\tstart = 0;\n\t}\n\telse if ( action == \"previous\" )\n\t{\n\t\tstart = len >= 0 ?\n\t\t\tstart - len :\n\t\t\t0;\n\n\t\tif ( start < 0 )\n\t\t{\n\t\t start = 0;\n\t\t}\n\t}\n\telse if ( action == \"next\" )\n\t{\n\t\tif ( start + len < records )\n\t\t{\n\t\t\tstart += len;\n\t\t}\n\t}\n\telse if ( action == \"last\" )\n\t{\n\t\tstart = Math.floor( (records-1) / len) * len;\n\t}\n\telse\n\t{\n\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t}\n\n\tvar changed = settings._iDisplayStart !== start;\n\tsettings._iDisplayStart = start;\n\n\tif ( changed ) {\n\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\n\t\tif ( redraw ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\t}\n\telse {\n\t\t// No change event - paging was called, but no change\n\t\t_fnCallbackFire( settings, null, 'page-nc', [settings] );\n\t}\n\n\treturn changed;\n}\n\n\n\n/**\n * Generate the node required for the processing node\n * @param {object} settings dataTables settings object\n * @returns {node} Processing element\n * @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlProcessing ( settings )\n{\n\treturn $('<div/>', {\n\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t'class': settings.oClasses.sProcessing,\n\t\t\t'role': 'status'\n\t\t} )\n\t\t.html( settings.oLanguage.sProcessing )\n\t\t.append('<div><div></div><div></div><div></div><div></div></div>')\n\t\t.insertBefore( settings.nTable )[0];\n}\n\n\n/**\n * Display or hide the processing indicator\n * @param {object} settings dataTables settings object\n * @param {bool} show Show the processing indicator (true) or not (false)\n * @memberof DataTable#oApi\n */\nfunction _fnProcessingDisplay ( settings, show )\n{\n\tif ( settings.oFeatures.bProcessing ) {\n\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t}\n\n\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n}\n\n/**\n * Add any control elements for the table - specifically scrolling\n * @param {object} settings dataTables settings object\n * @returns {node} Node to add to the DOM\n * @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlTable ( settings )\n{\n\tvar table = $(settings.nTable);\n\n\t// Scrolling from here on in\n\tvar scroll = settings.oScroll;\n\n\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\treturn settings.nTable;\n\t}\n\n\tvar scrollX = scroll.sX;\n\tvar scrollY = scroll.sY;\n\tvar classes = settings.oClasses;\n\tvar caption = table.children('caption');\n\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\tvar headerClone = $( table[0].cloneNode(false) );\n\tvar footerClone = $( table[0].cloneNode(false) );\n\tvar footer = table.children('tfoot');\n\tvar _div = '<div/>';\n\tvar size = function ( s ) {\n\t\treturn !s ? null : _fnStringToCss( s );\n\t};\n\n\tif ( ! footer.length ) {\n\t\tfooter = null;\n\t}\n\n\t/*\n\t * The HTML structure that we want to generate in this function is:\n\t * div - scroller\n\t * div - scroll head\n\t * div - scroll head inner\n\t * table - scroll head table\n\t * thead - thead\n\t * div - scroll body\n\t * table - table (master table)\n\t * thead - thead clone for sizing\n\t * tbody - tbody\n\t * div - scroll foot\n\t * div - scroll foot inner\n\t * table - scroll foot table\n\t * tfoot - tfoot\n\t */\n\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t.append(\n\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t.css( {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tborder: 0,\n\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t\t.append(\n\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t} )\n\t\t\t\t.append( table )\n\t\t);\n\n\tif ( footer ) {\n\t\tscroller.append(\n\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t.css( {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tborder: 0,\n\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t);\n\t}\n\n\tvar children = scroller.children();\n\tvar scrollHead = children[0];\n\tvar scrollBody = children[1];\n\tvar scrollFoot = footer ? children[2] : null;\n\n\t// When the body is scrolled, then we also want to scroll the headers\n\tif ( scrollX ) {\n\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\tvar scrollLeft = this.scrollLeft;\n\n\t\t\tscrollHead.scrollLeft = scrollLeft;\n\n\t\t\tif ( footer ) {\n\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t}\n\t\t} );\n\t}\n\n\t$(scrollBody).css('max-height', scrollY);\n\tif (! scroll.bCollapse) {\n\t\t$(scrollBody).css('height', scrollY);\n\t}\n\n\tsettings.nScrollHead = scrollHead;\n\tsettings.nScrollBody = scrollBody;\n\tsettings.nScrollFoot = scrollFoot;\n\n\t// On redraw - align columns\n\tsettings.aoDrawCallback.push( {\n\t\t\"fn\": _fnScrollDraw,\n\t\t\"sName\": \"scrolling\"\n\t} );\n\n\treturn scroller[0];\n}\n\n\n\n/**\n * Update the header, footer and body tables for resizing - i.e. column\n * alignment.\n *\n * Welcome to the most horrible function DataTables. The process that this\n * function follows is basically:\n * 1. Re-create the table inside the scrolling div\n * 2. Take live measurements from the DOM\n * 3. Apply the measurements to align the columns\n * 4. Clean up\n *\n * @param {object} settings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnScrollDraw ( settings )\n{\n\t// Given that this is such a monster function, a lot of variables are use\n\t// to try and keep the minimised size as small as possible\n\tvar\n\t\tscroll = settings.oScroll,\n\t\tscrollX = scroll.sX,\n\t\tscrollXInner = scroll.sXInner,\n\t\tscrollY = scroll.sY,\n\t\tbarWidth = scroll.iBarWidth,\n\t\tdivHeader = $(settings.nScrollHead),\n\t\tdivHeaderStyle = divHeader[0].style,\n\t\tdivHeaderInner = divHeader.children('div'),\n\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\tdivBodyEl = settings.nScrollBody,\n\t\tdivBody = $(divBodyEl),\n\t\tdivBodyStyle = divBodyEl.style,\n\t\tdivFooter = $(settings.nScrollFoot),\n\t\tdivFooterInner = divFooter.children('div'),\n\t\tdivFooterTable = divFooterInner.children('table'),\n\t\theader = $(settings.nTHead),\n\t\ttable = $(settings.nTable),\n\t\ttableEl = table[0],\n\t\ttableStyle = tableEl.style,\n\t\tfooter = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\tbrowser = settings.oBrowser,\n\t\tie67 = browser.bScrollOversize,\n\t\tdtHeaderCells = _pluck( settings.aoColumns, 'nTh' ),\n\t\theaderTrgEls, footerTrgEls,\n\t\theaderSrcEls, footerSrcEls,\n\t\theaderCopy, footerCopy,\n\t\theaderWidths=[], footerWidths=[],\n\t\theaderContent=[], footerContent=[],\n\t\tidx, correction, sanityWidth,\n\t\tzeroOut = function(nSizer) {\n\t\t\tvar style = nSizer.style;\n\t\t\tstyle.paddingTop = \"0\";\n\t\t\tstyle.paddingBottom = \"0\";\n\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\tstyle.height = 0;\n\t\t};\n\n\t// If the scrollbar visibility has changed from the last draw, we need to\n\t// adjust the column sizes as the table width will have changed to account\n\t// for the scrollbar\n\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\n\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t_fnAdjustColumnSizing( settings );\n\t\treturn; // adjust column sizing will call this function again\n\t}\n\telse {\n\t\tsettings.scrollBarVis = scrollBarVis;\n\t}\n\n\t/*\n\t * 1. Re-create the table inside the scrolling div\n\t */\n\n\t// Remove the old minimised thead and tfoot elements in the inner table\n\ttable.children('thead, tfoot').remove();\n\n\tif ( footer ) {\n\t\tfooterCopy = footer.clone().prependTo( table );\n\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\tfooterSrcEls = footerCopy.find('tr');\n\t\tfooterCopy.find('[id]').removeAttr('id');\n\t}\n\n\t// Clone the current header and footer elements and then place it into the inner table\n\theaderCopy = header.clone().prependTo( table );\n\theaderTrgEls = header.find('tr'); // original header is in its own table\n\theaderSrcEls = headerCopy.find('tr');\n\theaderCopy.find('th, td').removeAttr('tabindex');\n\theaderCopy.find('[id]').removeAttr('id');\n\n\n\t/*\n\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t */\n\n\t// Remove old sizing and apply the calculated column widths\n\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t// calculated sizes to this header\n\tif ( ! scrollX )\n\t{\n\t\tdivBodyStyle.width = '100%';\n\t\tdivHeader[0].style.width = '100%';\n\t}\n\n\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t} );\n\n\tif ( footer ) {\n\t\t_fnApplyToChildren( function(n) {\n\t\t\tn.style.width = \"\";\n\t\t}, footerSrcEls );\n\t}\n\n\t// Size the table as a whole\n\tsanityWidth = table.outerWidth();\n\tif ( scrollX === \"\" ) {\n\t\t// No x scrolling\n\t\ttableStyle.width = \"100%\";\n\n\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t// into account.\n\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t) {\n\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t}\n\n\t\t// Recalculate the sanity width\n\t\tsanityWidth = table.outerWidth();\n\t}\n\telse if ( scrollXInner !== \"\" ) {\n\t\t// legacy x scroll inner has been given - use it\n\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\n\t\t// Recalculate the sanity width\n\t\tsanityWidth = table.outerWidth();\n\t}\n\n\t// Hidden header should have zero height, so remove padding and borders. Then\n\t// set the width based on the real headers\n\n\t// Apply all styles in one pass\n\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\n\t// Read all widths in next pass\n\t_fnApplyToChildren( function(nSizer) {\n\t\tvar style = window.getComputedStyle ?\n\t\t\twindow.getComputedStyle(nSizer).width :\n\t\t\t_fnStringToCss( $(nSizer).width() );\n\n\t\theaderContent.push( nSizer.innerHTML );\n\t\theaderWidths.push( style );\n\t}, headerSrcEls );\n\n\t// Apply all widths in final pass\n\t_fnApplyToChildren( function(nToSize, i) {\n\t\tnToSize.style.width = headerWidths[i];\n\t}, headerTrgEls );\n\n\t$(headerSrcEls).css('height', 0);\n\n\t/* Same again with the footer if we have one */\n\tif ( footer )\n\t{\n\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\tfooterContent.push( nSizer.innerHTML );\n\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t}, footerSrcEls );\n\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = footerWidths[i];\n\t\t}, footerTrgEls );\n\n\t\t$(footerSrcEls).height(0);\n\t}\n\n\n\t/*\n\t * 3. Apply the measurements\n\t */\n\n\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t// the content of the cell so that the width applied to the header and body\n\t// both match, but we want to hide it completely. We want to also fix their\n\t// width to what they currently are\n\t_fnApplyToChildren( function(nSizer, i) {\n\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+headerContent[i]+'</div>';\n\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\tnSizer.style.width = headerWidths[i];\n\t}, headerSrcEls );\n\n\tif ( footer )\n\t{\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+footerContent[i]+'</div>';\n\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\tnSizer.style.width = footerWidths[i];\n\t\t}, footerSrcEls );\n\t}\n\n\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\tif ( Math.round(table.outerWidth()) < Math.round(sanityWidth) )\n\t{\n\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\tsanityWidth+barWidth :\n\t\t\t\tsanityWidth;\n\n\t\t// IE6/7 are a law unto themselves...\n\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t) {\n\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t}\n\n\t\t// And give the user a warning that we've stopped the table getting too small\n\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t}\n\t}\n\telse\n\t{\n\t\tcorrection = '100%';\n\t}\n\n\t// Apply to the container elements\n\tdivBodyStyle.width = _fnStringToCss( correction );\n\tdivHeaderStyle.width = _fnStringToCss( correction );\n\n\tif ( footer ) {\n\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t}\n\n\n\t/*\n\t * 4. Clean up\n\t */\n\tif ( ! scrollY ) {\n\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t */\n\t\tif ( ie67 ) {\n\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t}\n\t}\n\n\t/* Finally set the width's of the header and footer tables */\n\tvar iOuterWidth = table.outerWidth();\n\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\n\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\n\tif ( footer ) {\n\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t}\n\n\t// Correct DOM ordering for colgroup - comes before the thead\n\ttable.children('colgroup').insertBefore( table.children('thead') );\n\n\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\tdivBody.trigger('scroll');\n\n\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t// only if we aren't holding the position\n\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\tdivBodyEl.scrollTop = 0;\n\t}\n}\n\n\n\n/**\n * Apply a given function to the display child nodes of an element array (typically\n * TD children of TR rows\n * @param {function} fn Method to apply to the objects\n * @param array {nodes} an1 List of elements to look through for display children\n * @param array {nodes} an2 Another list (identical structure to the first) - optional\n * @memberof DataTable#oApi\n */\nfunction _fnApplyToChildren( fn, an1, an2 )\n{\n\tvar index=0, i=0, iLen=an1.length;\n\tvar nNode1, nNode2;\n\n\twhile ( i < iLen ) {\n\t\tnNode1 = an1[i].firstChild;\n\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\n\t\twhile ( nNode1 ) {\n\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\tif ( an2 ) {\n\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t}\n\n\t\ti++;\n\t}\n}\n\n\n\nvar __re_html_remove = /<.*?>/g;\n\n\n/**\n * Calculate the width of columns for the table\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnCalculateColumnWidths ( oSettings )\n{\n\tvar\n\t\ttable = oSettings.nTable,\n\t\tcolumns = oSettings.aoColumns,\n\t\tscroll = oSettings.oScroll,\n\t\tscrollY = scroll.sY,\n\t\tscrollX = scroll.sX,\n\t\tscrollXInner = scroll.sXInner,\n\t\tcolumnCount = columns.length,\n\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\theaderCells = $('th', oSettings.nTHead),\n\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\ttableContainer = table.parentNode,\n\t\tuserInputs = false,\n\t\ti, column, columnIdx, width, outerWidth,\n\t\tbrowser = oSettings.oBrowser,\n\t\tie67 = browser.bScrollOversize;\n\n\tvar styleWidth = table.style.width;\n\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\ttableWidthAttr = styleWidth;\n\t}\n\n\t/* Convert any user input sizes into pixel sizes */\n\tvar sizes = _fnConvertToWidth(_pluck(columns, 'sWidthOrig'), tableContainer);\n\n\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\tcolumn = columns[ visibleColumns[i] ];\n\n\t\tif ( column.sWidth !== null ) {\n\t\t\tcolumn.sWidth = sizes[i];\n\n\t\t\tuserInputs = true;\n\t\t}\n\t}\n\n\t/* If the number of columns in the DOM equals the number that we have to\n\t * process in DataTables, then we can use the offsets that are created by\n\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t * nor scrolling used\n\t */\n\tif ( ie67 || ! userInputs && ! scrollX && ! scrollY &&\n\t columnCount == _fnVisbleColumns( oSettings ) &&\n\t columnCount == headerCells.length\n\t) {\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tvar colIdx = _fnVisibleToColumnIndex( oSettings, i );\n\n\t\t\tif ( colIdx !== null ) {\n\t\t\t\tcolumns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t// table widths\n\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t.removeAttr( 'id' );\n\n\t\t// Clean up the table body\n\t\ttmpTable.find('tbody tr').remove();\n\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\n\t\t// Clone the table header and footer - we can't use the header / footer\n\t\t// from the cloned table, since if scrolling is active, the table's\n\t\t// real header and footer are contained in different table tags\n\t\ttmpTable.find('thead, tfoot').remove();\n\t\ttmpTable\n\t\t\t.append( $(oSettings.nTHead).clone() )\n\t\t\t.append( $(oSettings.nTFoot).clone() );\n\n\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\n\t\t// Apply custom sizing to the cloned header\n\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\n\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t'';\n\n\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t// width the column requires, then it will have no effect\n\t\t\tif ( column.sWidthOrig && scrollX ) {\n\t\t\t\t$( headerCells[i] ).append( $('<div/>').css( {\n\t\t\t\t\twidth: column.sWidthOrig,\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tborder: 0,\n\t\t\t\t\theight: 1\n\t\t\t\t} ) );\n\t\t\t}\n\t\t}\n\n\t\t// Find the widest cell for each column and put it into the table\n\t\tif ( oSettings.aoData.length ) {\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\tcolumn = columns[ columnIdx ];\n\n\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t.clone( false )\n\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t.appendTo( tr );\n\t\t\t}\n\t\t}\n\n\t\t// Tidy the temporary table - remove name attributes so there aren't\n\t\t// duplicated in the dom (radio elements for example)\n\t\t$('[name]', tmpTable).removeAttr('name');\n\n\t\t// Table has been built, attach to the document so we can work with it.\n\t\t// A holding element is used, positioned at the top of the container\n\t\t// with minimal height, so it has no effect on if the container scrolls\n\t\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t\t// needed\n\t\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t\t{\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\theight: 1,\n\t\t\t\t\tright: 0,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} :\n\t\t\t\t{}\n\t\t\t)\n\t\t\t.append( tmpTable )\n\t\t\t.appendTo( tableContainer );\n\n\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t// is. This results in slightly different, but I think correct behaviour\n\t\tif ( scrollX && scrollXInner ) {\n\t\t\ttmpTable.width( scrollXInner );\n\t\t}\n\t\telse if ( scrollX ) {\n\t\t\ttmpTable.css( 'width', 'auto' );\n\t\t\ttmpTable.removeAttr('width');\n\n\t\t\t// If there is no width attribute or style, then allow the table to\n\t\t\t// collapse\n\t\t\tif ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t}\n\t\t}\n\t\telse if ( scrollY ) {\n\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t}\n\t\telse if ( tableWidthAttr ) {\n\t\t\ttmpTable.width( tableWidthAttr );\n\t\t}\n\n\t\t// Get the width of each column in the constructed table - we need to\n\t\t// know the inner width (so it can be assigned to the other table's\n\t\t// cells) and the outer width so we can calculate the full width of the\n\t\t// table. This is safe since DataTables requires a unique cell for each\n\t\t// column, but if ever a header can span multiple columns, this will\n\t\t// need to be modified.\n\t\tvar total = 0;\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tvar cell = $(headerCells[i]);\n\t\t\tvar border = cell.outerWidth() - cell.width();\n\n\t\t\t// Use getBounding... where possible (not IE8-) because it can give\n\t\t\t// sub-pixel accuracy, which we then want to round up!\n\t\t\tvar bounding = browser.bBounding ?\n\t\t\t\tMath.ceil( headerCells[i].getBoundingClientRect().width ) :\n\t\t\t\tcell.outerWidth();\n\n\t\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t\t// of the table might not equal the total given here (IE!).\n\t\t\ttotal += bounding;\n\n\t\t\t// Width for each column to use\n\t\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );\n\t\t}\n\n\t\ttable.style.width = _fnStringToCss( total );\n\n\t\t// Finished with the table - ditch it\n\t\tholder.remove();\n\t}\n\n\t// If there is a width attr, we want to attach an event listener which\n\t// allows the table sizing to automatically adjust when the window is\n\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t// CSS is a relative value or absolute - DOM read is always px.\n\tif ( tableWidthAttr ) {\n\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t}\n\n\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\tvar bindResize = function () {\n\t\t\t$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t} ) );\n\t\t};\n\n\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\tif ( ie67 ) {\n\t\t\tsetTimeout( bindResize, 1000 );\n\t\t}\n\t\telse {\n\t\t\tbindResize();\n\t\t}\n\n\t\toSettings._reszEvt = true;\n\t}\n}\n\n\n/**\n * Throttle the calls to a function. Arguments and context are maintained for\n * the throttled function\n * @param {function} fn Function to be called\n * @param {int} [freq=200] call frequency in mS\n * @returns {function} wrapped function\n * @memberof DataTable#oApi\n */\nvar _fnThrottle = DataTable.util.throttle;\n\n\n/**\n * Convert a set of CSS units width to pixels (e.g. 2em)\n * @param {string[]} widths widths to be converted\n * @param {node} parent parent to get the with for (required for relative widths) - optional\n * @returns {int[]} widths in pixels\n * @memberof DataTable#oApi\n */\nfunction _fnConvertToWidth ( widths, parent )\n{\n\tvar els = [];\n\tvar results = [];\n\n\t// Add the elements in a single loop so we only need to reflow once\n\tfor (var i=0 ; i<widths.length ; i++) {\n\t\tif (widths[i]) {\n\t\t\tels.push(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( 'width', _fnStringToCss( widths[i] ) )\n\t\t\t\t\t.appendTo( parent || document.body )\n\t\t\t)\n\t\t}\n\t\telse {\n\t\t\tels.push(null);\n\t\t}\n\t}\n\n\t// Get the sizes (will reflow once)\n\tfor (var i=0 ; i<widths.length ; i++) {\n\t\tresults.push(els[i] ? els[i][0].offsetWidth : null);\n\t}\n\n\t// Tidy\n\t$(els).remove();\n\n\treturn results;\n}\n\n\n/**\n * Get the widest node\n * @param {object} settings dataTables settings object\n * @param {int} colIdx column of interest\n * @returns {node} widest table node\n * @memberof DataTable#oApi\n */\nfunction _fnGetWidestNode( settings, colIdx )\n{\n\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\tif ( idx < 0 ) {\n\t\treturn null;\n\t}\n\n\tvar data = settings.aoData[ idx ];\n\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\tdata.anCells[ colIdx ];\n}\n\n\n/**\n * Get the maximum strlen for each data column\n * @param {object} settings dataTables settings object\n * @param {int} colIdx column of interest\n * @returns {string} max string length for each column\n * @memberof DataTable#oApi\n */\nfunction _fnGetMaxLenString( settings, colIdx )\n{\n\tvar s, max=-1, maxIdx = -1;\n\n\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\ts = s.replace( __re_html_remove, '' );\n\t\ts = s.replace( / /g, ' ' );\n\n\t\tif ( s.length > max ) {\n\t\t\tmax = s.length;\n\t\t\tmaxIdx = i;\n\t\t}\n\t}\n\n\treturn maxIdx;\n}\n\n\n/**\n * Append a CSS unit (only if required) to a string\n * @param {string} value to css-ify\n * @returns {string} value with css unit\n * @memberof DataTable#oApi\n */\nfunction _fnStringToCss( s )\n{\n\tif ( s === null ) {\n\t\treturn '0px';\n\t}\n\n\tif ( typeof s == 'number' ) {\n\t\treturn s < 0 ?\n\t\t\t'0px' :\n\t\t\ts+'px';\n\t}\n\n\t// Check it has a unit character already\n\treturn s.match(/\\d$/) ?\n\t\ts+'px' :\n\t\ts;\n}\n\n\n\nfunction _fnSortFlatten ( settings )\n{\n\tvar\n\t\ti, iLen, k, kLen,\n\t\taSort = [],\n\t\taiOrig = [],\n\t\taoColumns = settings.aoColumns,\n\t\taDataSort, iCol, sType, srcCol,\n\t\tfixed = settings.aaSortingFixed,\n\t\tfixedObj = $.isPlainObject( fixed ),\n\t\tnestedSort = [],\n\t\tadd = function ( a ) {\n\t\t\tif ( a.length && ! Array.isArray( a[0] ) ) {\n\t\t\t\t// 1D array\n\t\t\t\tnestedSort.push( a );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// 2D array\n\t\t\t\t$.merge( nestedSort, a );\n\t\t\t}\n\t\t};\n\n\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t// specified\n\tif ( Array.isArray( fixed ) ) {\n\t\tadd( fixed );\n\t}\n\n\tif ( fixedObj && fixed.pre ) {\n\t\tadd( fixed.pre );\n\t}\n\n\tadd( settings.aaSorting );\n\n\tif (fixedObj && fixed.post ) {\n\t\tadd( fixed.post );\n\t}\n\n\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t{\n\t\tsrcCol = nestedSort[i][0];\n\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\n\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t{\n\t\t\tiCol = aDataSort[k];\n\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\n\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t}\n\n\t\t\taSort.push( {\n\t\t\t\tsrc: srcCol,\n\t\t\t\tcol: iCol,\n\t\t\t\tdir: nestedSort[i][1],\n\t\t\t\tindex: nestedSort[i]._idx,\n\t\t\t\ttype: sType,\n\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t} );\n\t\t}\n\t}\n\n\treturn aSort;\n}\n\n/**\n * Change the order of the table\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n * @todo This really needs split up!\n */\nfunction _fnSort ( oSettings )\n{\n\tvar\n\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\tsDataType, nTh,\n\t\taiOrig = [],\n\t\toExtSort = DataTable.ext.type.order,\n\t\taoData = oSettings.aoData,\n\t\taoColumns = oSettings.aoColumns,\n\t\taDataSort, data, iCol, sType, oSort,\n\t\tformatters = 0,\n\t\tsortCol,\n\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\taSort;\n\n\t// Resolve any column types that are unknown due to addition or invalidation\n\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t// data is going to be used in the table?\n\t_fnColumnTypes( oSettings );\n\n\taSort = _fnSortFlatten( oSettings );\n\n\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\tsortCol = aSort[i];\n\n\t\t// Track if we can use the fast sort algorithm\n\t\tif ( sortCol.formatter ) {\n\t\t\tformatters++;\n\t\t}\n\n\t\t// Load the data needed for the sort, for each cell\n\t\t_fnSortData( oSettings, sortCol.col );\n\t}\n\n\t/* No sorting required if server-side or no sorting array */\n\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t{\n\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t}\n\n\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t * fnLocalSorting = function(a,b){\n\t\t * var iTest;\n\t\t * iTest = oSort['string-asc']('data11', 'data12');\n\t\t * if (iTest !== 0)\n\t\t * return iTest;\n\t\t * iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t * if (iTest !== 0)\n\t\t * return iTest;\n\t\t * return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t * }\n\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t * positions in the original data array to provide a stable sort.\n\t\t *\n\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t * methods which do not have a pre-sort formatting function.\n\t\t */\n\t\tif ( formatters === aSort.length ) {\n\t\t\t// All sort types have formatting functions\n\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\tvar\n\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\tsort = aSort[k];\n\n\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tx = aiOrig[a];\n\t\t\t\ty = aiOrig[b];\n\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t// methods.\n\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\tvar\n\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\tsort = aSort[k];\n\n\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\treturn test;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tx = aiOrig[a];\n\t\t\t\ty = aiOrig[b];\n\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t} );\n\t\t}\n\t}\n\n\t/* Tell the draw function that we have sorted the data */\n\toSettings.bSorted = true;\n}\n\n\nfunction _fnSortAria ( settings )\n{\n\tvar label;\n\tvar nextSort;\n\tvar columns = settings.aoColumns;\n\tvar aSort = _fnSortFlatten( settings );\n\tvar oAria = settings.oLanguage.oAria;\n\n\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t// attributes as needed)\n\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t{\n\t\tvar col = columns[i];\n\t\tvar asSorting = col.asSorting;\n\t\tvar sTitle = col.ariaTitle || col.sTitle.replace( /<.*?>/g, \"\" );\n\t\tvar th = col.nTh;\n\n\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t// attr() and removeAttr() methods...\n\t\tth.removeAttribute('aria-sort');\n\n\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\tif ( col.bSortable ) {\n\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnextSort = asSorting[0];\n\t\t\t}\n\n\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\toAria.sSortAscending :\n\t\t\t\toAria.sSortDescending\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tlabel = sTitle;\n\t\t}\n\n\t\tth.setAttribute('aria-label', label);\n\t}\n}\n\n\n/**\n * Function to run on user sort request\n * @param {object} settings dataTables settings object\n * @param {node} attachTo node to attach the handler to\n * @param {int} colIdx column sorting index\n * @param {boolean} [append=false] Append the requested sort to the existing\n * sort if true (i.e. multi-column sort)\n * @param {function} [callback] callback function\n * @memberof DataTable#oApi\n */\nfunction _fnSortListener ( settings, colIdx, append, callback )\n{\n\tvar col = settings.aoColumns[ colIdx ];\n\tvar sorting = settings.aaSorting;\n\tvar asSorting = col.asSorting;\n\tvar nextSortIdx;\n\tvar next = function ( a, overflow ) {\n\t\tvar idx = a._idx;\n\t\tif ( idx === undefined ) {\n\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t}\n\n\t\treturn idx+1 < asSorting.length ?\n\t\t\tidx+1 :\n\t\t\toverflow ?\n\t\t\t\tnull :\n\t\t\t\t0;\n\t};\n\n\t// Convert to 2D array if needed\n\tif ( typeof sorting[0] === 'number' ) {\n\t\tsorting = settings.aaSorting = [ sorting ];\n\t}\n\n\t// If appending the sort then we are multi-column sorting\n\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t// Are we already doing some kind of sort on this column?\n\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\n\t\tif ( sortIdx !== -1 ) {\n\t\t\t// Yes, modify the sort\n\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\n\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t}\n\n\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No sort on this column yet\n\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t}\n\t}\n\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t// Single column - already sorting on this column, modify the sort\n\t\tnextSortIdx = next( sorting[0] );\n\n\t\tsorting.length = 1;\n\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\tsorting[0]._idx = nextSortIdx;\n\t}\n\telse {\n\t\t// Single column - sort only on this column\n\t\tsorting.length = 0;\n\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\tsorting[0]._idx = 0;\n\t}\n\n\t// Run the sort by calling a full redraw\n\t_fnReDraw( settings );\n\n\t// callback used for async user interaction\n\tif ( typeof callback == 'function' ) {\n\t\tcallback( settings );\n\t}\n}\n\n\n/**\n * Attach a sort handler (click) to a node\n * @param {object} settings dataTables settings object\n * @param {node} attachTo node to attach the handler to\n * @param {int} colIdx column sorting index\n * @param {function} [callback] callback function\n * @memberof DataTable#oApi\n */\nfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n{\n\tvar col = settings.aoColumns[ colIdx ];\n\n\t_fnBindAction( attachTo, {}, function (e) {\n\t\t/* If the column is not sortable - don't to anything */\n\t\tif ( col.bSortable === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If processing is enabled use a timeout to allow the processing\n\t\t// display to be shown - otherwise to it synchronously\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t_fnProcessingDisplay( settings, true );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\n\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t// processing display\n\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t}\n\t\t\t}, 0 );\n\t\t}\n\t\telse {\n\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t}\n\t} );\n}\n\n\n/**\n * Set the sorting classes on table's body, Note: it is safe to call this function\n * when bSort and bSortClasses are false\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnSortingClasses( settings )\n{\n\tvar oldSort = settings.aLastSort;\n\tvar sortClass = settings.oClasses.sSortColumn;\n\tvar sort = _fnSortFlatten( settings );\n\tvar features = settings.oFeatures;\n\tvar i, ien, colIdx;\n\n\tif ( features.bSort && features.bSortClasses ) {\n\t\t// Remove old sorting classes\n\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\tcolIdx = oldSort[i].src;\n\n\t\t\t// Remove column sorting\n\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t}\n\n\t\t// Add new column sorting\n\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\tcolIdx = sort[i].src;\n\n\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t}\n\t}\n\n\tsettings.aLastSort = sort;\n}\n\n\n// Get the data to sort a column, be it from cache, fresh (populating the\n// cache), or from a sort formatter\nfunction _fnSortData( settings, idx )\n{\n\t// Custom sorting function - provided by the sort data type\n\tvar column = settings.aoColumns[ idx ];\n\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\tvar customData;\n\n\tif ( customSort ) {\n\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t);\n\t}\n\n\t// Use / populate cache\n\tvar row, cellData;\n\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\n\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\trow = settings.aoData[i];\n\n\t\tif ( ! row._aSortData ) {\n\t\t\trow._aSortData = [];\n\t\t}\n\n\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\tcellData = customSort ?\n\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\n\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\tformatter( cellData ) :\n\t\t\t\tcellData;\n\t\t}\n\t}\n}\n\n\n\n/**\n * Save the state of a table\n * @param {object} oSettings dataTables settings object\n * @memberof DataTable#oApi\n */\nfunction _fnSaveState ( settings )\n{\n\tif (settings._bLoadingState) {\n\t\treturn;\n\t}\n\n\t/* Store the interesting variables */\n\tvar state = {\n\t\ttime: +new Date(),\n\t\tstart: settings._iDisplayStart,\n\t\tlength: settings._iDisplayLength,\n\t\torder: $.extend( true, [], settings.aaSorting ),\n\t\tsearch: _fnSearchToCamel( settings.oPreviousSearch ),\n\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\treturn {\n\t\t\t\tvisible: col.bVisible,\n\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t};\n\t\t} )\n\t};\n\n\tsettings.oSavedState = state;\n\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\n\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t{\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t}\t\n}\n\n\n/**\n * Attempt to load a saved table state\n * @param {object} oSettings dataTables settings object\n * @param {object} oInit DataTables init object so we can override settings\n * @param {function} callback Callback to execute when the state has been loaded\n * @memberof DataTable#oApi\n */\nfunction _fnLoadState ( settings, oInit, callback )\n{\n\tif ( ! settings.oFeatures.bStateSave ) {\n\t\tcallback();\n\t\treturn;\n\t}\n\n\tvar loaded = function(state) {\n\t\t_fnImplementState(settings, state, callback);\n\t}\n\n\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\n\tif ( state !== undefined ) {\n\t\t_fnImplementState( settings, state, callback );\n\t}\n\t// otherwise, wait for the loaded callback to be executed\n\n\treturn true;\n}\n\nfunction _fnImplementState ( settings, s, callback) {\n\tvar i, ien;\n\tvar columns = settings.aoColumns;\n\tsettings._bLoadingState = true;\n\n\t// When StateRestore was introduced the state could now be implemented at any time\n\t// Not just initialisation. To do this an api instance is required in some places\n\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\n\tif ( ! s || ! s.time ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t// cancelling of loading by returning false\n\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Reject old data\n\tvar duration = settings.iStateDuration;\n\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Number of columns have changed - all bets are off, no restore of settings\n\tif ( s.columns && columns.length !== s.columns.length ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Store the saved state so it might be accessed at any time\n\tsettings.oLoadedState = $.extend( true, {}, s );\n\n\t// Page Length\n\tif ( s.length !== undefined ) {\n\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\tif (api) {\n\t\t\tapi.page.len(s.length)\n\t\t}\n\t\telse {\n\t\t\tsettings._iDisplayLength = s.length;\n\t\t}\n\t}\n\n\t// Restore key features - todo - for 1.11 this needs to be done by\n\t// subscribed events\n\tif ( s.start !== undefined ) {\n\t\tif(api === null) {\n\t\t\tsettings._iDisplayStart = s.start;\n\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t}\n\t\telse {\n\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t}\n\t}\n\n\t// Order\n\tif ( s.order !== undefined ) {\n\t\tsettings.aaSorting = [];\n\t\t$.each( s.order, function ( i, col ) {\n\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t[ 0, col[1] ] :\n\t\t\t\tcol\n\t\t\t);\n\t\t} );\n\t}\n\n\t// Search\n\tif ( s.search !== undefined ) {\n\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );\n\t}\n\n\t// Columns\n\tif ( s.columns ) {\n\t\tfor ( i=0, ien=s.columns.length ; i<ien ; i++ ) {\n\t\t\tvar col = s.columns[i];\n\n\t\t\t// Visibility\n\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\tif (api) {\n\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Search\n\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t}\n\t\t}\n\t\t\n\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\tif (api) {\n\t\t\tapi.columns.adjust();\n\t\t}\n\t}\n\n\tsettings._bLoadingState = false;\n\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\tcallback();\n};\n\n\n/**\n * Return the settings object for a particular table\n * @param {node} table table we are using as a dataTable\n * @returns {object} Settings object - or null if not found\n * @memberof DataTable#oApi\n */\nfunction _fnSettingsFromNode ( table )\n{\n\tvar settings = DataTable.settings;\n\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\n\treturn idx !== -1 ?\n\t\tsettings[ idx ] :\n\t\tnull;\n}\n\n\n/**\n * Log an error message\n * @param {object} settings dataTables settings object\n * @param {int} level log error messages, or display them to the user\n * @param {string} msg error message\n * @param {int} tn Technical note id to get more information about the error.\n * @memberof DataTable#oApi\n */\nfunction _fnLog( settings, level, msg, tn )\n{\n\tmsg = 'DataTables warning: '+\n\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\n\tif ( tn ) {\n\t\tmsg += '. For more information about this error, please see '+\n\t\t'https://datatables.net/tn/'+tn;\n\t}\n\n\tif ( ! level ) {\n\t\t// Backwards compatibility pre 1.10\n\t\tvar ext = DataTable.ext;\n\t\tvar type = ext.sErrMode || ext.errMode;\n\n\t\tif ( settings ) {\n\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\t}\n\n\t\tif ( type == 'alert' ) {\n\t\t\talert( msg );\n\t\t}\n\t\telse if ( type == 'throw' ) {\n\t\t\tthrow new Error(msg);\n\t\t}\n\t\telse if ( typeof type == 'function' ) {\n\t\t\ttype( settings, tn, msg );\n\t\t}\n\t}\n\telse if ( window.console && console.log ) {\n\t\tconsole.log( msg );\n\t}\n}\n\n\n/**\n * See if a property is defined on one object, if so assign it to the other object\n * @param {object} ret target object\n * @param {object} src source object\n * @param {string} name property\n * @param {string} [mappedName] name to map too - optional, name used if not given\n * @memberof DataTable#oApi\n */\nfunction _fnMap( ret, src, name, mappedName )\n{\n\tif ( Array.isArray( name ) ) {\n\t\t$.each( name, function (i, val) {\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnMap( ret, src, val );\n\t\t\t}\n\t\t} );\n\n\t\treturn;\n\t}\n\n\tif ( mappedName === undefined ) {\n\t\tmappedName = name;\n\t}\n\n\tif ( src[name] !== undefined ) {\n\t\tret[mappedName] = src[name];\n\t}\n}\n\n\n/**\n * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n * shallow copy arrays. The reason we need to do this, is that we don't want to\n * deep copy array init values (such as aaSorting) since the dev wouldn't be\n * able to override them, but we do want to deep copy arrays.\n * @param {object} out Object to extend\n * @param {object} extender Object from which the properties will be applied to\n * out\n * @param {boolean} breakRefs If true, then arrays will be sliced to take an\n * independent copy with the exception of the `data` or `aaData` parameters\n * if they are present. This is so you can pass in a collection to\n * DataTables and have that used as your data source without breaking the\n * references\n * @returns {object} out Reference, just for convenience - out === the return.\n * @memberof DataTable#oApi\n * @todo This doesn't take account of arrays inside the deep copied objects.\n */\nfunction _fnExtend( out, extender, breakRefs )\n{\n\tvar val;\n\n\tfor ( var prop in extender ) {\n\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\tval = extender[prop];\n\n\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\tout[prop] = {};\n\t\t\t\t}\n\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t}\n\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\tout[prop] = val.slice();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tout[prop] = val;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\n\n/**\n * Bind an event handers to allow a click or return key to activate the callback.\n * This is good for accessibility since a return on the keyboard will have the\n * same effect as a click, if the element has focus.\n * @param {element} n Element to bind the action to\n * @param {object} oData Data object to pass to the triggered function\n * @param {function} fn Callback function for when the event is triggered\n * @memberof DataTable#oApi\n */\nfunction _fnBindAction( n, oData, fn )\n{\n\t$(n)\n\t\t.on( 'click.DT', oData, function (e) {\n\t\t\t\t$(n).trigger('blur'); // Remove focus outline for mouse users\n\t\t\t\tfn(e);\n\t\t\t} )\n\t\t.on( 'keypress.DT', oData, function (e){\n\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfn(e);\n\t\t\t\t}\n\t\t\t} )\n\t\t.on( 'selectstart.DT', function () {\n\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\treturn false;\n\t\t\t} );\n}\n\n\n/**\n * Register a callback function. Easily allows a callback function to be added to\n * an array store of callback functions that can then all be called together.\n * @param {object} oSettings dataTables settings object\n * @param {string} sStore Name of the array storage for the callbacks in oSettings\n * @param {function} fn Function to be called back\n * @param {string} sName Identifying name for the callback (i.e. a label)\n * @memberof DataTable#oApi\n */\nfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n{\n\tif ( fn )\n\t{\n\t\toSettings[sStore].push( {\n\t\t\t\"fn\": fn,\n\t\t\t\"sName\": sName\n\t\t} );\n\t}\n}\n\n\n/**\n * Fire callback functions and trigger events. Note that the loop over the\n * callback array store is done backwards! Further note that you do not want to\n * fire off triggers in time sensitive applications (for example cell creation)\n * as its slow.\n * @param {object} settings dataTables settings object\n * @param {string} callbackArr Name of the array storage for the callbacks in\n * oSettings\n * @param {string} eventName Name of the jQuery custom event to trigger. If\n * null no trigger is fired\n * @param {array} args Array of arguments to pass to the callback function /\n * trigger\n * @memberof DataTable#oApi\n */\nfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n{\n\tvar ret = [];\n\n\tif ( callbackArr ) {\n\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t} );\n\t}\n\n\tif ( eventName !== null ) {\n\t\tvar e = $.Event( eventName+'.dt' );\n\t\tvar table = $(settings.nTable);\n\n\t\ttable.trigger( e, args );\n\n\t\t// If not yet attached to the document, trigger the event\n\t\t// on the body directly to sort of simulate the bubble\n\t\tif (table.parents('body').length === 0) {\n\t\t\t$('body').trigger( e, args );\n\t\t}\n\n\t\tret.push( e.result );\n\t}\n\n\treturn ret;\n}\n\n\nfunction _fnLengthOverflow ( settings )\n{\n\tvar\n\t\tstart = settings._iDisplayStart,\n\t\tend = settings.fnDisplayEnd(),\n\t\tlen = settings._iDisplayLength;\n\n\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\tif ( start >= end )\n\t{\n\t\tstart = end - len;\n\t}\n\n\t// Keep the start record on the current page\n\tstart -= (start % len);\n\n\tif ( len === -1 || start < 0 )\n\t{\n\t\tstart = 0;\n\t}\n\n\tsettings._iDisplayStart = start;\n}\n\n\nfunction _fnRenderer( settings, type )\n{\n\tvar renderer = settings.renderer;\n\tvar host = DataTable.ext.renderer[type];\n\n\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t// the default.\n\t\treturn host[renderer[type]] || host._;\n\t}\n\telse if ( typeof renderer === 'string' ) {\n\t\t// Common renderer - if there is one available for this type use it,\n\t\t// otherwise use the default\n\t\treturn host[renderer] || host._;\n\t}\n\n\t// Use the default\n\treturn host._;\n}\n\n\n/**\n * Detect the data source being used for the table. Used to simplify the code\n * a little (ajax) and to make it compress a little smaller.\n *\n * @param {object} settings dataTables settings object\n * @returns {string} Data source\n * @memberof DataTable#oApi\n */\nfunction _fnDataSource ( settings )\n{\n\tif ( settings.oFeatures.bServerSide ) {\n\t\treturn 'ssp';\n\t}\n\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\treturn 'ajax';\n\t}\n\treturn 'dom';\n}\n\n\n\n\n/**\n * Computed structure of the DataTables API, defined by the options passed to\n * `DataTable.Api.register()` when building the API.\n *\n * The structure is built in order to speed creation and extension of the Api\n * objects since the extensions are effectively pre-parsed.\n *\n * The array is an array of objects with the following structure, where this\n * base array represents the Api prototype base:\n *\n * [\n * {\n * name: 'data' -- string - Property name\n * val: function () {}, -- function - Api method (or undefined if just an object\n * methodExt: [ ... ], -- array - Array of Api object definitions to extend the method result\n * propExt: [ ... ] -- array - Array of Api object definitions to extend the property\n * },\n * {\n * name: 'row'\n * val: {},\n * methodExt: [ ... ],\n * propExt: [\n * {\n * name: 'data'\n * val: function () {},\n * methodExt: [ ... ],\n * propExt: [ ... ]\n * },\n * ...\n * ]\n * }\n * ]\n *\n * @type {Array}\n * @ignore\n */\nvar __apiStruct = [];\n\n\n/**\n * `Array.prototype` reference.\n *\n * @type object\n * @ignore\n */\nvar __arrayProto = Array.prototype;\n\n\n/**\n * Abstraction for `context` parameter of the `Api` constructor to allow it to\n * take several different forms for ease of use.\n *\n * Each of the input parameter types will be converted to a DataTables settings\n * object where possible.\n *\n * @param {string|node|jQuery|object} mixed DataTable identifier. Can be one\n * of:\n *\n * * `string` - jQuery selector. Any DataTables' matching the given selector\n * with be found and used.\n * * `node` - `TABLE` node which has already been formed into a DataTable.\n * * `jQuery` - A jQuery object of `TABLE` nodes.\n * * `object` - DataTables settings object\n * * `DataTables.Api` - API instance\n * @return {array|null} Matching DataTables settings objects. `null` or\n * `undefined` is returned if no matching DataTable is found.\n * @ignore\n */\nvar _toSettings = function ( mixed )\n{\n\tvar idx, jq;\n\tvar settings = DataTable.settings;\n\tvar tables = $.map( settings, function (el, i) {\n\t\treturn el.nTable;\n\t} );\n\n\tif ( ! mixed ) {\n\t\treturn [];\n\t}\n\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t// DataTables settings object\n\t\treturn [ mixed ];\n\t}\n\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t// Table node\n\t\tidx = $.inArray( mixed, tables );\n\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t}\n\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\treturn mixed.settings().toArray();\n\t}\n\telse if ( typeof mixed === 'string' ) {\n\t\t// jQuery selector\n\t\tjq = $(mixed);\n\t}\n\telse if ( mixed instanceof $ ) {\n\t\t// jQuery object (also DataTables instance)\n\t\tjq = mixed;\n\t}\n\n\tif ( jq ) {\n\t\treturn jq.map( function(i) {\n\t\t\tidx = $.inArray( this, tables );\n\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t} ).toArray();\n\t}\n};\n\n\n/**\n * DataTables API class - used to control and interface with one or more\n * DataTables enhanced tables.\n *\n * The API class is heavily based on jQuery, presenting a chainable interface\n * that you can use to interact with tables. Each instance of the API class has\n * a \"context\" - i.e. the tables that it will operate on. This could be a single\n * table, all tables on a page or a sub-set thereof.\n *\n * Additionally the API is designed to allow you to easily work with the data in\n * the tables, retrieving and manipulating it as required. This is done by\n * presenting the API class as an array like interface. The contents of the\n * array depend upon the actions requested by each method (for example\n * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n * return an array of objects or arrays depending upon your table's\n * configuration). The API object has a number of array like methods (`push`,\n * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n * `unique` etc) to assist your working with the data held in a table.\n *\n * Most methods (those which return an Api instance) are chainable, which means\n * the return from a method call also has all of the methods available that the\n * top level object had. For example, these two calls are equivalent:\n *\n * // Not chained\n * api.row.add( {...} );\n * api.draw();\n *\n * // Chained\n * api.row.add( {...} ).draw();\n *\n * @class DataTable.Api\n * @param {array|object|string|jQuery} context DataTable identifier. This is\n * used to define which DataTables enhanced tables this API will operate on.\n * Can be one of:\n *\n * * `string` - jQuery selector. Any DataTables' matching the given selector\n * with be found and used.\n * * `node` - `TABLE` node which has already been formed into a DataTable.\n * * `jQuery` - A jQuery object of `TABLE` nodes.\n * * `object` - DataTables settings object\n * @param {array} [data] Data to initialise the Api instance with.\n *\n * @example\n * // Direct initialisation during DataTables construction\n * var api = $('#example').DataTable();\n *\n * @example\n * // Initialisation using a DataTables jQuery object\n * var api = $('#example').dataTable().api();\n *\n * @example\n * // Initialisation as a constructor\n * var api = new $.fn.DataTable.Api( 'table.dataTable' );\n */\n_Api = function ( context, data )\n{\n\tif ( ! (this instanceof _Api) ) {\n\t\treturn new _Api( context, data );\n\t}\n\n\tvar settings = [];\n\tvar ctxSettings = function ( o ) {\n\t\tvar a = _toSettings( o );\n\t\tif ( a ) {\n\t\t\tsettings.push.apply( settings, a );\n\t\t}\n\t};\n\n\tif ( Array.isArray( context ) ) {\n\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tctxSettings( context[i] );\n\t\t}\n\t}\n\telse {\n\t\tctxSettings( context );\n\t}\n\n\t// Remove duplicates\n\tthis.context = _unique( settings );\n\n\t// Initial data\n\tif ( data ) {\n\t\t$.merge( this, data );\n\t}\n\n\t// selector\n\tthis.selector = {\n\t\trows: null,\n\t\tcols: null,\n\t\topts: null\n\t};\n\n\t_Api.extend( this, this, __apiStruct );\n};\n\nDataTable.Api = _Api;\n\n// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n// isPlainObject.\n$.extend( _Api.prototype, {\n\tany: function ()\n\t{\n\t\treturn this.count() !== 0;\n\t},\n\n\n\tconcat: __arrayProto.concat,\n\n\n\tcontext: [], // array of table settings objects\n\n\n\tcount: function ()\n\t{\n\t\treturn this.flatten().length;\n\t},\n\n\n\teach: function ( fn )\n\t{\n\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\tfn.call( this, this[i], i, this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\n\teq: function ( idx )\n\t{\n\t\tvar ctx = this.context;\n\n\t\treturn ctx.length > idx ?\n\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\tnull;\n\t},\n\n\n\tfilter: function ( fn )\n\t{\n\t\tvar a = [];\n\n\t\tif ( __arrayProto.filter ) {\n\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t}\n\t\telse {\n\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\ta.push( this[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new _Api( this.context, a );\n\t},\n\n\n\tflatten: function ()\n\t{\n\t\tvar a = [];\n\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t},\n\n\n\tjoin: __arrayProto.join,\n\n\n\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t{\n\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\tif ( this[i] === obj ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\tvar\n\t\t\ta = [], ret,\n\t\t\ti, ien, j, jen,\n\t\t\tcontext = this.context,\n\t\t\trows, items, item,\n\t\t\tselector = this.selector;\n\n\t\t// Argument shifting\n\t\tif ( typeof flatten === 'string' ) {\n\t\t\talwaysNew = fn;\n\t\t\tfn = type;\n\t\t\ttype = flatten;\n\t\t\tflatten = false;\n\t\t}\n\n\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tvar apiInst = new _Api( context[i] );\n\n\t\t\tif ( type === 'table' ) {\n\t\t\t\tret = fn.call( apiInst, context[i], i );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\ta.push( ret );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\ta.push( ret );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\titems = this[i];\n\n\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t}\n\n\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\titem = items[j];\n\n\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( a.length || alwaysNew ) {\n\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\tvar apiSelector = api.selector;\n\t\t\tapiSelector.rows = selector.rows;\n\t\t\tapiSelector.cols = selector.cols;\n\t\t\tapiSelector.opts = selector.opts;\n\t\t\treturn api;\n\t\t}\n\t\treturn this;\n\t},\n\n\n\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t{\n\t\t// Bit cheeky...\n\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t},\n\n\n\tlength: 0,\n\n\n\tmap: function ( fn )\n\t{\n\t\tvar a = [];\n\n\t\tif ( __arrayProto.map ) {\n\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t}\n\t\telse {\n\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t}\n\t\t}\n\n\t\treturn new _Api( this.context, a );\n\t},\n\n\n\tpluck: function ( prop )\n\t{\n\t\tvar fn = DataTable.util.get(prop);\n\n\t\treturn this.map( function ( el ) {\n\t\t\treturn fn(el);\n\t\t} );\n\t},\n\n\tpop: __arrayProto.pop,\n\n\n\tpush: __arrayProto.push,\n\n\n\t// Does not return an API instance\n\treduce: __arrayProto.reduce || function ( fn, init )\n\t{\n\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t},\n\n\n\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t{\n\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t},\n\n\n\treverse: __arrayProto.reverse,\n\n\n\t// Object with rows, columns and opts\n\tselector: null,\n\n\n\tshift: __arrayProto.shift,\n\n\n\tslice: function () {\n\t\treturn new _Api( this.context, this );\n\t},\n\n\n\tsort: __arrayProto.sort, // ? name - order?\n\n\n\tsplice: __arrayProto.splice,\n\n\n\ttoArray: function ()\n\t{\n\t\treturn __arrayProto.slice.call( this );\n\t},\n\n\n\tto$: function ()\n\t{\n\t\treturn $( this );\n\t},\n\n\n\ttoJQuery: function ()\n\t{\n\t\treturn $( this );\n\t},\n\n\n\tunique: function ()\n\t{\n\t\treturn new _Api( this.context, _unique(this) );\n\t},\n\n\n\tunshift: __arrayProto.unshift\n} );\n\n\n_Api.extend = function ( scope, obj, ext )\n{\n\t// Only extend API instances and static properties of the API\n\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\treturn;\n\t}\n\n\tvar\n\t\ti, ien,\n\t\tstruct,\n\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\treturn function () {\n\t\t\t\tvar ret = fn.apply( scope, arguments );\n\n\t\t\t\t// Method extension\n\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\treturn ret;\n\t\t\t};\n\t\t};\n\n\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\tstruct = ext[i];\n\n\t\t// Value\n\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\tstruct.type === 'object' ?\n\t\t\t\t{} :\n\t\t\t\tstruct.val;\n\n\t\tobj[ struct.name ].__dt_wrapper = true;\n\n\t\t// Property extension\n\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t}\n};\n\n\n// @todo - Is there need for an augment function?\n// _Api.augment = function ( inst, name )\n// {\n// \t// Find src object in the structure from the name\n// \tvar parts = name.split('.');\n\n// \t_Api.extend( inst, obj );\n// };\n\n\n// [\n// {\n// name: 'data' -- string - Property name\n// val: function () {}, -- function - Api method (or undefined if just an object\n// methodExt: [ ... ], -- array - Array of Api object definitions to extend the method result\n// propExt: [ ... ] -- array - Array of Api object definitions to extend the property\n// },\n// {\n// name: 'row'\n// val: {},\n// methodExt: [ ... ],\n// propExt: [\n// {\n// name: 'data'\n// val: function () {},\n// methodExt: [ ... ],\n// propExt: [ ... ]\n// },\n// ...\n// ]\n// }\n// ]\n\n_Api.register = _api_register = function ( name, val )\n{\n\tif ( Array.isArray( name ) ) {\n\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t_Api.register( name[j], val );\n\t\t}\n\t\treturn;\n\t}\n\n\tvar\n\t\ti, ien,\n\t\their = name.split('.'),\n\t\tstruct = __apiStruct,\n\t\tkey, method;\n\n\tvar find = function ( src, name ) {\n\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\tif ( src[i].name === name ) {\n\t\t\t\treturn src[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\tkey = method ?\n\t\t\their[i].replace('()', '') :\n\t\t\their[i];\n\n\t\tvar src = find( struct, key );\n\t\tif ( ! src ) {\n\t\t\tsrc = {\n\t\t\t\tname: key,\n\t\t\t\tval: {},\n\t\t\t\tmethodExt: [],\n\t\t\t\tpropExt: [],\n\t\t\t\ttype: 'object'\n\t\t\t};\n\t\t\tstruct.push( src );\n\t\t}\n\n\t\tif ( i === ien-1 ) {\n\t\t\tsrc.val = val;\n\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t'function' :\n\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t'object' :\n\t\t\t\t\t'other';\n\t\t}\n\t\telse {\n\t\t\tstruct = method ?\n\t\t\t\tsrc.methodExt :\n\t\t\t\tsrc.propExt;\n\t\t}\n\t}\n};\n\n_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t_Api.register( pluralName, val );\n\n\t_Api.register( singularName, function () {\n\t\tvar ret = val.apply( this, arguments );\n\n\t\tif ( ret === this ) {\n\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\treturn this;\n\t\t}\n\t\telse if ( ret instanceof _Api ) {\n\t\t\t// New API instance returned, want the value from the first item\n\t\t\t// in the returned array for the singular result.\n\t\t\treturn ret.length ?\n\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\tret[0] :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// Non-API return - just fire it back\n\t\treturn ret;\n\t} );\n};\n\n\n/**\n * Selector for HTML tables. Apply the given selector to the give array of\n * DataTables settings objects.\n *\n * @param {string|integer} [selector] jQuery selector string or integer\n * @param {array} Array of DataTables settings objects to be filtered\n * @return {array}\n * @ignore\n */\nvar __table_selector = function ( selector, a )\n{\n\tif ( Array.isArray(selector) ) {\n\t\treturn $.map( selector, function (item) {\n\t\t\treturn __table_selector(item, a);\n\t\t} );\n\t}\n\n\t// Integer is used to pick out a table by index\n\tif ( typeof selector === 'number' ) {\n\t\treturn [ a[ selector ] ];\n\t}\n\n\t// Perform a jQuery selector on the table nodes\n\tvar nodes = $.map( a, function (el, i) {\n\t\treturn el.nTable;\n\t} );\n\n\treturn $(nodes)\n\t\t.filter( selector )\n\t\t.map( function (i) {\n\t\t\t// Need to translate back from the table node to the settings\n\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\treturn a[ idx ];\n\t\t} )\n\t\t.toArray();\n};\n\n\n\n/**\n * Context selector for the API's context (i.e. the tables the API instance\n * refers to.\n *\n * @name DataTable.Api#tables\n * @param {string|integer} [selector] Selector to pick which tables the iterator\n * should operate on. If not given, all tables in the current context are\n * used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n * select multiple tables or as an integer to select a single table.\n * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n */\n_api_register( 'tables()', function ( selector ) {\n\t// A new instance is created if there was a selector specified\n\treturn selector !== undefined && selector !== null ?\n\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\tthis;\n} );\n\n\n_api_register( 'table()', function ( selector ) {\n\tvar tables = this.tables( selector );\n\tvar ctx = tables.context;\n\n\t// Truncate to the first matched table\n\treturn ctx.length ?\n\t\tnew _Api( ctx[0] ) :\n\t\ttables;\n} );\n\n\n_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTable;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTBody;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTHead;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTFoot;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTableWrapper;\n\t}, 1 );\n} );\n\n\n\n/**\n * Redraw the tables in the current context.\n */\n_api_register( 'draw()', function ( paging ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( paging === 'page' ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\t\telse {\n\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\tfalse :\n\t\t\t\t\ttrue;\n\t\t\t}\n\n\t\t\t_fnReDraw( settings, paging===false );\n\t\t}\n\t} );\n} );\n\n\n\n/**\n * Get the current page index.\n *\n * @return {integer} Current page index (zero based)\n *//**\n * Set the current page.\n *\n * Note that if you attempt to show a page which does not exist, DataTables will\n * not throw an error, but rather reset the paging.\n *\n * @param {integer|string} action The paging action to take. This can be one of:\n * * `integer` - The page index to jump to\n * * `string` - An action to take:\n * * `first` - Jump to first page.\n * * `next` - Jump to the next page\n * * `previous` - Jump to previous page\n * * `last` - Jump to the last page.\n * @returns {DataTables.Api} this\n */\n_api_register( 'page()', function ( action ) {\n\tif ( action === undefined ) {\n\t\treturn this.page.info().page; // not an expensive call\n\t}\n\n\t// else, have an action to take on all tables\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnPageChange( settings, action );\n\t} );\n} );\n\n\n/**\n * Paging information for the first table in the current context.\n *\n * If you require paging information for another table, use the `table()` method\n * with a suitable selector.\n *\n * @return {object} Object with the following properties set:\n * * `page` - Current page index (zero based - i.e. the first page is `0`)\n * * `pages` - Total number of pages\n * * `start` - Display index for the first record shown on the current page\n * * `end` - Display index for the last record shown on the current page\n * * `length` - Display length (number of records). Note that generally `start\n * + length = end`, but this is not always true, for example if there are\n * only 2 records to show on the final page, with a length of 10.\n * * `recordsTotal` - Full data set length\n * * `recordsDisplay` - Data set length once the current filtering criterion\n * are applied.\n */\n_api_register( 'page.info()', function ( action ) {\n\tif ( this.context.length === 0 ) {\n\t\treturn undefined;\n\t}\n\n\tvar\n\t\tsettings = this.context[0],\n\t\tstart = settings._iDisplayStart,\n\t\tlen = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\tall = len === -1;\n\n\treturn {\n\t\t\"page\": all ? 0 : Math.floor( start / len ),\n\t\t\"pages\": all ? 1 : Math.ceil( visRecords / len ),\n\t\t\"start\": start,\n\t\t\"end\": settings.fnDisplayEnd(),\n\t\t\"length\": len,\n\t\t\"recordsTotal\": settings.fnRecordsTotal(),\n\t\t\"recordsDisplay\": visRecords,\n\t\t\"serverSide\": _fnDataSource( settings ) === 'ssp'\n\t};\n} );\n\n\n/**\n * Get the current page length.\n *\n * @return {integer} Current page length. Note `-1` indicates that all records\n * are to be shown.\n *//**\n * Set the current page length.\n *\n * @param {integer} Page length to set. Use `-1` to show all records.\n * @returns {DataTables.Api} this\n */\n_api_register( 'page.len()', function ( len ) {\n\t// Note that we can't call this function 'length()' because `length`\n\t// is a Javascript property of functions which defines how many arguments\n\t// the function expects.\n\tif ( len === undefined ) {\n\t\treturn this.context.length !== 0 ?\n\t\t\tthis.context[0]._iDisplayLength :\n\t\t\tundefined;\n\t}\n\n\t// else, set the page length\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnLengthChange( settings, len );\n\t} );\n} );\n\n\n\nvar __reload = function ( settings, holdPosition, callback ) {\n\t// Use the draw event to trigger a callback\n\tif ( callback ) {\n\t\tvar api = new _Api( settings );\n\n\t\tapi.one( 'draw', function () {\n\t\t\tcallback( api.ajax.json() );\n\t\t} );\n\t}\n\n\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t_fnReDraw( settings, holdPosition );\n\t}\n\telse {\n\t\t_fnProcessingDisplay( settings, true );\n\n\t\t// Cancel an existing request\n\t\tvar xhr = settings.jqXHR;\n\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\txhr.abort();\n\t\t}\n\n\t\t// Trigger xhr\n\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t_fnClearTable( settings );\n\n\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t}\n\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t_fnProcessingDisplay( settings, false );\n\t\t} );\n\t}\n};\n\n\n/**\n * Get the JSON response from the last Ajax request that DataTables made to the\n * server. Note that this returns the JSON from the first table in the current\n * context.\n *\n * @return {object} JSON received from the server.\n */\n_api_register( 'ajax.json()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length > 0 ) {\n\t\treturn ctx[0].json;\n\t}\n\n\t// else return undefined;\n} );\n\n\n/**\n * Get the data submitted in the last Ajax request\n */\n_api_register( 'ajax.params()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length > 0 ) {\n\t\treturn ctx[0].oAjaxData;\n\t}\n\n\t// else return undefined;\n} );\n\n\n/**\n * Reload tables from the Ajax data source. Note that this function will\n * automatically re-draw the table when the remote data has been loaded.\n *\n * @param {boolean} [reset=true] Reset (default) or hold the current paging\n * position. A full re-sort and re-filter is performed when this method is\n * called, which is why the pagination reset is the default action.\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\treturn this.iterator( 'table', function (settings) {\n\t\t__reload( settings, resetPaging===false, callback );\n\t} );\n} );\n\n\n/**\n * Get the current Ajax URL. Note that this returns the URL from the first\n * table in the current context.\n *\n * @return {string} Current Ajax source URL\n *//**\n * Set the Ajax URL. Note that this will set the URL for all tables in the\n * current context.\n *\n * @param {string} url URL to set.\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.url()', function ( url ) {\n\tvar ctx = this.context;\n\n\tif ( url === undefined ) {\n\t\t// get\n\t\tif ( ctx.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tctx = ctx[0];\n\n\t\treturn ctx.ajax ?\n\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\tctx.ajax.url :\n\t\t\t\tctx.ajax :\n\t\t\tctx.sAjaxSource;\n\t}\n\n\t// set\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\tsettings.ajax.url = url;\n\t\t}\n\t\telse {\n\t\t\tsettings.ajax = url;\n\t\t}\n\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t// value of `sAjaxSource` redundant.\n\t} );\n} );\n\n\n/**\n * Load data from the newly set Ajax URL. Note that this method is only\n * available when `ajax.url()` is used to set a URL. Additionally, this method\n * has the same effect as calling `ajax.reload()` but is provided for\n * convenience when setting a new URL. Like `ajax.reload()` it will\n * automatically redraw the table once the remote data has been loaded.\n *\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t// Same as a reload, but makes sense to present it for easy access after a\n\t// url change\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\t__reload( ctx, resetPaging===false, callback );\n\t} );\n} );\n\n\n\n\nvar _selector_run = function ( type, selector, selectFn, settings, opts )\n{\n\tvar\n\t\tout = [], res,\n\t\ta, i, ien, j, jen,\n\t\tselectorType = typeof selector;\n\n\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t// given with their array like look\n\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\tselector = [ selector ];\n\t}\n\n\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t// Only split on simple strings - complex expressions will be jQuery selectors\n\t\ta = selector[i] && selector[i].split && ! selector[i].match(/[\\[\\(:]/) ?\n\t\t\tselector[i].split(',') :\n\t\t\t[ selector[i] ];\n\n\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\tres = selectFn( typeof a[j] === 'string' ? (a[j]).trim() : a[j] );\n\n\t\t\tif ( res && res.length ) {\n\t\t\t\tout = out.concat( res );\n\t\t\t}\n\t\t}\n\t}\n\n\t// selector extensions\n\tvar ext = _ext.selector[ type ];\n\tif ( ext.length ) {\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tout = ext[i]( settings, opts, out );\n\t\t}\n\t}\n\n\treturn _unique( out );\n};\n\n\nvar _selector_opts = function ( opts )\n{\n\tif ( ! opts ) {\n\t\topts = {};\n\t}\n\n\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t// than search\n\tif ( opts.filter && opts.search === undefined ) {\n\t\topts.search = opts.filter;\n\t}\n\n\treturn $.extend( {\n\t\tsearch: 'none',\n\t\torder: 'current',\n\t\tpage: 'all'\n\t}, opts );\n};\n\n\nvar _selector_first = function ( inst )\n{\n\t// Reduce the API instance to the first item found\n\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\tif ( inst[i].length > 0 ) {\n\t\t\t// Assign the first element to the first item in the instance\n\t\t\t// and truncate the instance and context\n\t\t\tinst[0] = inst[i];\n\t\t\tinst[0].length = 1;\n\t\t\tinst.length = 1;\n\t\t\tinst.context = [ inst.context[i] ];\n\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\t// Not found - return an empty instance\n\tinst.length = 0;\n\treturn inst;\n};\n\n\nvar _selector_row_indexes = function ( settings, opts )\n{\n\tvar\n\t\ti, ien, tmp, a=[],\n\t\tdisplayFiltered = settings.aiDisplay,\n\t\tdisplayMaster = settings.aiDisplayMaster;\n\n\tvar\n\t\tsearch = opts.search, // none, applied, removed\n\t\torder = opts.order, // applied, current, index (original - compatibility with 1.9)\n\t\tpage = opts.page; // all, current\n\n\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t// In server-side processing mode, most options are irrelevant since\n\t\t// rows not shown don't exist and the index order is the applied order\n\t\t// Removed is a special case - for consistency just return an empty\n\t\t// array\n\t\treturn search === 'removed' ?\n\t\t\t[] :\n\t\t\t_range( 0, displayMaster.length );\n\t}\n\telse if ( page == 'current' ) {\n\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t// are\n\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\ta.push( displayFiltered[i] );\n\t\t}\n\t}\n\telse if ( order == 'current' || order == 'applied' ) {\n\t\tif ( search == 'none') {\n\t\t\ta = displayMaster.slice();\n\t\t}\n\t\telse if ( search == 'applied' ) {\n\t\t\ta = displayFiltered.slice();\n\t\t}\n\t\telse if ( search == 'removed' ) {\n\t\t\t// O(n+m) solution by creating a hash map\n\t\t\tvar displayFilteredMap = {};\n\n\t\t\tfor ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {\n\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t}\n\n\t\t\ta = $.map( displayMaster, function (el) {\n\t\t\t\treturn ! displayFilteredMap.hasOwnProperty(el) ?\n\t\t\t\t\tel :\n\t\t\t\t\tnull;\n\t\t\t} );\n\t\t}\n\t}\n\telse if ( order == 'index' || order == 'original' ) {\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\tif ( search == 'none' ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t\telse { // applied | removed\n\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\n\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t(tmp >= 0 && search == 'applied') )\n\t\t\t\t{\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a;\n};\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Rows\n *\n * {} - no selector - use all available rows\n * {integer} - row aoData index\n * {node} - TR node\n * {string} - jQuery selector to apply to the TR elements\n * {array} - jQuery array of nodes, or simply an array of TR nodes\n *\n */\nvar __row_selector = function ( settings, selector, opts )\n{\n\tvar rows;\n\tvar run = function ( sel ) {\n\t\tvar selInt = _intVal( sel );\n\t\tvar i, ien;\n\t\tvar aoData = settings.aoData;\n\n\t\t// Short cut - selector is a number and no options provided (default is\n\t\t// all records, so no need to check if the index is in there, since it\n\t\t// must be - dev error if the index doesn't exist).\n\t\tif ( selInt !== null && ! opts ) {\n\t\t\treturn [ selInt ];\n\t\t}\n\n\t\tif ( ! rows ) {\n\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t}\n\n\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t// Selector - integer\n\t\t\treturn [ selInt ];\n\t\t}\n\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t// Selector - none\n\t\t\treturn rows;\n\t\t}\n\n\t\t// Selector - function\n\t\tif ( typeof sel === 'function' ) {\n\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t} );\n\t\t}\n\n\t\t// Selector - node\n\t\tif ( sel.nodeName ) {\n\t\t\tvar rowIdx = sel._DT_RowIndex; // Property added by DT for fast lookup\n\t\t\tvar cellIdx = sel._DT_CellIndex;\n\n\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t\telse if ( cellIdx ) {\n\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\treturn host.length ?\n\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t}\n\n\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t// DataTables simplifies this for row selectors since you can select\n\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t// unescaped.\n\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t// get row index from id\n\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\treturn [ rowObj.idx ];\n\t\t\t}\n\n\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t// matches\n\t\t}\n\t\t\n\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\tvar nodes = _removeEmpty(\n\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t);\n\n\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t// it also allows arrays, so this will cope with all three options\n\t\treturn $(nodes)\n\t\t\t.filter( sel )\n\t\t\t.map( function () {\n\t\t\t\treturn this._DT_RowIndex;\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\n\treturn _selector_run( 'row', selector, run, settings, opts );\n};\n\n\n_api_register( 'rows()', function ( selector, opts ) {\n\t// argument shifting\n\tif ( selector === undefined ) {\n\t\tselector = '';\n\t}\n\telse if ( $.isPlainObject( selector ) ) {\n\t\topts = selector;\n\t\tselector = '';\n\t}\n\n\topts = _selector_opts( opts );\n\n\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\treturn __row_selector( settings, selector, opts );\n\t}, 1 );\n\n\t// Want argument shifting here and in __row_selector?\n\tinst.selector.rows = selector;\n\tinst.selector.opts = opts;\n\n\treturn inst;\n} );\n\n_api_register( 'rows().nodes()', function () {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\treturn settings.aoData[ row ].nTr || undefined;\n\t}, 1 );\n} );\n\n_api_register( 'rows().data()', function () {\n\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\tvar r = settings.aoData[ row ];\n\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t_fnInvalidate( settings, row, src );\n\t} );\n} );\n\n_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\treturn row;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\tvar a = [];\n\tvar context = this.context;\n\n\t// `iterator` will drop undefined values, but in this case we want them\n\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t}\n\t}\n\n\treturn new _Api( context, a );\n} );\n\n_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\tvar that = this;\n\n\tthis.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\tvar data = settings.aoData;\n\t\tvar rowData = data[ row ];\n\t\tvar i, ien, j, jen;\n\t\tvar loopRow, loopCells;\n\n\t\tdata.splice( row, 1 );\n\n\t\t// Update the cached indexes\n\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\tloopRow = data[i];\n\t\t\tloopCells = loopRow.anCells;\n\n\t\t\t// Rows\n\t\t\tif ( loopRow.nTr !== null ) {\n\t\t\t\tloopRow.nTr._DT_RowIndex = i;\n\t\t\t}\n\n\t\t\t// Cells\n\t\t\tif ( loopCells !== null ) {\n\t\t\t\tfor ( j=0, jen=loopCells.length ; j<jen ; j++ ) {\n\t\t\t\t\tloopCells[j]._DT_CellIndex.row = i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Delete from the display arrays\n\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\n\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\tsettings._iRecordsDisplay--;\n\t\t}\n\n\t\t// Check for an 'overflow' they case for displaying the table\n\t\t_fnLengthOverflow( settings );\n\n\t\t// Remove the row's ID reference if there is one\n\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\tif ( id !== undefined ) {\n\t\t\tdelete settings.aIds[ id ];\n\t\t}\n\t} );\n\n\tthis.iterator( 'table', function ( settings ) {\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\tsettings.aoData[i].idx = i;\n\t\t}\n\t} );\n\n\treturn this;\n} );\n\n\n_api_register( 'rows.add()', function ( rows ) {\n\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\tvar row, i, ien;\n\t\t\tvar out = [];\n\n\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\trow = rows[i];\n\n\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn out;\n\t\t}, 1 );\n\n\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\tvar modRows = this.rows( -1 );\n\tmodRows.pop();\n\t$.merge( modRows, newRows );\n\n\treturn modRows;\n} );\n\n\n\n\n\n/**\n *\n */\n_api_register( 'row()', function ( selector, opts ) {\n\treturn _selector_first( this.rows( selector, opts ) );\n} );\n\n\n_api_register( 'row().data()', function ( data ) {\n\tvar ctx = this.context;\n\n\tif ( data === undefined ) {\n\t\t// Get\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\tundefined;\n\t}\n\n\t// Set\n\tvar row = ctx[0].aoData[ this[0] ];\n\trow._aData = data;\n\n\t// If the DOM has an id, and the data source is an array\n\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t}\n\n\t// Automatically invalidate\n\t_fnInvalidate( ctx[0], this[0], 'data' );\n\n\treturn this;\n} );\n\n\n_api_register( 'row().node()', function () {\n\tvar ctx = this.context;\n\n\treturn ctx.length && this.length ?\n\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\tnull;\n} );\n\n\n_api_register( 'row.add()', function ( row ) {\n\t// Allow a jQuery object to be passed in - only a single row is added from\n\t// it though - the first element in the set\n\tif ( row instanceof $ && row.length ) {\n\t\trow = row[0];\n\t}\n\n\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t}\n\t\treturn _fnAddData( settings, row );\n\t} );\n\n\t// Return an Api.rows() extended instance, with the newly added row selected\n\treturn this.row( rows[0] );\n} );\n\n\n$(document).on('plugin-init.dt', function (e, context) {\n\tvar api = new _Api( context );\n\tvar namespace = 'on-plugin-init';\n\tvar stateSaveParamsEvent = 'stateSaveParams.' + namespace;\n\tvar destroyEvent = 'destroy. ' + namespace;\n\n\tapi.on( stateSaveParamsEvent, function ( e, settings, d ) {\n\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t// internal loop\n\t\tvar idFn = settings.rowIdFn;\n\t\tvar data = settings.aoData;\n\t\tvar ids = [];\n\n\t\tfor (var i=0 ; i<data.length ; i++) {\n\t\t\tif (data[i]._detailsShow) {\n\t\t\t\tids.push( '#' + idFn(data[i]._aData) );\n\t\t\t}\n\t\t}\n\n\t\td.childRows = ids;\n\t});\n\n\tapi.on( destroyEvent, function () {\n\t\tapi.off(stateSaveParamsEvent + ' ' + destroyEvent);\n\t});\n\n\tvar loaded = api.state.loaded();\n\n\tif ( loaded && loaded.childRows ) {\n\t\tapi\n\t\t\t.rows( $.map(loaded.childRows, function (id){\n\t\t\t\treturn id.replace(/:/g, '\\\\:')\n\t\t\t}) )\n\t\t\t.every( function () {\n\t\t\t\t_fnCallbackFire( context, null, 'requestChild', [ this ] )\n\t\t\t});\n\t}\n});\n\nvar __details_add = function ( ctx, row, data, klass )\n{\n\t// Convert to array of TR elements\n\tvar rows = [];\n\tvar addRow = function ( r, k ) {\n\t\t// Recursion to allow for arrays of jQuery objects\n\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\taddRow( r[i], k );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t// to add the correct number of columns etc\n\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\trows.push( r );\n\t\t}\n\t\telse {\n\t\t\t// Otherwise create a row with a wrapper\n\t\t\tvar created = $('<tr><td></td></tr>').addClass( k );\n\t\t\t$('td', created)\n\t\t\t\t.addClass( k )\n\t\t\t\t.html( r )\n\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\n\t\t\trows.push( created[0] );\n\t\t}\n\t};\n\n\taddRow( data, klass );\n\n\tif ( row._details ) {\n\t\trow._details.detach();\n\t}\n\n\trow._details = $(rows);\n\n\t// If the children were already shown, that state should be retained\n\tif ( row._detailsShow ) {\n\t\trow._details.insertAfter( row.nTr );\n\t}\n};\n\n\n// Make state saving of child row details async to allow them to be batch processed\nvar __details_state = DataTable.util.throttle(\n\tfunction (ctx) {\n\t\t_fnSaveState( ctx[0] )\n\t},\n\t500\n);\n\n\nvar __details_remove = function ( api, idx )\n{\n\tvar ctx = api.context;\n\n\tif ( ctx.length ) {\n\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\n\t\tif ( row && row._details ) {\n\t\t\trow._details.remove();\n\n\t\t\trow._detailsShow = undefined;\n\t\t\trow._details = undefined;\n\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t__details_state( ctx );\n\t\t}\n\t}\n};\n\n\nvar __details_display = function ( api, show ) {\n\tvar ctx = api.context;\n\n\tif ( ctx.length && api.length ) {\n\t\tvar row = ctx[0].aoData[ api[0] ];\n\n\t\tif ( row._details ) {\n\t\t\trow._detailsShow = show;\n\n\t\t\tif ( show ) {\n\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\trow._details.detach();\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t}\n\n\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\n\t\t\t__details_events( ctx[0] );\n\t\t\t__details_state( ctx );\n\t\t}\n\t}\n};\n\n\nvar __details_events = function ( settings )\n{\n\tvar api = new _Api( settings );\n\tvar namespace = '.dt.DT_details';\n\tvar drawEvent = 'draw'+namespace;\n\tvar colvisEvent = 'column-sizing'+namespace;\n\tvar destroyEvent = 'destroy'+namespace;\n\tvar data = settings.aoData;\n\n\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\n\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t// On each draw, insert the required elements into the document\n\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t// Internal data grab\n\t\t\t\tvar row = data[ idx ];\n\n\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// Column visibility change - update the colspan\n\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t// a colspan)\n\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\trow = data[i];\n\n\t\t\t\tif ( row._details ) {\n\t\t\t\t\trow._details.each(function () {\n\t\t\t\t\t\tvar el = $(this).children('td');\n\n\t\t\t\t\t\tif (el.length == 1) {\n\t\t\t\t\t\t\tel.attr('colspan', visible);\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// Table destroyed - nuke any child rows\n\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n};\n\n// Strings for the method names to help minification\nvar _emp = '';\nvar _child_obj = _emp+'row().child';\nvar _child_mth = _child_obj+'()';\n\n// data can be:\n// tr\n// string\n// jQuery or array of any of the above\n_api_register( _child_mth, function ( data, klass ) {\n\tvar ctx = this.context;\n\n\tif ( data === undefined ) {\n\t\t// get\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\tundefined;\n\t}\n\telse if ( data === true ) {\n\t\t// show\n\t\tthis.child.show();\n\t}\n\telse if ( data === false ) {\n\t\t// remove\n\t\t__details_remove( this );\n\t}\n\telse if ( ctx.length && this.length ) {\n\t\t// set\n\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t}\n\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.show()',\n\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n], function ( show ) { // it returns an object and this method is not executed)\n\t__details_display( this, true );\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.hide()',\n\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n], function () { // it returns an object and this method is not executed)\n\t__details_display( this, false );\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.remove()',\n\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n], function () { // it returns an object and this method is not executed)\n\t__details_remove( this );\n\treturn this;\n} );\n\n\n_api_register( _child_obj+'.isShown()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length && this.length ) {\n\t\t// _detailsShown as false or undefined will fall through to return false\n\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t}\n\treturn false;\n} );\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Columns\n *\n * {integer} - column index (>=0 count from left, <0 count from right)\n * \"{integer}:visIdx\" - visible column index (i.e. translate to column index) (>=0 count from left, <0 count from right)\n * \"{integer}:visible\" - alias for {integer}:visIdx (>=0 count from left, <0 count from right)\n * \"{string}:name\" - column name\n * \"{string}\" - jQuery selector on column header nodes\n *\n */\n\n// can be an array of these items, comma separated list, or an array of comma\n// separated lists\n\nvar __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;\n\n\n// r1 and r2 are redundant - but it means that the parameters match for the\n// iterator callback in columns().data()\nvar __columnData = function ( settings, column, r1, r2, rows ) {\n\tvar a = [];\n\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t}\n\treturn a;\n};\n\n\nvar __column_selector = function ( settings, selector, opts )\n{\n\tvar\n\t\tcolumns = settings.aoColumns,\n\t\tnames = _pluck( columns, 'sName' ),\n\t\tnodes = _pluck( columns, 'nTh' );\n\n\tvar run = function ( s ) {\n\t\tvar selInt = _intVal( s );\n\n\t\t// Selector - all\n\t\tif ( s === '' ) {\n\t\t\treturn _range( columns.length );\n\t\t}\n\n\t\t// Selector - index\n\t\tif ( selInt !== null ) {\n\t\t\treturn [ selInt >= 0 ?\n\t\t\t\tselInt : // Count from left\n\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t];\n\t\t}\n\n\t\t// Selector = function\n\t\tif ( typeof s === 'function' ) {\n\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\n\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\treturn s(\n\t\t\t\t\t\tidx,\n\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t) ? idx : null;\n\t\t\t} );\n\t\t}\n\n\t\t// jQuery or string selector\n\t\tvar match = typeof s === 'string' ?\n\t\t\ts.match( __re_column_selector ) :\n\t\t\t'';\n\n\t\tif ( match ) {\n\t\t\tswitch( match[2] ) {\n\t\t\t\tcase 'visIdx':\n\t\t\t\tcase 'visible':\n\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t}\n\t\t\t\t\t// Counting from the left\n\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\n\t\t\t\tcase 'name':\n\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t} );\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\n\t\t// Cell in the table body\n\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t}\n\n\t\t// jQuery selector on the TH elements for the columns\n\t\tvar jqResult = $( nodes )\n\t\t\t.filter( s )\n\t\t\t.map( function () {\n\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t} )\n\t\t\t.toArray();\n\n\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\treturn jqResult;\n\t\t}\n\n\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t// a child or such an element\n\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\treturn host.length ?\n\t\t\t[ host.data('dt-column') ] :\n\t\t\t[];\n\t};\n\n\treturn _selector_run( 'column', selector, run, settings, opts );\n};\n\n\nvar __setColumnVis = function ( settings, column, vis ) {\n\tvar\n\t\tcols = settings.aoColumns,\n\t\tcol = cols[ column ],\n\t\tdata = settings.aoData,\n\t\trow, cells, i, ien, tr;\n\n\t// Get\n\tif ( vis === undefined ) {\n\t\treturn col.bVisible;\n\t}\n\n\t// Set\n\t// No change\n\tif ( col.bVisible === vis ) {\n\t\treturn;\n\t}\n\n\tif ( vis ) {\n\t\t// Insert column\n\t\t// Need to decide if we should use appendChild or insertBefore\n\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\n\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\ttr = data[i].nTr;\n\t\t\tcells = data[i].anCells;\n\n\t\t\tif ( tr ) {\n\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\t// Remove column\n\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t}\n\n\t// Common actions\n\tcol.bVisible = vis;\n};\n\n\n_api_register( 'columns()', function ( selector, opts ) {\n\t// argument shifting\n\tif ( selector === undefined ) {\n\t\tselector = '';\n\t}\n\telse if ( $.isPlainObject( selector ) ) {\n\t\topts = selector;\n\t\tselector = '';\n\t}\n\n\topts = _selector_opts( opts );\n\n\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\treturn __column_selector( settings, selector, opts );\n\t}, 1 );\n\n\t// Want argument shifting here and in _row_selector?\n\tinst.selector.cols = selector;\n\tinst.selector.opts = opts;\n\n\treturn inst;\n} );\n\n_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].nTh;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].nTf;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\treturn this.iterator( 'column-rows', __columnData, 1 );\n} );\n\n_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].mData;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t);\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\tvar that = this;\n\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\tif ( vis === undefined ) {\n\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t} // else\n\t\t__setColumnVis( settings, column, vis );\n\t} );\n\n\t// Group the column visibility changes\n\tif ( vis !== undefined ) {\n\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t// Redraw the header after changes\n\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));\n\t\t\t}\n\t\n\t\t\t_fnSaveState( settings );\n\n\t\t\t// Second loop once the first is done for events\n\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t} );\n\n\t\t\tif ( calc === undefined || calc ) {\n\t\t\t\tthat.columns.adjust();\n\t\t\t}\n\t\t});\n\t}\n\n\treturn ret;\n} );\n\n_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn type === 'visible' ?\n\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\tcolumn;\n\t}, 1 );\n} );\n\n_api_register( 'columns.adjust()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnAdjustColumnSizing( settings );\n\t}, 1 );\n} );\n\n_api_register( 'column.index()', function ( type, idx ) {\n\tif ( this.context.length !== 0 ) {\n\t\tvar ctx = this.context[0];\n\n\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t}\n\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t}\n\t}\n} );\n\n_api_register( 'column()', function ( selector, opts ) {\n\treturn _selector_first( this.columns( selector, opts ) );\n} );\n\nvar __cell_selector = function ( settings, selector, opts )\n{\n\tvar data = settings.aoData;\n\tvar rows = _selector_row_indexes( settings, opts );\n\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\tvar allCells = $(_flatten( [], cells ));\n\tvar row;\n\tvar columns = settings.aoColumns.length;\n\tvar a, i, ien, j, o, host;\n\n\tvar run = function ( s ) {\n\t\tvar fnSelector = typeof s === 'function';\n\n\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t// All cells and function selectors\n\t\t\ta = [];\n\n\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\trow = rows[i];\n\n\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\to = {\n\t\t\t\t\t\trow: row,\n\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\thost = data[ row ];\n\n\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn a;\n\t\t}\n\t\t\n\t\t// Selector - index\n\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\treturn s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?\n\t\t\t\t[s] :\n\t\t\t\t[];\n\t\t}\n\n\t\t// Selector - jQuery filtered cells\n\t\tvar jqResult = allCells\n\t\t\t.filter( s )\n\t\t\t.map( function (i, el) {\n\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\trow: el._DT_CellIndex.row,\n\t\t\t\t\tcolumn: el._DT_CellIndex.column\n \t\t\t\t};\n\t\t\t} )\n\t\t\t.toArray();\n\n\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\treturn jqResult;\n\t\t}\n\n\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t// data attributes\n\t\thost = $(s).closest('*[data-dt-row]');\n\t\treturn host.length ?\n\t\t\t[ {\n\t\t\t\trow: host.data('dt-row'),\n\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t} ] :\n\t\t\t[];\n\t};\n\n\treturn _selector_run( 'cell', selector, run, settings, opts );\n};\n\n\n\n\n_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t// Argument shifting\n\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t// Indexes\n\t\tif ( rowSelector.row === undefined ) {\n\t\t\t// Selector options in first parameter\n\t\t\topts = rowSelector;\n\t\t\trowSelector = null;\n\t\t}\n\t\telse {\n\t\t\t// Cell index objects in first parameter\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t}\n\tif ( $.isPlainObject( columnSelector ) ) {\n\t\topts = columnSelector;\n\t\tcolumnSelector = null;\n\t}\n\n\t// Cell selector\n\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t} );\n\t}\n\n\t// The default built in options need to apply to row and columns\n\tvar internalOpts = opts ? {\n\t\tpage: opts.page,\n\t\torder: opts.order,\n\t\tsearch: opts.search\n\t} : {};\n\n\t// Row + column selector\n\tvar columns = this.columns( columnSelector, internalOpts );\n\tvar rows = this.rows( rowSelector, internalOpts );\n\tvar i, ien, j, jen;\n\n\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\tvar a = [];\n\n\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\ta.push( {\n\t\t\t\t\trow: rows[idx][i],\n\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\treturn a;\n\t}, 1 );\n\n\t// There is currently only one extension which uses a cell selector extension\n\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t// an extension specific check at the moment\n\tvar cells = opts && opts.selected ?\n\t\tthis.cells( cellsNoOpts, opts ) :\n\t\tcellsNoOpts;\n\n\t$.extend( cells.selector, {\n\t\tcols: columnSelector,\n\t\trows: rowSelector,\n\t\topts: opts\n\t} );\n\n\treturn cells;\n} );\n\n\n_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\tvar data = settings.aoData[ row ];\n\n\t\treturn data && data.anCells ?\n\t\t\tdata.anCells[ column ] :\n\t\t\tundefined;\n\t}, 1 );\n} );\n\n\n_api_register( 'cells().data()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn _fnGetCellData( settings, row, column );\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn settings.aoData[ row ][ type ][ column ];\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn _fnGetCellData( settings, row, column, type );\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn {\n\t\t\trow: row,\n\t\t\tcolumn: column,\n\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t};\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t_fnInvalidate( settings, row, src, column );\n\t} );\n} );\n\n\n\n_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n} );\n\n\n_api_register( 'cell().data()', function ( data ) {\n\tvar ctx = this.context;\n\tvar cell = this[0];\n\n\tif ( data === undefined ) {\n\t\t// Get\n\t\treturn ctx.length && cell.length ?\n\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\tundefined;\n\t}\n\n\t// Set\n\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\n\treturn this;\n} );\n\n\n\n/**\n * Get current ordering (sorting) that has been applied to the table.\n *\n * @returns {array} 2D array containing the sorting information for the first\n * table in the current context. Each element in the parent array represents\n * a column being sorted upon (i.e. multi-sorting with two columns would have\n * 2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n * the column index that the sorting condition applies to, the second is the\n * direction of the sort (`desc` or `asc`) and, optionally, the third is the\n * index of the sorting order from the `column.sorting` initialisation array.\n *//**\n * Set the ordering for the table.\n *\n * @param {integer} order Column index to sort upon.\n * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n * @returns {DataTables.Api} this\n *//**\n * Set the ordering for the table.\n *\n * @param {array} order 1D array of sorting information to be applied.\n * @param {array} [...] Optional additional sorting conditions\n * @returns {DataTables.Api} this\n *//**\n * Set the ordering for the table.\n *\n * @param {array} order 2D array of sorting information to be applied.\n * @returns {DataTables.Api} this\n */\n_api_register( 'order()', function ( order, dir ) {\n\tvar ctx = this.context;\n\n\tif ( order === undefined ) {\n\t\t// get\n\t\treturn ctx.length !== 0 ?\n\t\t\tctx[0].aaSorting :\n\t\t\tundefined;\n\t}\n\n\t// set\n\tif ( typeof order === 'number' ) {\n\t\t// Simple column / direction passed in\n\t\torder = [ [ order, dir ] ];\n\t}\n\telse if ( order.length && ! Array.isArray( order[0] ) ) {\n\t\t// Arguments passed in (list of 1D arrays)\n\t\torder = Array.prototype.slice.call( arguments );\n\t}\n\t// otherwise a 2D array was passed in\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tsettings.aaSorting = order.slice();\n\t} );\n} );\n\n\n/**\n * Attach a sort listener to an element for a given column\n *\n * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n * listener to. This can take the form of a single DOM node, a jQuery\n * collection of nodes or a jQuery selector which will identify the node(s).\n * @param {integer} column the column that a click on this node will sort on\n * @param {function} [callback] callback function when sort is run\n * @returns {DataTables.Api} this\n */\n_api_register( 'order.listener()', function ( node, column, callback ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnSortAttachListener( settings, node, column, callback );\n\t} );\n} );\n\n\n_api_register( 'order.fixed()', function ( set ) {\n\tif ( ! set ) {\n\t\tvar ctx = this.context;\n\t\tvar fixed = ctx.length ?\n\t\t\tctx[0].aaSortingFixed :\n\t\t\tundefined;\n\n\t\treturn Array.isArray( fixed ) ?\n\t\t\t{ pre: fixed } :\n\t\t\tfixed;\n\t}\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t} );\n} );\n\n\n// Order by the selected column(s)\n_api_register( [\n\t'columns().order()',\n\t'column().order()'\n], function ( dir ) {\n\tvar that = this;\n\n\treturn this.iterator( 'table', function ( settings, i ) {\n\t\tvar sort = [];\n\n\t\t$.each( that[i], function (j, col) {\n\t\t\tsort.push( [ col, dir ] );\n\t\t} );\n\n\t\tsettings.aaSorting = sort;\n\t} );\n} );\n\n\n\n_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\tvar ctx = this.context;\n\n\tif ( input === undefined ) {\n\t\t// get\n\t\treturn ctx.length !== 0 ?\n\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\tundefined;\n\t}\n\n\t// set\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\"sSearch\": input+\"\",\n\t\t\t\"bRegex\": regex === null ? false : regex,\n\t\t\t\"bSmart\": smart === null ? true : smart,\n\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t} ), 1 );\n\t} );\n} );\n\n\n_api_registerPlural(\n\t'columns().search()',\n\t'column().search()',\n\tfunction ( input, regex, smart, caseInsen ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tvar preSearch = settings.aoPreSearchCols;\n\n\t\t\tif ( input === undefined ) {\n\t\t\t\t// get\n\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t}\n\n\t\t\t// set\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\": regex === null ? false : regex,\n\t\t\t\t\"bSmart\": smart === null ? true : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} );\n\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t} );\n\t}\n);\n\n/*\n * State API methods\n */\n\n_api_register( 'state()', function () {\n\treturn this.context.length ?\n\t\tthis.context[0].oSavedState :\n\t\tnull;\n} );\n\n\n_api_register( 'state.clear()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t// Save an empty object\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t} );\n} );\n\n\n_api_register( 'state.loaded()', function () {\n\treturn this.context.length ?\n\t\tthis.context[0].oLoadedState :\n\t\tnull;\n} );\n\n\n_api_register( 'state.save()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnSaveState( settings );\n\t} );\n} );\n\n\n\n/**\n * Set the jQuery or window object to be used by DataTables\n *\n * @param {*} module Library / container object\n * @param {string} [type] Library or container type `lib`, `win` or `datetime`.\n * If not provided, automatic detection is attempted.\n */\nDataTable.use = function (module, type) {\n\tif (type === 'lib' || module.fn) {\n\t\t$ = module;\n\t}\n\telse if (type == 'win' || module.document) {\n\t\twindow = module;\n\t\tdocument = module.document;\n\t}\n\telse if (type === 'datetime' || module.type === 'DateTime') {\n\t\tDataTable.DateTime = module;\n\t}\n}\n\n/**\n * CommonJS factory function pass through. This will check if the arguments\n * given are a window object or a jQuery object. If so they are set\n * accordingly.\n * @param {*} root Window\n * @param {*} jq jQUery\n * @returns {boolean} Indicator\n */\nDataTable.factory = function (root, jq) {\n\tvar is = false;\n\n\t// Test if the first parameter is a window object\n\tif (root && root.document) {\n\t\twindow = root;\n\t\tdocument = root.document;\n\t}\n\n\t// Test if the second parameter is a jQuery object\n\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t$ = jq;\n\t\tis = true;\n\t}\n\n\treturn is;\n}\n\n/**\n * Provide a common method for plug-ins to check the version of DataTables being\n * used, in order to ensure compatibility.\n *\n * @param {string} version Version string to check for, in the format \"X.Y.Z\".\n * Note that the formats \"X\" and \"X.Y\" are also acceptable.\n * @returns {boolean} true if this version of DataTables is greater or equal to\n * the required version, or false if this version of DataTales is not\n * suitable\n * @static\n * @dtopt API-Static\n *\n * @example\n * alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n */\nDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n{\n\tvar aThis = DataTable.version.split('.');\n\tvar aThat = version.split('.');\n\tvar iThis, iThat;\n\n\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\n\t\t// Parts are the same, keep comparing\n\t\tif (iThis === iThat) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Parts are different, return immediately\n\t\treturn iThis > iThat;\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Check if a `<table>` node is a DataTable table already or not.\n *\n * @param {node|jquery|string} table Table node, jQuery object or jQuery\n * selector for the table to test. Note that if more than more than one\n * table is passed on, only the first will be checked\n * @returns {boolean} true the table given is a DataTable, or false otherwise\n * @static\n * @dtopt API-Static\n *\n * @example\n * if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n * $('#example').dataTable();\n * }\n */\nDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n{\n\tvar t = $(table).get(0);\n\tvar is = false;\n\n\tif ( table instanceof DataTable.Api ) {\n\t\treturn true;\n\t}\n\n\t$.each( DataTable.settings, function (i, o) {\n\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\n\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\tis = true;\n\t\t}\n\t} );\n\n\treturn is;\n};\n\n\n/**\n * Get all DataTable tables that have been initialised - optionally you can\n * select to get only currently visible tables.\n *\n * @param {boolean} [visible=false] Flag to indicate if you want all (default)\n * or visible tables only.\n * @returns {array} Array of `table` nodes (not DataTable instances) which are\n * DataTables\n * @static\n * @dtopt API-Static\n *\n * @example\n * $.each( $.fn.dataTable.tables(true), function () {\n * $(table).DataTable().columns.adjust();\n * } );\n */\nDataTable.tables = DataTable.fnTables = function ( visible )\n{\n\tvar api = false;\n\n\tif ( $.isPlainObject( visible ) ) {\n\t\tapi = visible.api;\n\t\tvisible = visible.visible;\n\t}\n\n\tvar a = $.map( DataTable.settings, function (o) {\n\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\treturn o.nTable;\n\t\t}\n\t} );\n\n\treturn api ?\n\t\tnew _Api( a ) :\n\t\ta;\n};\n\n\n/**\n * Convert from camel case parameters to Hungarian notation. This is made public\n * for the extensions to provide the same ability as DataTables core to accept\n * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n * parameters.\n *\n * @param {object} src The model object which holds all parameters that can be\n * mapped.\n * @param {object} user The object to convert from camel case to Hungarian.\n * @param {boolean} force When set to `true`, properties which already have a\n * Hungarian value in the `user` object will be overwritten. Otherwise they\n * won't be.\n */\nDataTable.camelToHungarian = _fnCamelToHungarian;\n\n\n\n/**\n *\n */\n_api_register( '$()', function ( selector, opts ) {\n\tvar\n\t\trows = this.rows( opts ).nodes(), // Get all rows\n\t\tjqRows = $(rows);\n\n\treturn $( [].concat(\n\t\tjqRows.filter( selector ).toArray(),\n\t\tjqRows.find( selector ).toArray()\n\t) );\n} );\n\n\n// jQuery functions to operate on the tables\n$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\tvar args = Array.prototype.slice.call(arguments);\n\n\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\targs[0] = $.map( args[0].split( /\\s/ ), function ( e ) {\n\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\te+'.dt' :\n\t\t\t\te;\n\t\t\t} ).join( ' ' );\n\n\t\tvar inst = $( this.tables().nodes() );\n\t\tinst[key].apply( inst, args );\n\t\treturn this;\n\t} );\n} );\n\n\n_api_register( 'clear()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnClearTable( settings );\n\t} );\n} );\n\n\n_api_register( 'settings()', function () {\n\treturn new _Api( this.context, this.context );\n} );\n\n\n_api_register( 'init()', function () {\n\tvar ctx = this.context;\n\treturn ctx.length ? ctx[0].oInit : null;\n} );\n\n\n_api_register( 'data()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t} ).flatten();\n} );\n\n\n_api_register( 'destroy()', function ( remove ) {\n\tremove = remove || false;\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tvar classes = settings.oClasses;\n\t\tvar table = settings.nTable;\n\t\tvar tbody = settings.nTBody;\n\t\tvar thead = settings.nTHead;\n\t\tvar tfoot = settings.nTFoot;\n\t\tvar jqTable = $(table);\n\t\tvar jqTbody = $(tbody);\n\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\tvar rows = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\tvar i, ien;\n\n\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t// should be taken\n\t\tsettings.bDestroying = true;\n\n\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\n\t\t// If not being removed from the document, make all columns visible\n\t\tif ( ! remove ) {\n\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t}\n\n\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t// for removing them\n\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t$(window).off('.DT-'+settings.sInstance);\n\n\t\t// When scrolling we had to break the table up - restore it\n\t\tif ( table != thead.parentNode ) {\n\t\t\tjqTable.children('thead').detach();\n\t\t\tjqTable.append( thead );\n\t\t}\n\n\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\tjqTable.children('tfoot').detach();\n\t\t\tjqTable.append( tfoot );\n\t\t}\n\n\t\tsettings.aaSorting = [];\n\t\tsettings.aaSortingFixed = [];\n\t\t_fnSortingClasses( settings );\n\n\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\n\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t);\n\n\t\t// Add the TR elements back into the table in their original order\n\t\tjqTbody.children().detach();\n\t\tjqTbody.append( rows );\n\n\t\tvar orig = settings.nTableWrapper.parentNode;\n\n\t\t// Remove the DataTables generated nodes, events and classes\n\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\tjqTable[ removedMethod ]();\n\t\tjqWrapper[ removedMethod ]();\n\n\t\t// If we need to reattach the table to the document\n\t\tif ( ! remove && orig ) {\n\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\n\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t// so we can restore directly to that\n\t\t\tjqTable\n\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t.removeClass( classes.sTable );\n\n\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\tien = settings.asDestroyStripes.length;\n\n\t\t\tif ( ien ) {\n\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\t/* Remove the settings object from the settings array */\n\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\tif ( idx !== -1 ) {\n\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t}\n\t} );\n} );\n\n\n// Add the `every()` method for rows, columns and cells in a compact form\n$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t_api_register( type+'s().every()', function ( fn ) {\n\t\tvar opts = this.selector.opts;\n\t\tvar api = this;\n\n\t\treturn this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {\n\t\t\t// Rows and columns:\n\t\t\t// arg1 - index\n\t\t\t// arg2 - table counter\n\t\t\t// arg3 - loop counter\n\t\t\t// arg4 - undefined\n\t\t\t// Cells:\n\t\t\t// arg1 - row index\n\t\t\t// arg2 - column index\n\t\t\t// arg3 - table counter\n\t\t\t// arg4 - loop counter\n\t\t\tfn.call(\n\t\t\t\tapi[ type ](\n\t\t\t\t\targ1,\n\t\t\t\t\ttype==='cell' ? arg2 : opts,\n\t\t\t\t\ttype==='cell' ? opts : undefined\n\t\t\t\t),\n\t\t\t\targ1, arg2, arg3, arg4\n\t\t\t);\n\t\t} );\n\t} );\n} );\n\n\n// i18n method for extensions to be able to use the language object from the\n// DataTable\n_api_register( 'i18n()', function ( token, def, plural ) {\n\tvar ctx = this.context[0];\n\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\n\tif ( resolved === undefined ) {\n\t\tresolved = def;\n\t}\n\n\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\tresolved[ plural ] :\n\t\t\tresolved._;\n\t}\n\n\treturn typeof resolved === 'string'\n\t\t? resolved.replace( '%d', plural ) // nb: plural might be undefined,\n\t\t: resolved;\n} );\n/**\n * Version string for plug-ins to check compatibility. Allowed format is\n * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n * only for non-release builds. See https://semver.org/ for more information.\n * @member\n * @type string\n * @default Version number\n */\nDataTable.version = \"1.13.7\";\n\n/**\n * Private data store, containing all of the settings objects that are\n * created for the tables on a given page.\n *\n * Note that the `DataTable.settings` object is aliased to\n * `jQuery.fn.dataTableExt` through which it may be accessed and\n * manipulated, or `jQuery.fn.dataTable.settings`.\n * @member\n * @type array\n * @default []\n * @private\n */\nDataTable.settings = [];\n\n/**\n * Object models container, for the various models that DataTables has\n * available to it. These models define the objects that are used to hold\n * the active state and configuration of the table.\n * @namespace\n */\nDataTable.models = {};\n\n\n\n/**\n * Template object for the way in which DataTables holds information about\n * search information for the global filter and individual column filters.\n * @namespace\n */\nDataTable.models.oSearch = {\n\t/**\n\t * Flag to indicate if the filtering should be case insensitive or not\n\t * @type boolean\n\t * @default true\n\t */\n\t\"bCaseInsensitive\": true,\n\n\t/**\n\t * Applied search term\n\t * @type string\n\t * @default <i>Empty string</i>\n\t */\n\t\"sSearch\": \"\",\n\n\t/**\n\t * Flag to indicate if the search term should be interpreted as a\n\t * regular expression (true) or not (false) and therefore and special\n\t * regex characters escaped.\n\t * @type boolean\n\t * @default false\n\t */\n\t\"bRegex\": false,\n\n\t/**\n\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t * @type boolean\n\t * @default true\n\t */\n\t\"bSmart\": true,\n\n\t/**\n\t * Flag to indicate if DataTables should only trigger a search when\n\t * the return key is pressed.\n\t * @type boolean\n\t * @default false\n\t */\n\t\"return\": false\n};\n\n\n\n\n/**\n * Template object for the way in which DataTables holds information about\n * each individual row. This is the object format used for the settings\n * aoData array.\n * @namespace\n */\nDataTable.models.oRow = {\n\t/**\n\t * TR element for the row\n\t * @type node\n\t * @default null\n\t */\n\t\"nTr\": null,\n\n\t/**\n\t * Array of TD elements for each row. This is null until the row has been\n\t * created.\n\t * @type array nodes\n\t * @default []\n\t */\n\t\"anCells\": null,\n\n\t/**\n\t * Data object from the original data source for the row. This is either\n\t * an array if using the traditional form of DataTables, or an object if\n\t * using mData options. The exact type will depend on the passed in\n\t * data from the data source, or will be an array if using DOM a data\n\t * source.\n\t * @type array|object\n\t * @default []\n\t */\n\t\"_aData\": [],\n\n\t/**\n\t * Sorting data cache - this array is ostensibly the same length as the\n\t * number of columns (although each index is generated only as it is\n\t * needed), and holds the data that is used for sorting each column in the\n\t * row. We do this cache generation at the start of the sort in order that\n\t * the formatting of the sort data need be done only once for each cell\n\t * per sort. This array should not be read from or written to by anything\n\t * other than the master sorting methods.\n\t * @type array\n\t * @default null\n\t * @private\n\t */\n\t\"_aSortData\": null,\n\n\t/**\n\t * Per cell filtering data cache. As per the sort data cache, used to\n\t * increase the performance of the filtering in DataTables\n\t * @type array\n\t * @default null\n\t * @private\n\t */\n\t\"_aFilterData\": null,\n\n\t/**\n\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t * in this case a string rather than an array. This is easily computed with\n\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t * needed on every search (memory traded for performance)\n\t * @type array\n\t * @default null\n\t * @private\n\t */\n\t\"_sFilterRow\": null,\n\n\t/**\n\t * Cache of the class name that DataTables has applied to the row, so we\n\t * can quickly look at this variable rather than needing to do a DOM check\n\t * on className for the nTr property.\n\t * @type string\n\t * @default <i>Empty string</i>\n\t * @private\n\t */\n\t\"_sRowStripe\": \"\",\n\n\t/**\n\t * Denote if the original data source was from the DOM, or the data source\n\t * object. This is used for invalidating data, so DataTables can\n\t * automatically read data from the original source, unless uninstructed\n\t * otherwise.\n\t * @type string\n\t * @default null\n\t * @private\n\t */\n\t\"src\": null,\n\n\t/**\n\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t * object, but want to know the index\n\t * @type integer\n\t * @default -1\n\t * @private\n\t */\n\t\"idx\": -1\n};\n\n\n/**\n * Template object for the column information object in DataTables. This object\n * is held in the settings aoColumns array and contains all the information that\n * DataTables needs about each individual column.\n *\n * Note that this object is related to {@link DataTable.defaults.column}\n * but this one is the internal data store for DataTables's cache of columns.\n * It should NOT be manipulated outside of DataTables. Any configuration should\n * be done through the initialisation options.\n * @namespace\n */\nDataTable.models.oColumn = {\n\t/**\n\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t * is faster to just hold it as a variable\n\t * @type integer\n\t * @default null\n\t */\n\t\"idx\": null,\n\n\t/**\n\t * A list of the columns that sorting should occur on when this column\n\t * is sorted. That this property is an array allows multi-column sorting\n\t * to be defined for a column (for example first name / last name columns\n\t * would benefit from this). The values are integers pointing to the\n\t * columns to be sorted on (typically it will be a single integer pointing\n\t * at itself, but that doesn't need to be the case).\n\t * @type array\n\t */\n\t\"aDataSort\": null,\n\n\t/**\n\t * Define the sorting directions that are applied to the column, in sequence\n\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t * as the sorting direction when the column if first sorted (clicked on).\n\t * Sort it again (click again) and it will move on to the next index.\n\t * Repeat until loop.\n\t * @type array\n\t */\n\t\"asSorting\": null,\n\n\t/**\n\t * Flag to indicate if the column is searchable, and thus should be included\n\t * in the filtering or not.\n\t * @type boolean\n\t */\n\t\"bSearchable\": null,\n\n\t/**\n\t * Flag to indicate if the column is sortable or not.\n\t * @type boolean\n\t */\n\t\"bSortable\": null,\n\n\t/**\n\t * Flag to indicate if the column is currently visible in the table or not\n\t * @type boolean\n\t */\n\t\"bVisible\": null,\n\n\t/**\n\t * Store for manual type assignment using the `column.type` option. This\n\t * is held in store so we can manipulate the column's `sType` property.\n\t * @type string\n\t * @default null\n\t * @private\n\t */\n\t\"_sManualType\": null,\n\n\t/**\n\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t * source for filtering or sorting. True is either are.\n\t * @type boolean\n\t * @default false\n\t * @private\n\t */\n\t\"_bAttrSrc\": false,\n\n\t/**\n\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t * allowing you to modify the DOM element (add background colour for example) when the\n\t * element is available.\n\t * @type function\n\t * @param {element} nTd The TD node that has been created\n\t * @param {*} sData The Data for the cell\n\t * @param {array|object} oData The data for the whole row\n\t * @param {int} iRow The row index for the aoData data store\n\t * @default null\n\t */\n\t\"fnCreatedCell\": null,\n\n\t/**\n\t * Function to get data from a cell in a column. You should <b>never</b>\n\t * access data directly through _aData internally in DataTables - always use\n\t * the method attached to this property. It allows mData to function as\n\t * required. This function is automatically assigned by the column\n\t * initialisation method\n\t * @type function\n\t * @param {array|object} oData The data array/object for the array\n\t * (i.e. aoData[]._aData)\n\t * @param {string} sSpecific The specific data type you want to get -\n\t * 'display', 'type' 'filter' 'sort'\n\t * @returns {*} The data for the cell from the given row's data\n\t * @default null\n\t */\n\t\"fnGetData\": null,\n\n\t/**\n\t * Function to set data for a cell in the column. You should <b>never</b>\n\t * set the data directly to _aData internally in DataTables - always use\n\t * this method. It allows mData to function as required. This function\n\t * is automatically assigned by the column initialisation method\n\t * @type function\n\t * @param {array|object} oData The data array/object for the array\n\t * (i.e. aoData[]._aData)\n\t * @param {*} sValue Value to set\n\t * @default null\n\t */\n\t\"fnSetData\": null,\n\n\t/**\n\t * Property to read the value for the cells in the column from the data\n\t * source array / object. If null, then the default content is used, if a\n\t * function is given then the return from the function is used.\n\t * @type function|int|string|null\n\t * @default null\n\t */\n\t\"mData\": null,\n\n\t/**\n\t * Partner property to mData which is used (only when defined) to get\n\t * the data - i.e. it is basically the same as mData, but without the\n\t * 'set' option, and also the data fed to it is the result from mData.\n\t * This is the rendering method to match the data method of mData.\n\t * @type function|int|string|null\n\t * @default null\n\t */\n\t\"mRender\": null,\n\n\t/**\n\t * Unique header TH/TD element for this column - this is what the sorting\n\t * listener is attached to (if sorting is enabled.)\n\t * @type node\n\t * @default null\n\t */\n\t\"nTh\": null,\n\n\t/**\n\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t * in DataTables as such, but can be used for plug-ins to reference the\n\t * footer for each column.\n\t * @type node\n\t * @default null\n\t */\n\t\"nTf\": null,\n\n\t/**\n\t * The class to apply to all TD elements in the table's TBODY for the column\n\t * @type string\n\t * @default null\n\t */\n\t\"sClass\": null,\n\n\t/**\n\t * When DataTables calculates the column widths to assign to each column,\n\t * it finds the longest string in each column and then constructs a\n\t * temporary table and reads the widths from that. The problem with this\n\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t * string - thus the calculation can go wrong (doing it properly and putting\n\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t * a \"work around\" we provide this option. It will append its value to the\n\t * text that is found to be the longest string for the column - i.e. padding.\n\t * @type string\n\t */\n\t\"sContentPadding\": null,\n\n\t/**\n\t * Allows a default value to be given for a column's data, and will be used\n\t * whenever a null data source is encountered (this can be because mData\n\t * is set to null, or because the data source itself is null).\n\t * @type string\n\t * @default null\n\t */\n\t\"sDefaultContent\": null,\n\n\t/**\n\t * Name for the column, allowing reference to the column by name as well as\n\t * by index (needs a lookup to work by name).\n\t * @type string\n\t */\n\t\"sName\": null,\n\n\t/**\n\t * Custom sorting data type - defines which of the available plug-ins in\n\t * afnSortData the custom sorting will use - if any is defined.\n\t * @type string\n\t * @default std\n\t */\n\t\"sSortDataType\": 'std',\n\n\t/**\n\t * Class to be applied to the header element when sorting on this column\n\t * @type string\n\t * @default null\n\t */\n\t\"sSortingClass\": null,\n\n\t/**\n\t * Class to be applied to the header element when sorting on this column -\n\t * when jQuery UI theming is used.\n\t * @type string\n\t * @default null\n\t */\n\t\"sSortingClassJUI\": null,\n\n\t/**\n\t * Title of the column - what is seen in the TH element (nTh).\n\t * @type string\n\t */\n\t\"sTitle\": null,\n\n\t/**\n\t * Column sorting and filtering type\n\t * @type string\n\t * @default null\n\t */\n\t\"sType\": null,\n\n\t/**\n\t * Width of the column\n\t * @type string\n\t * @default null\n\t */\n\t\"sWidth\": null,\n\n\t/**\n\t * Width of the column when it was first \"encountered\"\n\t * @type string\n\t * @default null\n\t */\n\t\"sWidthOrig\": null\n};\n\n\n/*\n * Developer note: The properties of the object below are given in Hungarian\n * notation, that was used as the interface for DataTables prior to v1.10, however\n * from v1.10 onwards the primary interface is camel case. In order to avoid\n * breaking backwards compatibility utterly with this change, the Hungarian\n * version is still, internally the primary interface, but is is not documented\n * - hence the @name tags in each doc comment. This allows a Javascript function\n * to create a map from Hungarian notation to camel case (going the other direction\n * would require each property to be listed, which would add around 3K to the size\n * of DataTables, while this method is about a 0.5K hit).\n *\n * Ultimately this does pave the way for Hungarian notation to be dropped\n * completely, but that is a massive amount of work and will break current\n * installs (therefore is on-hold until v2).\n */\n\n/**\n * Initialisation options that can be given to DataTables at initialisation\n * time.\n * @namespace\n */\nDataTable.defaults = {\n\t/**\n\t * An array of data to use for the table, passed in at initialisation which\n\t * will be used in preference to any data which is already in the DOM. This is\n\t * particularly useful for constructing tables purely in Javascript, for\n\t * example with a custom Ajax call.\n\t * @type array\n\t * @default null\n\t *\n\t * @dtopt Option\n\t * @name DataTable.defaults.data\n\t *\n\t * @example\n\t * // Using a 2D array data source\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"data\": [\n\t * ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t * ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t * ],\n\t * \"columns\": [\n\t * { \"title\": \"Engine\" },\n\t * { \"title\": \"Browser\" },\n\t * { \"title\": \"Platform\" },\n\t * { \"title\": \"Version\" },\n\t * { \"title\": \"Grade\" }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using an array of objects as a data source (`data`)\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"data\": [\n\t * {\n\t * \"engine\": \"Trident\",\n\t * \"browser\": \"Internet Explorer 4.0\",\n\t * \"platform\": \"Win 95+\",\n\t * \"version\": 4,\n\t * \"grade\": \"X\"\n\t * },\n\t * {\n\t * \"engine\": \"Trident\",\n\t * \"browser\": \"Internet Explorer 5.0\",\n\t * \"platform\": \"Win 95+\",\n\t * \"version\": 5,\n\t * \"grade\": \"C\"\n\t * }\n\t * ],\n\t * \"columns\": [\n\t * { \"title\": \"Engine\", \"data\": \"engine\" },\n\t * { \"title\": \"Browser\", \"data\": \"browser\" },\n\t * { \"title\": \"Platform\", \"data\": \"platform\" },\n\t * { \"title\": \"Version\", \"data\": \"version\" },\n\t * { \"title\": \"Grade\", \"data\": \"grade\" }\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"aaData\": null,\n\n\n\t/**\n\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t * initialisation. You can define which column(s) the sort is performed\n\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t * should contain an array for each column to be sorted initially containing\n\t * the column's index and a direction string ('asc' or 'desc').\n\t * @type array\n\t * @default [[0,'asc']]\n\t *\n\t * @dtopt Option\n\t * @name DataTable.defaults.order\n\t *\n\t * @example\n\t * // Sort by 3rd column first, and then 4th column\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"order\": [[2,'asc'], [3,'desc']]\n\t * } );\n\t * } );\n\t *\n\t * // No initial sorting\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"order\": []\n\t * } );\n\t * } );\n\t */\n\t\"aaSorting\": [[0,'asc']],\n\n\n\t/**\n\t * This parameter is basically identical to the `sorting` parameter, but\n\t * cannot be overridden by user interaction with the table. What this means\n\t * is that you could have a column (visible or hidden) which the sorting\n\t * will always be forced on first - any sorting after that (from the user)\n\t * will then be performed as required. This can be useful for grouping rows\n\t * together.\n\t * @type array\n\t * @default null\n\t *\n\t * @dtopt Option\n\t * @name DataTable.defaults.orderFixed\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"orderFixed\": [[0,'asc']]\n\t * } );\n\t * } )\n\t */\n\t\"aaSortingFixed\": [],\n\n\n\t/**\n\t * DataTables can be instructed to load data to display in the table from a\n\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t *\n\t * The `ajax` property has three different modes of operation, depending on\n\t * how it is defined. These are:\n\t *\n\t * * `string` - Set the URL from where the data should be loaded from.\n\t * * `object` - Define properties for `jQuery.ajax`.\n\t * * `function` - Custom data get function\n\t *\n\t * `string`\n\t * --------\n\t *\n\t * As a string, the `ajax` property simply defines the URL from which\n\t * DataTables will load data.\n\t *\n\t * `object`\n\t * --------\n\t *\n\t * As an object, the parameters in the object are passed to\n\t * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control\n\t * of the Ajax request. DataTables has a number of default parameters which\n\t * you can override using this option. Please refer to the jQuery\n\t * documentation for a full description of the options available, although\n\t * the following parameters provide additional options in DataTables or\n\t * require special consideration:\n\t *\n\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t * can also be used as a function to manipulate the data DataTables sends\n\t * to the server. The function takes a single parameter, an object of\n\t * parameters with the values that DataTables has readied for sending. An\n\t * object may be returned which will be merged into the DataTables\n\t * defaults, or you can add the items to the object that was passed in and\n\t * not return anything from the function. This supersedes `fnServerParams`\n\t * from DataTables 1.9-.\n\t *\n\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t * `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t * from an Ajax source or for server-side processing - this parameter\n\t * allows that property to be changed. You can use Javascript dotted\n\t * object notation to get a data source for multiple levels of nesting, or\n\t * it my be used as a function. As a function it takes a single parameter,\n\t * the JSON returned from the server, which can be manipulated as\n\t * required, with the returned value being that used by DataTables as the\n\t * data source for the table. This supersedes `sAjaxDataProp` from\n\t * DataTables 1.9-.\n\t *\n\t * * `success` - Should not be overridden it is used internally in\n\t * DataTables. To manipulate / transform the data returned by the server\n\t * use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t *\n\t * `function`\n\t * ----------\n\t *\n\t * As a function, making the Ajax call is left up to yourself allowing\n\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t * than Ajax could be used to obtain the required data, such as Web storage\n\t * or an AIR database.\n\t *\n\t * The function is given four parameters and no return is required. The\n\t * parameters are:\n\t *\n\t * 1. _object_ - Data to send to the server\n\t * 2. _function_ - Callback function that must be executed when the required\n\t * data has been obtained. That data should be passed into the callback\n\t * as the only parameter\n\t * 3. _object_ - DataTables settings object for the table\n\t *\n\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t *\n\t * @type string|object|function\n\t * @default null\n\t *\n\t * @dtopt Option\n\t * @name DataTable.defaults.ajax\n\t * @since 1.10.0\n\t *\n\t * @example\n\t * // Get JSON data from a file via Ajax.\n\t * // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t * $('#example').dataTable( {\n\t * \"ajax\": \"data.json\"\n\t * } );\n\t *\n\t * @example\n\t * // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t * // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t * $('#example').dataTable( {\n\t * \"ajax\": {\n\t * \"url\": \"data.json\",\n\t * \"dataSrc\": \"tableData\"\n\t * }\n\t * } );\n\t *\n\t * @example\n\t * // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t * // from a plain array rather than an array in an object\n\t * $('#example').dataTable( {\n\t * \"ajax\": {\n\t * \"url\": \"data.json\",\n\t * \"dataSrc\": \"\"\n\t * }\n\t * } );\n\t *\n\t * @example\n\t * // Manipulate the data returned from the server - add a link to data\n\t * // (note this can, should, be done using `render` for the column - this\n\t * // is just a simple example of how the data can be manipulated).\n\t * $('#example').dataTable( {\n\t * \"ajax\": {\n\t * \"url\": \"data.json\",\n\t * \"dataSrc\": function ( json ) {\n\t * for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t * json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t * }\n\t * return json;\n\t * }\n\t * }\n\t * } );\n\t *\n\t * @example\n\t * // Add data to the request\n\t * $('#example').dataTable( {\n\t * \"ajax\": {\n\t * \"url\": \"data.json\",\n\t * \"data\": function ( d ) {\n\t * return {\n\t * \"extra_search\": $('#extra').val()\n\t * };\n\t * }\n\t * }\n\t * } );\n\t *\n\t * @example\n\t * // Send request as POST\n\t * $('#example').dataTable( {\n\t * \"ajax\": {\n\t * \"url\": \"data.json\",\n\t * \"type\": \"POST\"\n\t * }\n\t * } );\n\t *\n\t * @example\n\t * // Get the data from localStorage (could interface with a form for\n\t * // adding, editing and removing rows).\n\t * $('#example').dataTable( {\n\t * \"ajax\": function (data, callback, settings) {\n\t * callback(\n\t * JSON.parse( localStorage.getItem('dataTablesData') )\n\t * );\n\t * }\n\t * } );\n\t */\n\t\"ajax\": null,\n\n\n\t/**\n\t * This parameter allows you to readily specify the entries in the length drop\n\t * down menu that DataTables shows when pagination is enabled. It can be\n\t * either a 1D array of options which will be used for both the displayed\n\t * option and the value, or a 2D array which will use the array in the first\n\t * position as the value, and the array in the second position as the\n\t * displayed options (useful for language strings such as 'All').\n\t *\n\t * Note that the `pageLength` property will be automatically set to the\n\t * first value given in this array, unless `pageLength` is also provided.\n\t * @type array\n\t * @default [ 10, 25, 50, 100 ]\n\t *\n\t * @dtopt Option\n\t * @name DataTable.defaults.lengthMenu\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t * } );\n\t * } );\n\t */\n\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\n\n\t/**\n\t * The `columns` option in the initialisation parameter allows you to define\n\t * details about the way individual columns behave. For a full list of\n\t * column options that can be set, please see\n\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t * define your columns, you must have an entry in the array for every single\n\t * column that you have in your table (these can be null if you don't which\n\t * to specify any options).\n\t * @member\n\t *\n\t * @name DataTable.defaults.column\n\t */\n\t\"aoColumns\": null,\n\n\t/**\n\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t * column, multiple columns, or all columns, using the `targets` property of\n\t * each object in the array. This allows great flexibility when creating\n\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t * columns you specifically want. `columnDefs` may use any of the column\n\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t * have `targets` defined in each object in the array. Values in the `targets`\n\t * array may be:\n\t * <ul>\n\t * <li>a string - class name will be matched on the TH for the column</li>\n\t * <li>0 or a positive integer - column index counting from the left</li>\n\t * <li>a negative integer - column index counting from the right</li>\n\t * <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t * </ul>\n\t * @member\n\t *\n\t * @name DataTable.defaults.columnDefs\n\t */\n\t\"aoColumnDefs\": null,\n\n\n\t/**\n\t * Basically the same as `search`, this parameter defines the individual column\n\t * filtering state at initialisation time. The array must be of the same size\n\t * as the number of columns, and each element be an object with the parameters\n\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t * accepted and the default will be used.\n\t * @type array\n\t * @default []\n\t *\n\t * @dtopt Option\n\t * @name DataTable.defaults.searchCols\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"searchCols\": [\n\t * null,\n\t * { \"search\": \"My filter\" },\n\t * null,\n\t * { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t * ]\n\t * } );\n\t * } )\n\t */\n\t\"aoSearchCols\": [],\n\n\n\t/**\n\t * An array of CSS classes that should be applied to displayed rows. This\n\t * array may be of any length, and DataTables will apply each class\n\t * sequentially, looping when required.\n\t * @type array\n\t * @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t * options</i>\n\t *\n\t * @dtopt Option\n\t * @name DataTable.defaults.stripeClasses\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t * } );\n\t * } )\n\t */\n\t\"asStripeClasses\": null,\n\n\n\t/**\n\t * Enable or disable automatic column width calculation. This can be disabled\n\t * as an optimisation (it takes some time to calculate the widths) if the\n\t * tables widths are passed in using `columns`.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.autoWidth\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"autoWidth\": false\n\t * } );\n\t * } );\n\t */\n\t\"bAutoWidth\": true,\n\n\n\t/**\n\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t * are using an Ajax or JS data source for the table. This option, when set to\n\t * true, will cause DataTables to defer the creation of the table elements for\n\t * each row until they are needed for a draw - saving a significant amount of\n\t * time.\n\t * @type boolean\n\t * @default false\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.deferRender\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"ajax\": \"sources/arrays.txt\",\n\t * \"deferRender\": true\n\t * } );\n\t * } );\n\t */\n\t\"bDeferRender\": false,\n\n\n\t/**\n\t * Replace a DataTable which matches the given selector and replace it with\n\t * one which has the properties of the new initialisation object passed. If no\n\t * table matches the selector, then the new DataTable will be constructed as\n\t * per normal.\n\t * @type boolean\n\t * @default false\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.destroy\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"srollY\": \"200px\",\n\t * \"paginate\": false\n\t * } );\n\t *\n\t * // Some time later....\n\t * $('#example').dataTable( {\n\t * \"filter\": false,\n\t * \"destroy\": true\n\t * } );\n\t * } );\n\t */\n\t\"bDestroy\": false,\n\n\n\t/**\n\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t * that it allows the end user to input multiple words (space separated) and\n\t * will match a row containing those words, even if not in the order that was\n\t * specified (this allow matching across multiple columns). Note that if you\n\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t * default filtering input box and retain filtering abilities, please use\n\t * {@link DataTable.defaults.dom}.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.searching\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"searching\": false\n\t * } );\n\t * } );\n\t */\n\t\"bFilter\": true,\n\n\n\t/**\n\t * Enable or disable the table information display. This shows information\n\t * about the data that is currently visible on the page, including information\n\t * about filtered data if that action is being performed.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.info\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"info\": false\n\t * } );\n\t * } );\n\t */\n\t\"bInfo\": true,\n\n\n\t/**\n\t * Allows the end user to select the size of a formatted page from a select\n\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t * @type boolean\n\t * @default true\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.lengthChange\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"lengthChange\": false\n\t * } );\n\t * } );\n\t */\n\t\"bLengthChange\": true,\n\n\n\t/**\n\t * Enable or disable pagination.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.paging\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"paging\": false\n\t * } );\n\t * } );\n\t */\n\t\"bPaginate\": true,\n\n\n\t/**\n\t * Enable or disable the display of a 'processing' indicator when the table is\n\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t * large amounts of data where it can take a noticeable amount of time to sort\n\t * the entries.\n\t * @type boolean\n\t * @default false\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.processing\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"processing\": true\n\t * } );\n\t * } );\n\t */\n\t\"bProcessing\": false,\n\n\n\t/**\n\t * Retrieve the DataTables object for the given selector. Note that if the\n\t * table has already been initialised, this parameter will cause DataTables\n\t * to simply return the object that has already been set up - it will not take\n\t * account of any changes you might have made to the initialisation object\n\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t * you need.\n\t * @type boolean\n\t * @default false\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.retrieve\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * initTable();\n\t * tableActions();\n\t * } );\n\t *\n\t * function initTable ()\n\t * {\n\t * return $('#example').dataTable( {\n\t * \"scrollY\": \"200px\",\n\t * \"paginate\": false,\n\t * \"retrieve\": true\n\t * } );\n\t * }\n\t *\n\t * function tableActions ()\n\t * {\n\t * var table = initTable();\n\t * // perform API operations with oTable\n\t * }\n\t */\n\t\"bRetrieve\": false,\n\n\n\t/**\n\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t * the table's viewport to the given height at all times (useful for layout).\n\t * However, this can look odd when filtering data down to a small data set,\n\t * and the footer is left \"floating\" further down. This parameter (when\n\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t * the result set will fit within the given Y height.\n\t * @type boolean\n\t * @default false\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.scrollCollapse\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"scrollY\": \"200\",\n\t * \"scrollCollapse\": true\n\t * } );\n\t * } );\n\t */\n\t\"bScrollCollapse\": false,\n\n\n\t/**\n\t * Configure DataTables to use server-side processing. Note that the\n\t * `ajax` parameter must also be given in order to give DataTables a\n\t * source to obtain the required data for each draw.\n\t * @type boolean\n\t * @default false\n\t *\n\t * @dtopt Features\n\t * @dtopt Server-side\n\t * @name DataTable.defaults.serverSide\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"serverSide\": true,\n\t * \"ajax\": \"xhr.php\"\n\t * } );\n\t * } );\n\t */\n\t\"bServerSide\": false,\n\n\n\t/**\n\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t * disabled by the `sortable` option for each column.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.ordering\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"ordering\": false\n\t * } );\n\t * } );\n\t */\n\t\"bSort\": true,\n\n\n\t/**\n\t * Enable or display DataTables' ability to sort multiple columns at the\n\t * same time (activated by shift-click by the user).\n\t * @type boolean\n\t * @default true\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.orderMulti\n\t *\n\t * @example\n\t * // Disable multiple column sorting ability\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"orderMulti\": false\n\t * } );\n\t * } );\n\t */\n\t\"bSortMulti\": true,\n\n\n\t/**\n\t * Allows control over whether DataTables should use the top (true) unique\n\t * cell that is found for a single column, or the bottom (false - default).\n\t * This is useful when using complex headers.\n\t * @type boolean\n\t * @default false\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.orderCellsTop\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"orderCellsTop\": true\n\t * } );\n\t * } );\n\t */\n\t\"bSortCellsTop\": false,\n\n\n\t/**\n\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t * presented as a feature switch as it can increase processing time (while\n\t * classes are removed and added) so for large data sets you might want to\n\t * turn this off.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.orderClasses\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"orderClasses\": false\n\t * } );\n\t * } );\n\t */\n\t\"bSortClasses\": true,\n\n\n\t/**\n\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t * used to save table display information such as pagination information,\n\t * display length, filtering and sorting. As such when the end user reloads\n\t * the page the display display will match what thy had previously set up.\n\t *\n\t * Due to the use of `localStorage` the default state saving is not supported\n\t * in IE6 or 7. If state saving is required in those browsers, use\n\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t * @type boolean\n\t * @default false\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.stateSave\n\t *\n\t * @example\n\t * $(document).ready( function () {\n\t * $('#example').dataTable( {\n\t * \"stateSave\": true\n\t * } );\n\t * } );\n\t */\n\t\"bStateSave\": false,\n\n\n\t/**\n\t * This function is called when a TR element is created (and all TD child\n\t * elements have been inserted), or registered if using a DOM source, allowing\n\t * manipulation of the TR element (adding classes etc).\n\t * @type function\n\t * @param {node} row \"TR\" element for the current row\n\t * @param {array} data Raw data array for this row\n\t * @param {int} dataIndex The index of this row in the internal aoData array\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.createdRow\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"createdRow\": function( row, data, dataIndex ) {\n\t * // Bold the grade for all 'A' grade browsers\n\t * if ( data[4] == \"A\" )\n\t * {\n\t * $('td:eq(4)', row).html( '<b>A</b>' );\n\t * }\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnCreatedRow\": null,\n\n\n\t/**\n\t * This function is called on every 'draw' event, and allows you to\n\t * dynamically modify any aspect you want about the created DOM.\n\t * @type function\n\t * @param {object} settings DataTables settings object\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.drawCallback\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"drawCallback\": function( settings ) {\n\t * alert( 'DataTables has redrawn the table' );\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnDrawCallback\": null,\n\n\n\t/**\n\t * Identical to fnHeaderCallback() but for the table footer this function\n\t * allows you to modify the table footer on every 'draw' event.\n\t * @type function\n\t * @param {node} foot \"TR\" element for the footer\n\t * @param {array} data Full table data (as derived from the original HTML)\n\t * @param {int} start Index for the current display starting point in the\n\t * display array\n\t * @param {int} end Index for the current display ending point in the\n\t * display array\n\t * @param {array int} display Index array to translate the visual position\n\t * to the full data array\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.footerCallback\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t * tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t * }\n\t * } );\n\t * } )\n\t */\n\t\"fnFooterCallback\": null,\n\n\n\t/**\n\t * When rendering large numbers in the information element for the table\n\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t * function will override the default method DataTables uses.\n\t * @type function\n\t * @member\n\t * @param {int} toFormat number to be formatted\n\t * @returns {string} formatted string for DataTables to show the number\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.formatNumber\n\t *\n\t * @example\n\t * // Format a number using a single quote for the separator (note that\n\t * // this can also be done with the language.thousands option)\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"formatNumber\": function ( toFormat ) {\n\t * return toFormat.toString().replace(\n\t * /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t * );\n\t * };\n\t * } );\n\t * } );\n\t */\n\t\"fnFormatNumber\": function ( toFormat ) {\n\t\treturn toFormat.toString().replace(\n\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\tthis.oLanguage.sThousands\n\t\t);\n\t},\n\n\n\t/**\n\t * This function is called on every 'draw' event, and allows you to\n\t * dynamically modify the header row. This can be used to calculate and\n\t * display useful information about the table.\n\t * @type function\n\t * @param {node} head \"TR\" element for the header\n\t * @param {array} data Full table data (as derived from the original HTML)\n\t * @param {int} start Index for the current display starting point in the\n\t * display array\n\t * @param {int} end Index for the current display ending point in the\n\t * display array\n\t * @param {array int} display Index array to translate the visual position\n\t * to the full data array\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.headerCallback\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"fheaderCallback\": function( head, data, start, end, display ) {\n\t * head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t * }\n\t * } );\n\t * } )\n\t */\n\t\"fnHeaderCallback\": null,\n\n\n\t/**\n\t * The information element can be used to convey information about the current\n\t * state of the table. Although the internationalisation options presented by\n\t * DataTables are quite capable of dealing with most customisations, there may\n\t * be times where you wish to customise the string further. This callback\n\t * allows you to do exactly that.\n\t * @type function\n\t * @param {object} oSettings DataTables settings object\n\t * @param {int} start Starting position in data for the draw\n\t * @param {int} end End position in data for the draw\n\t * @param {int} max Total number of rows in the table (regardless of\n\t * filtering)\n\t * @param {int} total Total number of rows in the data set, after filtering\n\t * @param {string} pre The string that DataTables has formatted using it's\n\t * own rules\n\t * @returns {string} The string to be displayed in the information element.\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.infoCallback\n\t *\n\t * @example\n\t * $('#example').dataTable( {\n\t * \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t * return start +\" to \"+ end;\n\t * }\n\t * } );\n\t */\n\t\"fnInfoCallback\": null,\n\n\n\t/**\n\t * Called when the table has been initialised. Normally DataTables will\n\t * initialise sequentially and there will be no need for this function,\n\t * however, this does not hold true when using external language information\n\t * since that is obtained using an async XHR call.\n\t * @type function\n\t * @param {object} settings DataTables settings object\n\t * @param {object} json The JSON object request from the server - only\n\t * present if client-side Ajax sourced data is used\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.initComplete\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"initComplete\": function(settings, json) {\n\t * alert( 'DataTables has finished its initialisation.' );\n\t * }\n\t * } );\n\t * } )\n\t */\n\t\"fnInitComplete\": null,\n\n\n\t/**\n\t * Called at the very start of each table draw and can be used to cancel the\n\t * draw by returning false, any other return (including undefined) results in\n\t * the full draw occurring).\n\t * @type function\n\t * @param {object} settings DataTables settings object\n\t * @returns {boolean} False will cancel the draw, anything else (including no\n\t * return) will allow it to complete.\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.preDrawCallback\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"preDrawCallback\": function( settings ) {\n\t * if ( $('#test').val() == 1 ) {\n\t * return false;\n\t * }\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnPreDrawCallback\": null,\n\n\n\t/**\n\t * This function allows you to 'post process' each row after it have been\n\t * generated for each table draw, but before it is rendered on screen. This\n\t * function might be used for setting the row class name etc.\n\t * @type function\n\t * @param {node} row \"TR\" element for the current row\n\t * @param {array} data Raw data array for this row\n\t * @param {int} displayIndex The display index for the current table draw\n\t * @param {int} displayIndexFull The index of the data in the full list of\n\t * rows (after filtering)\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.rowCallback\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t * // Bold the grade for all 'A' grade browsers\n\t * if ( data[4] == \"A\" ) {\n\t * $('td:eq(4)', row).html( '<b>A</b>' );\n\t * }\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnRowCallback\": null,\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * This parameter allows you to override the default function which obtains\n\t * the data from the server so something more suitable for your application.\n\t * For example you could use POST data, or pull information from a Gears or\n\t * AIR database.\n\t * @type function\n\t * @member\n\t * @param {string} source HTTP source to obtain the data from (`ajax`)\n\t * @param {array} data A key/value pair object containing the data to send\n\t * to the server\n\t * @param {function} callback to be called on completion of the data get\n\t * process that will draw the data on the page.\n\t * @param {object} settings DataTables settings object\n\t *\n\t * @dtopt Callbacks\n\t * @dtopt Server-side\n\t * @name DataTable.defaults.serverData\n\t *\n\t * @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"fnServerData\": null,\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * It is often useful to send extra data to the server when making an Ajax\n\t * request - for example custom filtering information, and this callback\n\t * function makes it trivial to send extra information to the server. The\n\t * passed in parameter is the data set that has been constructed by\n\t * DataTables, and you can add to this or modify it as you require.\n\t * @type function\n\t * @param {array} data Data array (array of objects which are name/value\n\t * pairs) that has been constructed by DataTables and will be sent to the\n\t * server. In the case of Ajax sourced data with server-side processing\n\t * this will be an empty array, for server-side processing there will be a\n\t * significant number of parameters!\n\t * @returns {undefined} Ensure that you modify the data array passed in,\n\t * as this is passed by reference.\n\t *\n\t * @dtopt Callbacks\n\t * @dtopt Server-side\n\t * @name DataTable.defaults.serverParams\n\t *\n\t * @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"fnServerParams\": null,\n\n\n\t/**\n\t * Load the table state. With this function you can define from where, and how, the\n\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t * but you might wish to use a server-side database or cookies.\n\t * @type function\n\t * @member\n\t * @param {object} settings DataTables settings object\n\t * @param {object} callback Callback that can be executed when done. It\n\t * should be passed the loaded state object.\n\t * @return {object} The DataTables state object to be loaded\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.stateLoadCallback\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"stateSave\": true,\n\t * \"stateLoadCallback\": function (settings, callback) {\n\t * $.ajax( {\n\t * \"url\": \"/state_load\",\n\t * \"dataType\": \"json\",\n\t * \"success\": function (json) {\n\t * callback( json );\n\t * }\n\t * } );\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnStateLoadCallback\": function ( settings ) {\n\t\ttry {\n\t\t\treturn JSON.parse(\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (e) {\n\t\t\treturn {};\n\t\t}\n\t},\n\n\n\t/**\n\t * Callback which allows modification of the saved state prior to loading that state.\n\t * This callback is called when the table is loading state from the stored data, but\n\t * prior to the settings object being modified by the saved state. Note that for\n\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t * a plug-in.\n\t * @type function\n\t * @param {object} settings DataTables settings object\n\t * @param {object} data The state object that is to be loaded\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.stateLoadParams\n\t *\n\t * @example\n\t * // Remove a saved filter, so filtering is never loaded\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"stateSave\": true,\n\t * \"stateLoadParams\": function (settings, data) {\n\t * data.oSearch.sSearch = \"\";\n\t * }\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Disallow state loading by returning false\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"stateSave\": true,\n\t * \"stateLoadParams\": function (settings, data) {\n\t * return false;\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnStateLoadParams\": null,\n\n\n\t/**\n\t * Callback that is called when the state has been loaded from the state saving method\n\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t * @type function\n\t * @param {object} settings DataTables settings object\n\t * @param {object} data The state object that was loaded\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.stateLoaded\n\t *\n\t * @example\n\t * // Show an alert with the filtering value that was saved\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"stateSave\": true,\n\t * \"stateLoaded\": function (settings, data) {\n\t * alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnStateLoaded\": null,\n\n\n\t/**\n\t * Save the table state. This function allows you to define where and how the state\n\t * information for the table is stored By default DataTables will use `localStorage`\n\t * but you might wish to use a server-side database or cookies.\n\t * @type function\n\t * @member\n\t * @param {object} settings DataTables settings object\n\t * @param {object} data The state object to be saved\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.stateSaveCallback\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"stateSave\": true,\n\t * \"stateSaveCallback\": function (settings, data) {\n\t * // Send an Ajax request to the server with the state object\n\t * $.ajax( {\n\t * \"url\": \"/state_save\",\n\t * \"data\": data,\n\t * \"dataType\": \"json\",\n\t * \"method\": \"POST\"\n\t * \"success\": function () {}\n\t * } );\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\ttry {\n\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\tJSON.stringify( data )\n\t\t\t);\n\t\t} catch (e) {}\n\t},\n\n\n\t/**\n\t * Callback which allows modification of the state to be saved. Called when the table\n\t * has changed state a new state save is required. This method allows modification of\n\t * the state saving object prior to actually doing the save, including addition or\n\t * other state properties or modification. Note that for plug-in authors, you should\n\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t * @type function\n\t * @param {object} settings DataTables settings object\n\t * @param {object} data The state object to be saved\n\t *\n\t * @dtopt Callbacks\n\t * @name DataTable.defaults.stateSaveParams\n\t *\n\t * @example\n\t * // Remove a saved filter, so filtering is never saved\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"stateSave\": true,\n\t * \"stateSaveParams\": function (settings, data) {\n\t * data.oSearch.sSearch = \"\";\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"fnStateSaveParams\": null,\n\n\n\t/**\n\t * Duration for which the saved state information is considered valid. After this period\n\t * has elapsed the state will be returned to the default.\n\t * Value is given in seconds.\n\t * @type int\n\t * @default 7200 <i>(2 hours)</i>\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.stateDuration\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"stateDuration\": 60*60*24; // 1 day\n\t * } );\n\t * } )\n\t */\n\t\"iStateDuration\": 7200,\n\n\n\t/**\n\t * When enabled DataTables will not make a request to the server for the first\n\t * page draw - rather it will use the data already on the page (no sorting etc\n\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t * is used to indicate that deferred loading is required, but it is also used\n\t * to tell DataTables how many records there are in the full table (allowing\n\t * the information element and pagination to be displayed correctly). In the case\n\t * where a filtering is applied to the table on initial load, this can be\n\t * indicated by giving the parameter as an array, where the first element is\n\t * the number of records available after filtering and the second element is the\n\t * number of records without filtering (allowing the table information element\n\t * to be shown correctly).\n\t * @type int | array\n\t * @default null\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.deferLoading\n\t *\n\t * @example\n\t * // 57 records available in the table, no filtering applied\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"serverSide\": true,\n\t * \"ajax\": \"scripts/server_processing.php\",\n\t * \"deferLoading\": 57\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"serverSide\": true,\n\t * \"ajax\": \"scripts/server_processing.php\",\n\t * \"deferLoading\": [ 57, 100 ],\n\t * \"search\": {\n\t * \"search\": \"my_filter\"\n\t * }\n\t * } );\n\t * } );\n\t */\n\t\"iDeferLoading\": null,\n\n\n\t/**\n\t * Number of rows to display on a single page when using pagination. If\n\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t * this to a custom setting using a pop-up menu.\n\t * @type int\n\t * @default 10\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.pageLength\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"pageLength\": 50\n\t * } );\n\t * } )\n\t */\n\t\"iDisplayLength\": 10,\n\n\n\t/**\n\t * Define the starting point for data display when using DataTables with\n\t * pagination. Note that this parameter is the number of records, rather than\n\t * the page number, so if you have 10 records per page and want to start on\n\t * the third page, it should be \"20\".\n\t * @type int\n\t * @default 0\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.displayStart\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"displayStart\": 20\n\t * } );\n\t * } )\n\t */\n\t\"iDisplayStart\": 0,\n\n\n\t/**\n\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t * allows you to tab through the controls and press the enter key to activate them.\n\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t * disable built-in keyboard navigation.\n\t * @type int\n\t * @default 0\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.tabIndex\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"tabIndex\": 1\n\t * } );\n\t * } );\n\t */\n\t\"iTabIndex\": 0,\n\n\n\t/**\n\t * Classes that DataTables assigns to the various components and features\n\t * that it adds to the HTML table. This allows classes to be configured\n\t * during initialisation in addition to through the static\n\t * {@link DataTable.ext.oStdClasses} object).\n\t * @namespace\n\t * @name DataTable.defaults.classes\n\t */\n\t\"oClasses\": {},\n\n\n\t/**\n\t * All strings that DataTables uses in the user interface that it creates\n\t * are defined in this object, allowing you to modified them individually or\n\t * completely replace them all as required.\n\t * @namespace\n\t * @name DataTable.defaults.language\n\t */\n\t\"oLanguage\": {\n\t\t/**\n\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t * must be internationalised as well).\n\t\t * @namespace\n\t\t * @name DataTable.defaults.language.aria\n\t\t */\n\t\t\"oAria\": {\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t * @type string\n\t\t\t * @default : activate to sort column ascending\n\t\t\t *\n\t\t\t * @dtopt Language\n\t\t\t * @name DataTable.defaults.language.aria.sortAscending\n\t\t\t *\n\t\t\t * @example\n\t\t\t * $(document).ready( function() {\n\t\t\t * $('#example').dataTable( {\n\t\t\t * \"language\": {\n\t\t\t * \"aria\": {\n\t\t\t * \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t * }\n\t\t\t * }\n\t\t\t * } );\n\t\t\t * } );\n\t\t\t */\n\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t * @type string\n\t\t\t * @default : activate to sort column ascending\n\t\t\t *\n\t\t\t * @dtopt Language\n\t\t\t * @name DataTable.defaults.language.aria.sortDescending\n\t\t\t *\n\t\t\t * @example\n\t\t\t * $(document).ready( function() {\n\t\t\t * $('#example').dataTable( {\n\t\t\t * \"language\": {\n\t\t\t * \"aria\": {\n\t\t\t * \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t * }\n\t\t\t * }\n\t\t\t * } );\n\t\t\t * } );\n\t\t\t */\n\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t},\n\n\t\t/**\n\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t * control types.\n\t\t * @namespace\n\t\t * @name DataTable.defaults.language.paginate\n\t\t */\n\t\t\"oPaginate\": {\n\t\t\t/**\n\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t * button to take the user to the first page.\n\t\t\t * @type string\n\t\t\t * @default First\n\t\t\t *\n\t\t\t * @dtopt Language\n\t\t\t * @name DataTable.defaults.language.paginate.first\n\t\t\t *\n\t\t\t * @example\n\t\t\t * $(document).ready( function() {\n\t\t\t * $('#example').dataTable( {\n\t\t\t * \"language\": {\n\t\t\t * \"paginate\": {\n\t\t\t * \"first\": \"First page\"\n\t\t\t * }\n\t\t\t * }\n\t\t\t * } );\n\t\t\t * } );\n\t\t\t */\n\t\t\t\"sFirst\": \"First\",\n\n\n\t\t\t/**\n\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t * button to take the user to the last page.\n\t\t\t * @type string\n\t\t\t * @default Last\n\t\t\t *\n\t\t\t * @dtopt Language\n\t\t\t * @name DataTable.defaults.language.paginate.last\n\t\t\t *\n\t\t\t * @example\n\t\t\t * $(document).ready( function() {\n\t\t\t * $('#example').dataTable( {\n\t\t\t * \"language\": {\n\t\t\t * \"paginate\": {\n\t\t\t * \"last\": \"Last page\"\n\t\t\t * }\n\t\t\t * }\n\t\t\t * } );\n\t\t\t * } );\n\t\t\t */\n\t\t\t\"sLast\": \"Last\",\n\n\n\t\t\t/**\n\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t * next page).\n\t\t\t * @type string\n\t\t\t * @default Next\n\t\t\t *\n\t\t\t * @dtopt Language\n\t\t\t * @name DataTable.defaults.language.paginate.next\n\t\t\t *\n\t\t\t * @example\n\t\t\t * $(document).ready( function() {\n\t\t\t * $('#example').dataTable( {\n\t\t\t * \"language\": {\n\t\t\t * \"paginate\": {\n\t\t\t * \"next\": \"Next page\"\n\t\t\t * }\n\t\t\t * }\n\t\t\t * } );\n\t\t\t * } );\n\t\t\t */\n\t\t\t\"sNext\": \"Next\",\n\n\n\t\t\t/**\n\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t * the previous page).\n\t\t\t * @type string\n\t\t\t * @default Previous\n\t\t\t *\n\t\t\t * @dtopt Language\n\t\t\t * @name DataTable.defaults.language.paginate.previous\n\t\t\t *\n\t\t\t * @example\n\t\t\t * $(document).ready( function() {\n\t\t\t * $('#example').dataTable( {\n\t\t\t * \"language\": {\n\t\t\t * \"paginate\": {\n\t\t\t * \"previous\": \"Previous page\"\n\t\t\t * }\n\t\t\t * }\n\t\t\t * } );\n\t\t\t * } );\n\t\t\t */\n\t\t\t\"sPrevious\": \"Previous\"\n\t\t},\n\n\t\t/**\n\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t * instead (either the default or given value).\n\t\t * @type string\n\t\t * @default No data available in table\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.emptyTable\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"emptyTable\": \"No data available in table\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sEmptyTable\": \"No data available in table\",\n\n\n\t\t/**\n\t\t * This string gives information to the end user about the information\n\t\t * that is current on display on the page. The following tokens can be\n\t\t * used in the string and will be dynamically replaced as the table\n\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t * removed as needed by the language requires:\n\t\t *\n\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t * * `\\_PAGE\\_` - Current page number\n\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t *\n\t\t * @type string\n\t\t * @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.info\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\n\n\t\t/**\n\t\t * Display information string for when the table is empty. Typically the\n\t\t * format of this string should match `info`.\n\t\t * @type string\n\t\t * @default Showing 0 to 0 of 0 entries\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.infoEmpty\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"infoEmpty\": \"No entries to show\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\n\n\t\t/**\n\t\t * When a user filters the information in a table, this string is appended\n\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t * @type string\n\t\t * @default (filtered from _MAX_ total entries)\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.infoFiltered\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\n\n\t\t/**\n\t\t * If can be useful to append extra information to the info string at times,\n\t\t * and this variable does exactly that. This information will be appended to\n\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t * being used) at all times.\n\t\t * @type string\n\t\t * @default <i>Empty string</i>\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.infoPostFix\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sInfoPostFix\": \"\",\n\n\n\t\t/**\n\t\t * This decimal place operator is a little different from the other\n\t\t * language options since DataTables doesn't output floating point\n\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t * what this parameter does is modify the sort methods of the table so\n\t\t * that numbers which are in a format which has a character other than\n\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t *\n\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t * the same table and still be sortable, the table must be consistent.\n\t\t * However, multiple different tables on the page can use different\n\t\t * decimal place characters.\n\t\t * @type string\n\t\t * @default \n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.decimal\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"decimal\": \",\"\n\t\t * \"thousands\": \".\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sDecimal\": \"\",\n\n\n\t\t/**\n\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t * used to format large numbers that are used in the table information.\n\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t * character you wish with this parameter.\n\t\t * @type string\n\t\t * @default ,\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.thousands\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"thousands\": \"'\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sThousands\": \",\",\n\n\n\t\t/**\n\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t * with a custom select box if required.\n\t\t * @type string\n\t\t * @default Show _MENU_ entries\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.lengthMenu\n\t\t *\n\t\t * @example\n\t\t * // Language change only\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"lengthMenu\": \"Display _MENU_ records\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t *\n\t\t * @example\n\t\t * // Language and options change\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"lengthMenu\": 'Display <select>'+\n\t\t * '<option value=\"10\">10</option>'+\n\t\t * '<option value=\"20\">20</option>'+\n\t\t * '<option value=\"30\">30</option>'+\n\t\t * '<option value=\"40\">40</option>'+\n\t\t * '<option value=\"50\">50</option>'+\n\t\t * '<option value=\"-1\">All</option>'+\n\t\t * '</select> records'\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\n\n\t\t/**\n\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t * parameter is not used when loading data by server-side processing, just\n\t\t * Ajax sourced data with client-side processing.\n\t\t * @type string\n\t\t * @default Loading...\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.loadingRecords\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"loadingRecords\": \"Please wait - loading...\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sLoadingRecords\": \"Loading...\",\n\n\n\t\t/**\n\t\t * Text which is displayed when the table is processing a user action\n\t\t * (usually a sort command or similar).\n\t\t * @type string\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.processing\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"processing\": \"DataTables is currently busy\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sProcessing\": \"\",\n\n\n\t\t/**\n\t\t * Details the actions that will be taken when the user types into the\n\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t * then the input box is appended to the string automatically.\n\t\t * @type string\n\t\t * @default Search:\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.search\n\t\t *\n\t\t * @example\n\t\t * // Input text box will be appended at the end automatically\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"search\": \"Filter records:\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t *\n\t\t * @example\n\t\t * // Specify where the filter should appear\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"search\": \"Apply filter _INPUT_ to table\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sSearch\": \"Search:\",\n\n\n\t\t/**\n\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t * @type string\n\t\t * @default \n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.searchPlaceholder\n\t\t */\n\t\t\"sSearchPlaceholder\": \"\",\n\n\n\t\t/**\n\t\t * All of the language information can be stored in a file on the\n\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t * and the object has the same properties as the oLanguage object in the\n\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t * the example language files to see how this works in action.\n\t\t * @type string\n\t\t * @default <i>Empty string - i.e. disabled</i>\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.url\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"url\": \"https://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sUrl\": \"\",\n\n\n\t\t/**\n\t\t * Text shown inside the table records when the is no information to be\n\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t * information in the table at all (regardless of filtering).\n\t\t * @type string\n\t\t * @default No matching records found\n\t\t *\n\t\t * @dtopt Language\n\t\t * @name DataTable.defaults.language.zeroRecords\n\t\t *\n\t\t * @example\n\t\t * $(document).ready( function() {\n\t\t * $('#example').dataTable( {\n\t\t * \"language\": {\n\t\t * \"zeroRecords\": \"No records to display\"\n\t\t * }\n\t\t * } );\n\t\t * } );\n\t\t */\n\t\t\"sZeroRecords\": \"No matching records found\"\n\t},\n\n\n\t/**\n\t * This parameter allows you to have define the global filtering state at\n\t * initialisation time. As an object the `search` parameter must be\n\t * defined, but all other parameters are optional. When `regex` is true,\n\t * the search string will be treated as a regular expression, when false\n\t * (default) it will be treated as a straight string. When `smart`\n\t * DataTables will use it's smart filtering methods (to word match at\n\t * any point in the data), when false this will not be done.\n\t * @namespace\n\t * @extends DataTable.models.oSearch\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.search\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"search\": {\"search\": \"Initial search\"}\n\t * } );\n\t * } )\n\t */\n\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * By default DataTables will look for the property `data` (or `aaData` for\n\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t * source or for server-side processing - this parameter allows that\n\t * property to be changed. You can use Javascript dotted object notation to\n\t * get a data source for multiple levels of nesting.\n\t * @type string\n\t * @default data\n\t *\n\t * @dtopt Options\n\t * @dtopt Server-side\n\t * @name DataTable.defaults.ajaxDataProp\n\t *\n\t * @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sAjaxDataProp\": \"data\",\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * You can instruct DataTables to load data from an external\n\t * source using this parameter (use aData if you want to pass data in you\n\t * already have). Simply provide a url a JSON object can be obtained from.\n\t * @type string\n\t * @default null\n\t *\n\t * @dtopt Options\n\t * @dtopt Server-side\n\t * @name DataTable.defaults.ajaxSource\n\t *\n\t * @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sAjaxSource\": null,\n\n\n\t/**\n\t * This initialisation variable allows you to specify exactly where in the\n\t * DOM you want DataTables to inject the various controls it adds to the page\n\t * (for example you might want the pagination controls at the top of the\n\t * table). DIV elements (with or without a custom class) can also be added to\n\t * aid styling. The follow syntax is used:\n\t * <ul>\n\t * <li>The following options are allowed:\n\t * <ul>\n\t * <li>'l' - Length changing</li>\n\t * <li>'f' - Filtering input</li>\n\t * <li>'t' - The table!</li>\n\t * <li>'i' - Information</li>\n\t * <li>'p' - Pagination</li>\n\t * <li>'r' - pRocessing</li>\n\t * </ul>\n\t * </li>\n\t * <li>The following constants are allowed:\n\t * <ul>\n\t * <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t * <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t * </ul>\n\t * </li>\n\t * <li>The following syntax is expected:\n\t * <ul>\n\t * <li>'<' and '>' - div elements</li>\n\t * <li>'<\"class\" and '>' - div with a class</li>\n\t * <li>'<\"#id\" and '>' - div with an ID</li>\n\t * </ul>\n\t * </li>\n\t * <li>Examples:\n\t * <ul>\n\t * <li>'<\"wrapper\"flipt>'</li>\n\t * <li>'<lf<t>ip>'</li>\n\t * </ul>\n\t * </li>\n\t * </ul>\n\t * @type string\n\t * @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t * <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.dom\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"dom\": '<\"top\"i>rt<\"bottom\"flp><\"clear\">'\n\t * } );\n\t * } );\n\t */\n\t\"sDom\": \"lfrtip\",\n\n\n\t/**\n\t * Search delay option. This will throttle full table searches that use the\n\t * DataTables provided search input element (it does not effect calls to\n\t * `dt-api search()`, providing a delay before the search is made.\n\t * @type integer\n\t * @default 0\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.searchDelay\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"searchDelay\": 200\n\t * } );\n\t * } )\n\t */\n\t\"searchDelay\": null,\n\n\n\t/**\n\t * DataTables features six different built-in options for the buttons to\n\t * display for pagination control:\n\t *\n\t * * `numbers` - Page number buttons only\n\t * * `simple` - 'Previous' and 'Next' buttons only\n\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t * \n\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t * @type string\n\t * @default simple_numbers\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.pagingType\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"pagingType\": \"full_numbers\"\n\t * } );\n\t * } )\n\t */\n\t\"sPaginationType\": \"simple_numbers\",\n\n\n\t/**\n\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t * certain layout, or you have a large number of columns in the table, you\n\t * can enable x-scrolling to show the table in a viewport, which can be\n\t * scrolled. This property can be `true` which will allow the table to\n\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t * is recommended.\n\t * @type boolean|string\n\t * @default <i>blank string - i.e. disabled</i>\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.scrollX\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"scrollX\": true,\n\t * \"scrollCollapse\": true\n\t * } );\n\t * } );\n\t */\n\t\"sScrollX\": \"\",\n\n\n\t/**\n\t * This property can be used to force a DataTable to use more width than it\n\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t * table which requires to be well spaced, this parameter is useful for\n\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t * measurement).\n\t * @type string\n\t * @default <i>blank string - i.e. disabled</i>\n\t *\n\t * @dtopt Options\n\t * @name DataTable.defaults.scrollXInner\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"scrollX\": \"100%\",\n\t * \"scrollXInner\": \"110%\"\n\t * } );\n\t * } );\n\t */\n\t\"sScrollXInner\": \"\",\n\n\n\t/**\n\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t * to the given height, and enable scrolling for any data which overflows the\n\t * current viewport. This can be used as an alternative to paging to display\n\t * a lot of data in a small area (although paging and scrolling can both be\n\t * enabled at the same time). This property can be any CSS unit, or a number\n\t * (in which case it will be treated as a pixel measurement).\n\t * @type string\n\t * @default <i>blank string - i.e. disabled</i>\n\t *\n\t * @dtopt Features\n\t * @name DataTable.defaults.scrollY\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"scrollY\": \"200px\",\n\t * \"paginate\": false\n\t * } );\n\t * } );\n\t */\n\t\"sScrollY\": \"\",\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t * processing or Ajax sourced data.\n\t * @type string\n\t * @default GET\n\t *\n\t * @dtopt Options\n\t * @dtopt Server-side\n\t * @name DataTable.defaults.serverMethod\n\t *\n\t * @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sServerMethod\": \"GET\",\n\n\n\t/**\n\t * DataTables makes use of renderers when displaying HTML elements for\n\t * a table. These renderers can be added or modified by plug-ins to\n\t * generate suitable mark-up for a site. For example the Bootstrap\n\t * integration plug-in for DataTables uses a paging button renderer to\n\t * display pagination buttons in the mark-up required by Bootstrap.\n\t *\n\t * For further information about the renderers available see\n\t * DataTable.ext.renderer\n\t * @type string|object\n\t * @default null\n\t *\n\t * @name DataTable.defaults.renderer\n\t *\n\t */\n\t\"renderer\": null,\n\n\n\t/**\n\t * Set the data property name that DataTables should use to get a row's id\n\t * to set as the `id` property in the node.\n\t * @type string\n\t * @default DT_RowId\n\t *\n\t * @name DataTable.defaults.rowId\n\t */\n\t\"rowId\": \"DT_RowId\"\n};\n\n_fnHungarianMap( DataTable.defaults );\n\n\n\n/*\n * Developer note - See note in model.defaults.js about the use of Hungarian\n * notation and camel case.\n */\n\n/**\n * Column options that can be given to DataTables at initialisation time.\n * @namespace\n */\nDataTable.defaults.column = {\n\t/**\n\t * Define which column(s) an order will occur on for this column. This\n\t * allows a column's ordering to take multiple columns into account when\n\t * doing a sort or use the data from a different column. For example first\n\t * name / last name columns make sense to do a multi-column sort over the\n\t * two columns.\n\t * @type array|int\n\t * @default null <i>Takes the value of the column index automatically</i>\n\t *\n\t * @name DataTable.defaults.column.orderData\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t * { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t * { \"orderData\": 2, \"targets\": [ 2 ] }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"orderData\": [ 0, 1 ] },\n\t * { \"orderData\": [ 1, 0 ] },\n\t * { \"orderData\": 2 },\n\t * null,\n\t * null\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"aDataSort\": null,\n\t\"iDataSort\": -1,\n\n\n\t/**\n\t * You can control the default ordering direction, and even alter the\n\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t * using this parameter.\n\t * @type array\n\t * @default [ 'asc', 'desc' ]\n\t *\n\t * @name DataTable.defaults.column.orderSequence\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t * { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t * { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * null,\n\t * { \"orderSequence\": [ \"asc\" ] },\n\t * { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t * { \"orderSequence\": [ \"desc\" ] },\n\t * null\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"asSorting\": [ 'asc', 'desc' ],\n\n\n\t/**\n\t * Enable or disable filtering on the data in this column.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @name DataTable.defaults.column.searchable\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"searchable\": false, \"targets\": [ 0 ] }\n\t * ] } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"searchable\": false },\n\t * null,\n\t * null,\n\t * null,\n\t * null\n\t * ] } );\n\t * } );\n\t */\n\t\"bSearchable\": true,\n\n\n\t/**\n\t * Enable or disable ordering on this column.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @name DataTable.defaults.column.orderable\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"orderable\": false, \"targets\": [ 0 ] }\n\t * ] } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"orderable\": false },\n\t * null,\n\t * null,\n\t * null,\n\t * null\n\t * ] } );\n\t * } );\n\t */\n\t\"bSortable\": true,\n\n\n\t/**\n\t * Enable or disable the display of this column.\n\t * @type boolean\n\t * @default true\n\t *\n\t * @name DataTable.defaults.column.visible\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"visible\": false, \"targets\": [ 0 ] }\n\t * ] } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"visible\": false },\n\t * null,\n\t * null,\n\t * null,\n\t * null\n\t * ] } );\n\t * } );\n\t */\n\t\"bVisible\": true,\n\n\n\t/**\n\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t * allowing you to modify the DOM element (add background colour for example) when the\n\t * element is available.\n\t * @type function\n\t * @param {element} td The TD node that has been created\n\t * @param {*} cellData The Data for the cell\n\t * @param {array|object} rowData The data for the whole row\n\t * @param {int} row The row index for the aoData data store\n\t * @param {int} col The column index for aoColumns\n\t *\n\t * @name DataTable.defaults.column.createdCell\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [ {\n\t * \"targets\": [3],\n\t * \"createdCell\": function (td, cellData, rowData, row, col) {\n\t * if ( cellData == \"1.7\" ) {\n\t * $(td).css('color', 'blue')\n\t * }\n\t * }\n\t * } ]\n\t * });\n\t * } );\n\t */\n\t\"fnCreatedCell\": null,\n\n\n\t/**\n\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t * consistency. `dataProp` can still be used, as there is backwards\n\t * compatibility in DataTables for this option, but it is strongly\n\t * recommended that you use `data` in preference to `dataProp`.\n\t * @name DataTable.defaults.column.dataProp\n\t */\n\n\n\t/**\n\t * This property can be used to read data from any data source property,\n\t * including deeply nested objects / properties. `data` can be given in a\n\t * number of different ways which effect its behaviour:\n\t *\n\t * * `integer` - treated as an array index for the data source. This is the\n\t * default that DataTables uses (incrementally increased for each column).\n\t * * `string` - read an object property from the data source. There are\n\t * three 'special' options that can be used in the string to alter how\n\t * DataTables reads the data from the source object:\n\t * * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t * Javascript to read from nested objects, so to can the options\n\t * specified in `data`. For example: `browser.version` or\n\t * `browser.name`. If your object parameter name contains a period, use\n\t * `\\\\` to escape it - i.e. `first\\\\.name`.\n\t * * `[]` - Array notation. DataTables can automatically combine data\n\t * from and array source, joining the data with the characters provided\n\t * between the two brackets. For example: `name[, ]` would provide a\n\t * comma-space separated list from the source array. If no characters\n\t * are provided between the brackets, the original array source is\n\t * returned.\n\t * * `()` - Function notation. Adding `()` to the end of a parameter will\n\t * execute a function of the name given. For example: `browser()` for a\n\t * simple function on the data source, `browser.version()` for a\n\t * function in a nested property or even `browser().version` to get an\n\t * object property if the function called returns an object. Note that\n\t * function notation is recommended for use in `render` rather than\n\t * `data` as it is much simpler to use as a renderer.\n\t * * `null` - use the original data source for the row rather than plucking\n\t * data directly from it. This action has effects on two other\n\t * initialisation options:\n\t * * `defaultContent` - When null is given as the `data` option and\n\t * `defaultContent` is specified for the column, the value defined by\n\t * `defaultContent` will be used for the cell.\n\t * * `render` - When null is used for the `data` option and the `render`\n\t * option is specified for the column, the whole data source for the\n\t * row is used for the renderer.\n\t * * `function` - the function given will be executed whenever DataTables\n\t * needs to set or get the data for a cell in the column. The function\n\t * takes three parameters:\n\t * * Parameters:\n\t * * `{array|object}` The data source for the row\n\t * * `{string}` The type call data requested - this will be 'set' when\n\t * setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t * when gathering data. Note that when `undefined` is given for the\n\t * type DataTables expects to get the raw data for the object back<\n\t * * `{*}` Data to set when the second parameter is 'set'.\n\t * * Return:\n\t * * The return value from the function is not required when 'set' is\n\t * the type of call, but otherwise the return is what will be used\n\t * for the data requested.\n\t *\n\t * Note that `data` is a getter and setter option. If you just require\n\t * formatting of data for output, you will likely want to use `render` which\n\t * is simply a getter and thus simpler to use.\n\t *\n\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t * name change reflects the flexibility of this property and is consistent\n\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t * be used by DataTables, as it automatically maps the old name to the new\n\t * if required.\n\t *\n\t * @type string|int|function|null\n\t * @default null <i>Use automatically calculated column index</i>\n\t *\n\t * @name DataTable.defaults.column.data\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Read table data from objects\n\t * // JSON structure for each row:\n\t * // {\n\t * // \"engine\": {value},\n\t * // \"browser\": {value},\n\t * // \"platform\": {value},\n\t * // \"version\": {value},\n\t * // \"grade\": {value}\n\t * // }\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"ajaxSource\": \"sources/objects.txt\",\n\t * \"columns\": [\n\t * { \"data\": \"engine\" },\n\t * { \"data\": \"browser\" },\n\t * { \"data\": \"platform\" },\n\t * { \"data\": \"version\" },\n\t * { \"data\": \"grade\" }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Read information from deeply nested objects\n\t * // JSON structure for each row:\n\t * // {\n\t * // \"engine\": {value},\n\t * // \"browser\": {value},\n\t * // \"platform\": {\n\t * // \"inner\": {value}\n\t * // },\n\t * // \"details\": [\n\t * // {value}, {value}\n\t * // ]\n\t * // }\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"ajaxSource\": \"sources/deep.txt\",\n\t * \"columns\": [\n\t * { \"data\": \"engine\" },\n\t * { \"data\": \"browser\" },\n\t * { \"data\": \"platform.inner\" },\n\t * { \"data\": \"details.0\" },\n\t * { \"data\": \"details.1\" }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `data` as a function to provide different information for\n\t * // sorting, filtering and display. In this case, currency (price)\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [ {\n\t * \"targets\": [ 0 ],\n\t * \"data\": function ( source, type, val ) {\n\t * if (type === 'set') {\n\t * source.price = val;\n\t * // Store the computed display and filter values for efficiency\n\t * source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t * source.price_filter = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t * return;\n\t * }\n\t * else if (type === 'display') {\n\t * return source.price_display;\n\t * }\n\t * else if (type === 'filter') {\n\t * return source.price_filter;\n\t * }\n\t * // 'sort', 'type' and undefined all just use the integer\n\t * return source.price;\n\t * }\n\t * } ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using default content\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [ {\n\t * \"targets\": [ 0 ],\n\t * \"data\": null,\n\t * \"defaultContent\": \"Click to edit\"\n\t * } ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using array notation - outputting a list from an array\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [ {\n\t * \"targets\": [ 0 ],\n\t * \"data\": \"name[, ]\"\n\t * } ]\n\t * } );\n\t * } );\n\t *\n\t */\n\t\"mData\": null,\n\n\n\t/**\n\t * This property is the rendering partner to `data` and it is suggested that\n\t * when you want to manipulate data for display (including filtering,\n\t * sorting etc) without altering the underlying data for the table, use this\n\t * property. `render` can be considered to be the the read only companion to\n\t * `data` which is read / write (then as such more complex). Like `data`\n\t * this option can be given in a number of different ways to effect its\n\t * behaviour:\n\t *\n\t * * `integer` - treated as an array index for the data source. This is the\n\t * default that DataTables uses (incrementally increased for each column).\n\t * * `string` - read an object property from the data source. There are\n\t * three 'special' options that can be used in the string to alter how\n\t * DataTables reads the data from the source object:\n\t * * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t * Javascript to read from nested objects, so to can the options\n\t * specified in `data`. For example: `browser.version` or\n\t * `browser.name`. If your object parameter name contains a period, use\n\t * `\\\\` to escape it - i.e. `first\\\\.name`.\n\t * * `[]` - Array notation. DataTables can automatically combine data\n\t * from and array source, joining the data with the characters provided\n\t * between the two brackets. For example: `name[, ]` would provide a\n\t * comma-space separated list from the source array. If no characters\n\t * are provided between the brackets, the original array source is\n\t * returned.\n\t * * `()` - Function notation. Adding `()` to the end of a parameter will\n\t * execute a function of the name given. For example: `browser()` for a\n\t * simple function on the data source, `browser.version()` for a\n\t * function in a nested property or even `browser().version` to get an\n\t * object property if the function called returns an object.\n\t * * `object` - use different data for the different data types requested by\n\t * DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t * of the object is the data type the property refers to and the value can\n\t * defined using an integer, string or function using the same rules as\n\t * `render` normally does. Note that an `_` option _must_ be specified.\n\t * This is the default value to use if you haven't specified a value for\n\t * the data type requested by DataTables.\n\t * * `function` - the function given will be executed whenever DataTables\n\t * needs to set or get the data for a cell in the column. The function\n\t * takes three parameters:\n\t * * Parameters:\n\t * * {array|object} The data source for the row (based on `data`)\n\t * * {string} The type call data requested - this will be 'filter',\n\t * 'display', 'type' or 'sort'.\n\t * * {array|object} The full data source for the row (not based on\n\t * `data`)\n\t * * Return:\n\t * * The return value from the function is what will be used for the\n\t * data requested.\n\t *\n\t * @type string|int|function|object|null\n\t * @default null Use the data source value.\n\t *\n\t * @name DataTable.defaults.column.render\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Create a comma separated list from an array of objects\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"ajaxSource\": \"sources/deep.txt\",\n\t * \"columns\": [\n\t * { \"data\": \"engine\" },\n\t * { \"data\": \"browser\" },\n\t * {\n\t * \"data\": \"platform\",\n\t * \"render\": \"[, ].name\"\n\t * }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Execute a function to obtain data\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [ {\n\t * \"targets\": [ 0 ],\n\t * \"data\": null, // Use the full data source object for the renderer's source\n\t * \"render\": \"browserName()\"\n\t * } ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // As an object, extracting different data for the different types\n\t * // This would be used with a data source such as:\n\t * // { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t * // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t * // (which has both forms) is used for filtering for if a user inputs either format, while\n\t * // the formatted phone number is the one that is shown in the table.\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [ {\n\t * \"targets\": [ 0 ],\n\t * \"data\": null, // Use the full data source object for the renderer's source\n\t * \"render\": {\n\t * \"_\": \"phone\",\n\t * \"filter\": \"phone_filter\",\n\t * \"display\": \"phone_display\"\n\t * }\n\t * } ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Use as a function to create a link from the data source\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [ {\n\t * \"targets\": [ 0 ],\n\t * \"data\": \"download_link\",\n\t * \"render\": function ( data, type, full ) {\n\t * return '<a href=\"'+data+'\">Download</a>';\n\t * }\n\t * } ]\n\t * } );\n\t * } );\n\t */\n\t\"mRender\": null,\n\n\n\t/**\n\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t * @type string\n\t * @default td\n\t *\n\t * @name DataTable.defaults.column.cellType\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Make the first column use TH cells\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [ {\n\t * \"targets\": [ 0 ],\n\t * \"cellType\": \"th\"\n\t * } ]\n\t * } );\n\t * } );\n\t */\n\t\"sCellType\": \"td\",\n\n\n\t/**\n\t * Class to give to each cell in this column.\n\t * @type string\n\t * @default <i>Empty string</i>\n\t *\n\t * @name DataTable.defaults.column.class\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"class\": \"my_class\" },\n\t * null,\n\t * null,\n\t * null,\n\t * null\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"sClass\": \"\",\n\n\t/**\n\t * When DataTables calculates the column widths to assign to each column,\n\t * it finds the longest string in each column and then constructs a\n\t * temporary table and reads the widths from that. The problem with this\n\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t * string - thus the calculation can go wrong (doing it properly and putting\n\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t * a \"work around\" we provide this option. It will append its value to the\n\t * text that is found to be the longest string for the column - i.e. padding.\n\t * Generally you shouldn't need this!\n\t * @type string\n\t * @default <i>Empty string<i>\n\t *\n\t * @name DataTable.defaults.column.contentPadding\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * null,\n\t * null,\n\t * null,\n\t * {\n\t * \"contentPadding\": \"mmm\"\n\t * }\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"sContentPadding\": \"\",\n\n\n\t/**\n\t * Allows a default value to be given for a column's data, and will be used\n\t * whenever a null data source is encountered (this can be because `data`\n\t * is set to null, or because the data source itself is null).\n\t * @type string\n\t * @default null\n\t *\n\t * @name DataTable.defaults.column.defaultContent\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * {\n\t * \"data\": null,\n\t * \"defaultContent\": \"Edit\",\n\t * \"targets\": [ -1 ]\n\t * }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * null,\n\t * null,\n\t * null,\n\t * {\n\t * \"data\": null,\n\t * \"defaultContent\": \"Edit\"\n\t * }\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"sDefaultContent\": null,\n\n\n\t/**\n\t * This parameter is only used in DataTables' server-side processing. It can\n\t * be exceptionally useful to know what columns are being displayed on the\n\t * client side, and to map these to database fields. When defined, the names\n\t * also allow DataTables to reorder information from the server if it comes\n\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t * client-side, your server-side code does not also need updating).\n\t * @type string\n\t * @default <i>Empty string</i>\n\t *\n\t * @name DataTable.defaults.column.name\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t * { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t * { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t * { \"name\": \"version\", \"targets\": [ 3 ] },\n\t * { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"name\": \"engine\" },\n\t * { \"name\": \"browser\" },\n\t * { \"name\": \"platform\" },\n\t * { \"name\": \"version\" },\n\t * { \"name\": \"grade\" }\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"sName\": \"\",\n\n\n\t/**\n\t * Defines a data source type for the ordering which can be used to read\n\t * real-time information from the table (updating the internally cached\n\t * version) prior to ordering. This allows ordering to occur on user\n\t * editable elements such as form inputs.\n\t * @type string\n\t * @default std\n\t *\n\t * @name DataTable.defaults.column.orderDataType\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t * { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t * { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t * { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * null,\n\t * null,\n\t * { \"orderDataType\": \"dom-text\" },\n\t * { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t * { \"orderDataType\": \"dom-select\" },\n\t * { \"orderDataType\": \"dom-checkbox\" }\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"sSortDataType\": \"std\",\n\n\n\t/**\n\t * The title of this column.\n\t * @type string\n\t * @default null <i>Derived from the 'TH' value for this column in the\n\t * original HTML table.</i>\n\t *\n\t * @name DataTable.defaults.column.title\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"title\": \"My column title\" },\n\t * null,\n\t * null,\n\t * null,\n\t * null\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"sTitle\": null,\n\n\n\t/**\n\t * The type allows you to specify how the data for this column will be\n\t * ordered. Four types (string, numeric, date and html (which will strip\n\t * HTML tags before ordering)) are currently available. Note that only date\n\t * formats understood by Javascript's Date() object will be accepted as type\n\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t * through plug-ins.\n\t * @type string\n\t * @default null <i>Auto-detected from raw data</i>\n\t *\n\t * @name DataTable.defaults.column.type\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"type\": \"html\", \"targets\": [ 0 ] }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"type\": \"html\" },\n\t * null,\n\t * null,\n\t * null,\n\t * null\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"sType\": null,\n\n\n\t/**\n\t * Defining the width of the column, this parameter may take any CSS value\n\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t * been given a specific width through this interface ensuring that the table\n\t * remains readable.\n\t * @type string\n\t * @default null <i>Automatic</i>\n\t *\n\t * @name DataTable.defaults.column.width\n\t * @dtopt Columns\n\t *\n\t * @example\n\t * // Using `columnDefs`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columnDefs\": [\n\t * { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t * ]\n\t * } );\n\t * } );\n\t *\n\t * @example\n\t * // Using `columns`\n\t * $(document).ready( function() {\n\t * $('#example').dataTable( {\n\t * \"columns\": [\n\t * { \"width\": \"20%\" },\n\t * null,\n\t * null,\n\t * null,\n\t * null\n\t * ]\n\t * } );\n\t * } );\n\t */\n\t\"sWidth\": null\n};\n\n_fnHungarianMap( DataTable.defaults.column );\n\n\n\n/**\n * DataTables settings object - this holds all the information needed for a\n * given table, including configuration, data and current application of the\n * table options. DataTables does not have a single instance for each DataTable\n * with the settings attached to that instance, but rather instances of the\n * DataTable \"class\" are created on-the-fly as needed (typically by a\n * $().dataTable() call) and the settings object is then applied to that\n * instance.\n *\n * Note that this object is related to {@link DataTable.defaults} but this\n * one is the internal data store for DataTables's cache of columns. It should\n * NOT be manipulated outside of DataTables. Any configuration should be done\n * through the initialisation options.\n * @namespace\n * @todo Really should attach the settings object to individual instances so we\n * don't need to create new instances on each $().dataTable() call (if the\n * table already exists). It would also save passing oSettings around and\n * into every single function. However, this is a very significant\n * architecture change for DataTables and will almost certainly break\n * backwards compatibility with older installations. This is something that\n * will be done in 2.0.\n */\nDataTable.models.oSettings = {\n\t/**\n\t * Primary features of DataTables and their enablement state.\n\t * @namespace\n\t */\n\t\"oFeatures\": {\n\n\t\t/**\n\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t * optimum table and columns widths (true) or not (false).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bAutoWidth\": null,\n\n\t\t/**\n\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t * needed by a driven page draw. This can give a significant speed\n\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t * difference at all for DOM and server-side processing tables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bDeferRender\": null,\n\n\t\t/**\n\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bFilter\": null,\n\n\t\t/**\n\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t * flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bInfo\": null,\n\n\t\t/**\n\t\t * Present a user control allowing the end user to change the page size\n\t\t * when pagination is enabled.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bLengthChange\": null,\n\n\t\t/**\n\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t * changing must also be disabled.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bPaginate\": null,\n\n\t\t/**\n\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t * user request - typically an Ajax request for server-side processing.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bProcessing\": null,\n\n\t\t/**\n\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t * get all data from the server for every draw - there is no filtering,\n\t\t * sorting or paging done on the client-side.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bServerSide\": null,\n\n\t\t/**\n\t\t * Sorting enablement flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bSort\": null,\n\n\t\t/**\n\t\t * Multi-column sorting\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bSortMulti\": null,\n\n\t\t/**\n\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t * there is a lot of DOM interaction.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bSortClasses\": null,\n\n\t\t/**\n\t\t * State saving enablement flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bStateSave\": null\n\t},\n\n\n\t/**\n\t * Scrolling settings for a table.\n\t * @namespace\n\t */\n\t\"oScroll\": {\n\t\t/**\n\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t * table container down to the height of the table (when true).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type boolean\n\t\t */\n\t\t\"bCollapse\": null,\n\n\t\t/**\n\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t * during table initialisation.\n\t\t * @type int\n\t\t * @default 0\n\t\t */\n\t\t\"iBarWidth\": 0,\n\n\t\t/**\n\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t * disabled if an empty string.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type string\n\t\t */\n\t\t\"sX\": null,\n\n\t\t/**\n\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t * should not need to use this.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type string\n\t\t * @deprecated\n\t\t */\n\t\t\"sXInner\": null,\n\n\t\t/**\n\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t * if an empty string.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t * @type string\n\t\t */\n\t\t\"sY\": null\n\t},\n\n\t/**\n\t * Language information for the table.\n\t * @namespace\n\t * @extends DataTable.defaults.oLanguage\n\t */\n\t\"oLanguage\": {\n\t\t/**\n\t\t * Information callback function. See\n\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t * @type function\n\t\t * @default null\n\t\t */\n\t\t\"fnInfoCallback\": null\n\t},\n\n\t/**\n\t * Browser support parameters\n\t * @namespace\n\t */\n\t\"oBrowser\": {\n\t\t/**\n\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t * scrolling element (IE6/7)\n\t\t * @type boolean\n\t\t * @default false\n\t\t */\n\t\t\"bScrollOversize\": false,\n\n\t\t/**\n\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t * scrolling container - needed for rtl language layout, although not\n\t\t * all browsers move the scrollbar (Safari).\n\t\t * @type boolean\n\t\t * @default false\n\t\t */\n\t\t\"bScrollbarLeft\": false,\n\n\t\t/**\n\t\t * Flag for if `getBoundingClientRect` is fully supported or not\n\t\t * @type boolean\n\t\t * @default false\n\t\t */\n\t\t\"bBounding\": false,\n\n\t\t/**\n\t\t * Browser scrollbar width\n\t\t * @type integer\n\t\t * @default 0\n\t\t */\n\t\t\"barWidth\": 0\n\t},\n\n\n\t\"ajax\": null,\n\n\n\t/**\n\t * Array referencing the nodes which are used for the features. The\n\t * parameters of this object match what is allowed by sDom - i.e.\n\t * <ul>\n\t * <li>'l' - Length changing</li>\n\t * <li>'f' - Filtering input</li>\n\t * <li>'t' - The table!</li>\n\t * <li>'i' - Information</li>\n\t * <li>'p' - Pagination</li>\n\t * <li>'r' - pRocessing</li>\n\t * </ul>\n\t * @type array\n\t * @default []\n\t */\n\t\"aanFeatures\": [],\n\n\t/**\n\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t * information.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoData\": [],\n\n\t/**\n\t * Array of indexes which are in the current display (after filtering etc)\n\t * @type array\n\t * @default []\n\t */\n\t\"aiDisplay\": [],\n\n\t/**\n\t * Array of indexes for display - no filtering\n\t * @type array\n\t * @default []\n\t */\n\t\"aiDisplayMaster\": [],\n\n\t/**\n\t * Map of row ids to data indexes\n\t * @type object\n\t * @default {}\n\t */\n\t\"aIds\": {},\n\n\t/**\n\t * Store information about each column that is in use\n\t * @type array\n\t * @default []\n\t */\n\t\"aoColumns\": [],\n\n\t/**\n\t * Store information about the table's header\n\t * @type array\n\t * @default []\n\t */\n\t\"aoHeader\": [],\n\n\t/**\n\t * Store information about the table's footer\n\t * @type array\n\t * @default []\n\t */\n\t\"aoFooter\": [],\n\n\t/**\n\t * Store the applied global search information in case we want to force a\n\t * research or compare the old search to a new one.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @namespace\n\t * @extends DataTable.models.oSearch\n\t */\n\t\"oPreviousSearch\": {},\n\n\t/**\n\t * Store the applied search for each column - see\n\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t * filtering information for each column.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoPreSearchCols\": [],\n\n\t/**\n\t * Sorting that is applied to the table. Note that the inner arrays are\n\t * used in the following manner:\n\t * <ul>\n\t * <li>Index 0 - column number</li>\n\t * <li>Index 1 - current sorting direction</li>\n\t * </ul>\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type array\n\t * @todo These inner arrays should really be objects\n\t */\n\t\"aaSorting\": null,\n\n\t/**\n\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t * aaSorting).\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type array\n\t * @default []\n\t */\n\t\"aaSortingFixed\": [],\n\n\t/**\n\t * Classes to use for the striping of a table.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type array\n\t * @default []\n\t */\n\t\"asStripeClasses\": null,\n\n\t/**\n\t * If restoring a table - we should restore its striping classes as well\n\t * @type array\n\t * @default []\n\t */\n\t\"asDestroyStripes\": [],\n\n\t/**\n\t * If restoring a table - we should restore its width\n\t * @type int\n\t * @default 0\n\t */\n\t\"sDestroyWidth\": 0,\n\n\t/**\n\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t * @type array\n\t * @default []\n\t */\n\t\"aoRowCallback\": [],\n\n\t/**\n\t * Callback functions for the header on each draw.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoHeaderCallback\": [],\n\n\t/**\n\t * Callback function for the footer on each draw.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoFooterCallback\": [],\n\n\t/**\n\t * Array of callback functions for draw callback functions\n\t * @type array\n\t * @default []\n\t */\n\t\"aoDrawCallback\": [],\n\n\t/**\n\t * Array of callback functions for row created function\n\t * @type array\n\t * @default []\n\t */\n\t\"aoRowCreatedCallback\": [],\n\n\t/**\n\t * Callback functions for just before the table is redrawn. A return of\n\t * false will be used to cancel the draw.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoPreDrawCallback\": [],\n\n\t/**\n\t * Callback functions for when the table has been initialised.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoInitComplete\": [],\n\n\n\t/**\n\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t * saving state.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoStateSaveParams\": [],\n\n\t/**\n\t * Callbacks for modifying the settings that have been stored for state saving\n\t * prior to using the stored values to restore the state.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoStateLoadParams\": [],\n\n\t/**\n\t * Callbacks for operating on the settings object once the saved state has been\n\t * loaded\n\t * @type array\n\t * @default []\n\t */\n\t\"aoStateLoaded\": [],\n\n\t/**\n\t * Cache the table ID for quick access\n\t * @type string\n\t * @default <i>Empty string</i>\n\t */\n\t\"sTableId\": \"\",\n\n\t/**\n\t * The TABLE node for the main table\n\t * @type node\n\t * @default null\n\t */\n\t\"nTable\": null,\n\n\t/**\n\t * Permanent ref to the thead element\n\t * @type node\n\t * @default null\n\t */\n\t\"nTHead\": null,\n\n\t/**\n\t * Permanent ref to the tfoot element - if it exists\n\t * @type node\n\t * @default null\n\t */\n\t\"nTFoot\": null,\n\n\t/**\n\t * Permanent ref to the tbody element\n\t * @type node\n\t * @default null\n\t */\n\t\"nTBody\": null,\n\n\t/**\n\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t * @type node\n\t * @default null\n\t */\n\t\"nTableWrapper\": null,\n\n\t/**\n\t * Indicate if when using server-side processing the loading of data\n\t * should be deferred until the second draw.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type boolean\n\t * @default false\n\t */\n\t\"bDeferLoading\": false,\n\n\t/**\n\t * Indicate if all required information has been read in\n\t * @type boolean\n\t * @default false\n\t */\n\t\"bInitialised\": false,\n\n\t/**\n\t * Information about open rows. Each object in the array has the parameters\n\t * 'nTr' and 'nParent'\n\t * @type array\n\t * @default []\n\t */\n\t\"aoOpenRows\": [],\n\n\t/**\n\t * Dictate the positioning of DataTables' control elements - see\n\t * {@link DataTable.model.oInit.sDom}.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type string\n\t * @default null\n\t */\n\t\"sDom\": null,\n\n\t/**\n\t * Search delay (in mS)\n\t * @type integer\n\t * @default null\n\t */\n\t\"searchDelay\": null,\n\n\t/**\n\t * Which type of pagination should be used.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type string\n\t * @default two_button\n\t */\n\t\"sPaginationType\": \"two_button\",\n\n\t/**\n\t * The state duration (for `stateSave`) in seconds.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type int\n\t * @default 0\n\t */\n\t\"iStateDuration\": 0,\n\n\t/**\n\t * Array of callback functions for state saving. Each array element is an\n\t * object with the following parameters:\n\t * <ul>\n\t * <li>function:fn - function to call. Takes two parameters, oSettings\n\t * and the JSON string to save that has been thus far created. Returns\n\t * a JSON string to be inserted into a json object\n\t * (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t * <li>string:sName - name of callback</li>\n\t * </ul>\n\t * @type array\n\t * @default []\n\t */\n\t\"aoStateSave\": [],\n\n\t/**\n\t * Array of callback functions for state loading. Each array element is an\n\t * object with the following parameters:\n\t * <ul>\n\t * <li>function:fn - function to call. Takes two parameters, oSettings\n\t * and the object stored. May return false to cancel state loading</li>\n\t * <li>string:sName - name of callback</li>\n\t * </ul>\n\t * @type array\n\t * @default []\n\t */\n\t\"aoStateLoad\": [],\n\n\t/**\n\t * State that was saved. Useful for back reference\n\t * @type object\n\t * @default null\n\t */\n\t\"oSavedState\": null,\n\n\t/**\n\t * State that was loaded. Useful for back reference\n\t * @type object\n\t * @default null\n\t */\n\t\"oLoadedState\": null,\n\n\t/**\n\t * Source url for AJAX data for the table.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type string\n\t * @default null\n\t */\n\t\"sAjaxSource\": null,\n\n\t/**\n\t * Property from a given object from which to read the table data from. This\n\t * can be an empty string (when not server-side processing), in which case\n\t * it is assumed an an array is given directly.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type string\n\t */\n\t\"sAjaxDataProp\": null,\n\n\t/**\n\t * The last jQuery XHR object that was used for server-side data gathering.\n\t * This can be used for working with the XHR information in one of the\n\t * callbacks\n\t * @type object\n\t * @default null\n\t */\n\t\"jqXHR\": null,\n\n\t/**\n\t * JSON returned from the server in the last Ajax request\n\t * @type object\n\t * @default undefined\n\t */\n\t\"json\": undefined,\n\n\t/**\n\t * Data submitted as part of the last Ajax request\n\t * @type object\n\t * @default undefined\n\t */\n\t\"oAjaxData\": undefined,\n\n\t/**\n\t * Function to get the server-side data.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type function\n\t */\n\t\"fnServerData\": null,\n\n\t/**\n\t * Functions which are called prior to sending an Ajax request so extra\n\t * parameters can easily be sent to the server\n\t * @type array\n\t * @default []\n\t */\n\t\"aoServerParams\": [],\n\n\t/**\n\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t * required).\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type string\n\t */\n\t\"sServerMethod\": null,\n\n\t/**\n\t * Format numbers for display.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type function\n\t */\n\t\"fnFormatNumber\": null,\n\n\t/**\n\t * List of options that can be used for the user selectable length menu.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type array\n\t * @default []\n\t */\n\t\"aLengthMenu\": null,\n\n\t/**\n\t * Counter for the draws that the table does. Also used as a tracker for\n\t * server-side processing\n\t * @type int\n\t * @default 0\n\t */\n\t\"iDraw\": 0,\n\n\t/**\n\t * Indicate if a redraw is being done - useful for Ajax\n\t * @type boolean\n\t * @default false\n\t */\n\t\"bDrawing\": false,\n\n\t/**\n\t * Draw index (iDraw) of the last error when parsing the returned data\n\t * @type int\n\t * @default -1\n\t */\n\t\"iDrawError\": -1,\n\n\t/**\n\t * Paging display length\n\t * @type int\n\t * @default 10\n\t */\n\t\"_iDisplayLength\": 10,\n\n\t/**\n\t * Paging start point - aiDisplay index\n\t * @type int\n\t * @default 0\n\t */\n\t\"_iDisplayStart\": 0,\n\n\t/**\n\t * Server-side processing - number of records in the result set\n\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t * this property to get the value of the number of records, regardless of\n\t * the server-side processing setting.\n\t * @type int\n\t * @default 0\n\t * @private\n\t */\n\t\"_iRecordsTotal\": 0,\n\n\t/**\n\t * Server-side processing - number of records in the current display set\n\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t * this property to get the value of the number of records, regardless of\n\t * the server-side processing setting.\n\t * @type boolean\n\t * @default 0\n\t * @private\n\t */\n\t\"_iRecordsDisplay\": 0,\n\n\t/**\n\t * The classes to use for the table\n\t * @type object\n\t * @default {}\n\t */\n\t\"oClasses\": {},\n\n\t/**\n\t * Flag attached to the settings object so you can check in the draw\n\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t * events.\n\t * @type boolean\n\t * @default false\n\t * @deprecated\n\t */\n\t\"bFiltered\": false,\n\n\t/**\n\t * Flag attached to the settings object so you can check in the draw\n\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t * events.\n\t * @type boolean\n\t * @default false\n\t * @deprecated\n\t */\n\t\"bSorted\": false,\n\n\t/**\n\t * Indicate that if multiple rows are in the header and there is more than\n\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t * should be used for sorting / title by DataTables.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t * @type boolean\n\t */\n\t\"bSortCellsTop\": null,\n\n\t/**\n\t * Initialisation object that is used for the table\n\t * @type object\n\t * @default null\n\t */\n\t\"oInit\": null,\n\n\t/**\n\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t * destroy so they can clean up markup and events.\n\t * @type array\n\t * @default []\n\t */\n\t\"aoDestroyCallback\": [],\n\n\n\t/**\n\t * Get the number of records in the current record set, before filtering\n\t * @type function\n\t */\n\t\"fnRecordsTotal\": function ()\n\t{\n\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\tthis._iRecordsTotal * 1 :\n\t\t\tthis.aiDisplayMaster.length;\n\t},\n\n\t/**\n\t * Get the number of records in the current record set, after filtering\n\t * @type function\n\t */\n\t\"fnRecordsDisplay\": function ()\n\t{\n\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\tthis.aiDisplay.length;\n\t},\n\n\t/**\n\t * Get the display end point - aiDisplay index\n\t * @type function\n\t */\n\t\"fnDisplayEnd\": function ()\n\t{\n\t\tvar\n\t\t\tlen = this._iDisplayLength,\n\t\t\tstart = this._iDisplayStart,\n\t\t\tcalc = start + len,\n\t\t\trecords = this.aiDisplay.length,\n\t\t\tfeatures = this.oFeatures,\n\t\t\tpaginate = features.bPaginate;\n\n\t\tif ( features.bServerSide ) {\n\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\tstart + records :\n\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t}\n\t\telse {\n\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\trecords :\n\t\t\t\tcalc;\n\t\t}\n\t},\n\n\t/**\n\t * The DataTables object for this table\n\t * @type object\n\t * @default null\n\t */\n\t\"oInstance\": null,\n\n\t/**\n\t * Unique identifier for each instance of the DataTables object. If there\n\t * is an ID on the table node, then it takes that value, otherwise an\n\t * incrementing internal counter is used.\n\t * @type string\n\t * @default null\n\t */\n\t\"sInstance\": null,\n\n\t/**\n\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t * keyboard navigation of the table and its controls.\n\t */\n\t\"iTabIndex\": 0,\n\n\t/**\n\t * DIV container for the footer scrolling table if scrolling\n\t */\n\t\"nScrollHead\": null,\n\n\t/**\n\t * DIV container for the footer scrolling table if scrolling\n\t */\n\t\"nScrollFoot\": null,\n\n\t/**\n\t * Last applied sort\n\t * @type array\n\t * @default []\n\t */\n\t\"aLastSort\": [],\n\n\t/**\n\t * Stored plug-in instances\n\t * @type object\n\t * @default {}\n\t */\n\t\"oPlugins\": {},\n\n\t/**\n\t * Function used to get a row's id from the row's data\n\t * @type function\n\t * @default null\n\t */\n\t\"rowIdFn\": null,\n\n\t/**\n\t * Data location where to store a row's id\n\t * @type string\n\t * @default null\n\t */\n\t\"rowId\": null\n};\n\n/**\n * Extension object for DataTables that is used to provide all extension\n * options.\n *\n * Note that the `DataTable.ext` object is available through\n * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n * @namespace\n * @extends DataTable.models.ext\n */\n\n\n/**\n * DataTables extensions\n * \n * This namespace acts as a collection area for plug-ins that can be used to\n * extend DataTables capabilities. Indeed many of the build in methods\n * use this method to provide their own capabilities (sorting methods for\n * example).\n *\n * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n * reasons\n *\n * @namespace\n */\nDataTable.ext = _ext = {\n\t/**\n\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t * defined here so other extensions can define buttons regardless of load\n\t * order. It is _not_ used by DataTables core.\n\t *\n\t * @type object\n\t * @default {}\n\t */\n\tbuttons: {},\n\n\n\t/**\n\t * Element class names\n\t *\n\t * @type object\n\t * @default {}\n\t */\n\tclasses: {},\n\n\n\t/**\n\t * DataTables build type (expanded by the download builder)\n\t *\n\t * @type string\n\t */\n\tbuilder: \"-source-\",\n\n\n\t/**\n\t * Error reporting.\n\t * \n\t * How should DataTables report an error. Can take the value 'alert',\n\t * 'throw', 'none' or a function.\n\t *\n\t * @type string|function\n\t * @default alert\n\t */\n\terrMode: \"alert\",\n\n\n\t/**\n\t * Feature plug-ins.\n\t * \n\t * This is an array of objects which describe the feature plug-ins that are\n\t * available to DataTables. These feature plug-ins are then available for\n\t * use through the `dom` initialisation option.\n\t * \n\t * Each feature plug-in is described by an object which must have the\n\t * following properties:\n\t * \n\t * * `fnInit` - function that is used to initialise the plug-in,\n\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t * instillation option. This is case sensitive.\n\t *\n\t * The `fnInit` function has the following input parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t * {@link DataTable.models.oSettings}\n\t *\n\t * And the following return is expected:\n\t * \n\t * * {node|null} The element which contains your feature. Note that the\n\t * return may also be void if your plug-in does not require to inject any\n\t * DOM elements into DataTables control (`dom`) - for example this might\n\t * be useful when developing a plug-in which allows table control via\n\t * keyboard entry\n\t *\n\t * @type array\n\t *\n\t * @example\n\t * $.fn.dataTable.ext.features.push( {\n\t * \"fnInit\": function( oSettings ) {\n\t * return new TableTools( { \"oDTSettings\": oSettings } );\n\t * },\n\t * \"cFeature\": \"T\"\n\t * } );\n\t */\n\tfeature: [],\n\n\n\t/**\n\t * Row searching.\n\t * \n\t * This method of searching is complimentary to the default type based\n\t * searching, and a lot more comprehensive as it allows you complete control\n\t * over the searching logic. Each element in this array is a function\n\t * (parameters described below) that is called for every row in the table,\n\t * and your logic decides if it should be included in the searching data set\n\t * or not.\n\t *\n\t * Searching functions have the following input parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t * {@link DataTable.models.oSettings}\n\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t * original format that was passed in as the data source, or an array\n\t * from a DOM data source\n\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t * can be useful to retrieve the `TR` element if you need DOM interaction.\n\t *\n\t * And the following return is expected:\n\t *\n\t * * {boolean} Include the row in the searched result set (true) or not\n\t * (false)\n\t *\n\t * Note that as with the main search ability in DataTables, technically this\n\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t * naming we call it searching here.\n\t *\n\t * @type array\n\t * @default []\n\t *\n\t * @example\n\t * // The following example shows custom search being applied to the\n\t * // fourth column (i.e. the data[3] index) based on two input values\n\t * // from the end-user, matching the data in a certain range.\n\t * $.fn.dataTable.ext.search.push(\n\t * function( settings, data, dataIndex ) {\n\t * var min = document.getElementById('min').value * 1;\n\t * var max = document.getElementById('max').value * 1;\n\t * var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t *\n\t * if ( min == \"\" && max == \"\" ) {\n\t * return true;\n\t * }\n\t * else if ( min == \"\" && version < max ) {\n\t * return true;\n\t * }\n\t * else if ( min < version && \"\" == max ) {\n\t * return true;\n\t * }\n\t * else if ( min < version && version < max ) {\n\t * return true;\n\t * }\n\t * return false;\n\t * }\n\t * );\n\t */\n\tsearch: [],\n\n\n\t/**\n\t * Selector extensions\n\t *\n\t * The `selector` option can be used to extend the options available for the\n\t * selector modifier options (`selector-modifier` object data type) that\n\t * each of the three built in selector types offer (row, column and cell +\n\t * their plural counterparts). For example the Select extension uses this\n\t * mechanism to provide an option to select only rows, columns and cells\n\t * that have been marked as selected by the end user (`{selected: true}`),\n\t * which can be used in conjunction with the existing built in selector\n\t * options.\n\t *\n\t * Each property is an array to which functions can be pushed. The functions\n\t * take three attributes:\n\t *\n\t * * Settings object for the host table\n\t * * Options object (`selector-modifier` object type)\n\t * * Array of selected item indexes\n\t *\n\t * The return is an array of the resulting item indexes after the custom\n\t * selector has been applied.\n\t *\n\t * @type object\n\t */\n\tselector: {\n\t\tcell: [],\n\t\tcolumn: [],\n\t\trow: []\n\t},\n\n\n\t/**\n\t * Internal functions, exposed for used in plug-ins.\n\t * \n\t * Please note that you should not need to use the internal methods for\n\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t * The internal function may change between releases.\n\t *\n\t * @type object\n\t * @default {}\n\t */\n\tinternal: {},\n\n\n\t/**\n\t * Legacy configuration options. Enable and disable legacy options that\n\t * are available in DataTables.\n\t *\n\t * @type object\n\t */\n\tlegacy: {\n\t\t/**\n\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t * requests\n\t\t *\n\t\t * @type boolean\n\t\t * @default null\n\t\t */\n\t\tajax: null\n\t},\n\n\n\t/**\n\t * Pagination plug-in methods.\n\t * \n\t * Each entry in this object is a function and defines which buttons should\n\t * be shown by the pagination rendering method that is used for the table:\n\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t * buttons are displayed in the document, while the functions here tell it\n\t * what buttons to display. This is done by returning an array of button\n\t * descriptions (what each button will do).\n\t *\n\t * Pagination types (the four built in options and any additional plug-in\n\t * options defined here) can be used through the `paginationType`\n\t * initialisation parameter.\n\t *\n\t * The functions defined take two parameters:\n\t *\n\t * 1. `{int} page` The current page index\n\t * 2. `{int} pages` The number of pages in the table\n\t *\n\t * Each function is expected to return an array where each element of the\n\t * array can be one of:\n\t *\n\t * * `first` - Jump to first page when activated\n\t * * `last` - Jump to last page when activated\n\t * * `previous` - Show previous page when activated\n\t * * `next` - Show next page when activated\n\t * * `{int}` - Show page of the index given\n\t * * `{array}` - A nested array containing the above elements to add a\n\t * containing 'DIV' element (might be useful for styling).\n\t *\n\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t * an object with two functions would be defined for each plug-in. That\n\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t * compatibility, but this option of use is now decremented and no longer\n\t * documented in DataTables 1.10+.\n\t *\n\t * @type object\n\t * @default {}\n\t *\n\t * @example\n\t * // Show previous, next and current page buttons only\n\t * $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t * return [ 'previous', page, 'next' ];\n\t * };\n\t */\n\tpager: {},\n\n\n\trenderer: {\n\t\tpageButton: {},\n\t\theader: {}\n\t},\n\n\n\t/**\n\t * Ordering plug-ins - custom data source\n\t * \n\t * The extension options for ordering of data available here is complimentary\n\t * to the default type based ordering that DataTables typically uses. It\n\t * allows much greater control over the the data that is being used to\n\t * order a column, but is necessarily therefore more complex.\n\t * \n\t * This type of ordering is useful if you want to do ordering based on data\n\t * live from the DOM (for example the contents of an 'input' element) rather\n\t * than just the static string that DataTables knows of.\n\t * \n\t * The way these plug-ins work is that you create an array of the values you\n\t * wish to be ordering for the column in question and then return that\n\t * array. The data in the array much be in the index order of the rows in\n\t * the table (not the currently ordering order!). Which order data gathering\n\t * function is run here depends on the `dt-init columns.orderDataType`\n\t * parameter that is used for the column (if any).\n\t *\n\t * The functions defined take two parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t * {@link DataTable.models.oSettings}\n\t * 2. `{int}` Target column index\n\t *\n\t * Each function is expected to return an array:\n\t *\n\t * * `{array}` Data for the column to be ordering upon\n\t *\n\t * @type array\n\t *\n\t * @example\n\t * // Ordering using `input` node values\n\t * $.fn.dataTable.ext.order['dom-text'] = function ( settings, col )\n\t * {\n\t * return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t * return $('input', td).val();\n\t * } );\n\t * }\n\t */\n\torder: {},\n\n\n\t/**\n\t * Type based plug-ins.\n\t *\n\t * Each column in DataTables has a type assigned to it, either by automatic\n\t * detection or by direct assignment using the `type` option for the column.\n\t * The type of a column will effect how it is ordering and search (plug-ins\n\t * can also make use of the column type if required).\n\t *\n\t * @namespace\n\t */\n\ttype: {\n\t\t/**\n\t\t * Type detection functions.\n\t\t *\n\t\t * The functions defined in this object are used to automatically detect\n\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t * when complex data is in the table.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t * 1. `{*}` Data from the column cell to be analysed\n\t * 2. `{settings}` DataTables settings object. This can be used to\n\t * perform context specific type detection - for example detection\n\t * based on language settings such as using a comma for a decimal\n\t * place. Generally speaking the options from the settings will not\n\t * be required\n\t\t *\n\t\t * Each function is expected to return:\n\t\t *\n\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t * pass it on to the other type detection functions.\n\t\t *\n\t\t * @type array\n\t\t *\n\t\t * @example\n\t\t * // Currency type detection plug-in:\n\t\t * $.fn.dataTable.ext.type.detect.push(\n\t\t * function ( data, settings ) {\n\t\t * // Check the numeric part\n\t\t * if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t * return null;\n\t\t * }\n\t\t *\n\t\t * // Check prefixed by currency\n\t\t * if ( data.charAt(0) == '$' || data.charAt(0) == '£' ) {\n\t\t * return 'currency';\n\t\t * }\n\t\t * return null;\n\t\t * }\n\t\t * );\n\t\t */\n\t\tdetect: [],\n\n\n\t\t/**\n\t\t * Type based search formatting.\n\t\t *\n\t\t * The type based searching functions can be used to pre-format the\n\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t *\n\t\t * Note that is a search is not defined for a column of a given type,\n\t\t * no search formatting will be performed.\n\t\t * \n\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t * or a type detection plug-in), you will typically be using this for\n\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t * the format that should be searched upon. This is done by adding\n\t\t * functions this object with a parameter name which matches the sType\n\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t * for searching data.\n\t\t *\n\t\t * The functions defined take a single parameter:\n\t\t *\n\t * 1. `{*}` Data from the column cell to be prepared for searching\n\t\t *\n\t\t * Each function is expected to return:\n\t\t *\n\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t *\n\t\t * @type object\n\t\t * @default {}\n\t\t *\n\t\t * @example\n\t\t * $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t * return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t * }\n\t\t */\n\t\tsearch: {},\n\n\n\t\t/**\n\t\t * Type based ordering.\n\t\t *\n\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t * is defined by the functions available in this object.\n\t\t *\n\t\t * Each ordering option can be described by three properties added to\n\t\t * this object:\n\t\t *\n\t\t * * `{type}-pre` - Pre-formatting function\n\t\t * * `{type}-asc` - Ascending order function\n\t\t * * `{type}-desc` - Descending order function\n\t\t *\n\t\t * All three can be used together, only `{type}-pre` or only\n\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t * implementation in terms of speed, although the others are provided\n\t\t * for compatibility with existing Javascript sort functions.\n\t\t *\n\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t *\n\t * 1. `{*}` Data from the column cell to be prepared for ordering\n\t\t *\n\t\t * And return:\n\t\t *\n\t\t * * `{*}` Data to be sorted upon\n\t\t *\n\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t * functions, taking two parameters:\n\t\t *\n\t * 1. `{*}` Data to compare to the second parameter\n\t * 2. `{*}` Data to compare to the first parameter\n\t\t *\n\t\t * And returning:\n\t\t *\n\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t * than the second parameter, ===0 if the two parameters are equal and\n\t\t * >0 if the first parameter should be sorted height than the second\n\t\t * parameter.\n\t\t * \n\t\t * @type object\n\t\t * @default {}\n\t\t *\n\t\t * @example\n\t\t * // Numeric ordering of formatted numbers with a pre-formatter\n\t\t * $.extend( $.fn.dataTable.ext.type.order, {\n\t\t * \"string-pre\": function(x) {\n\t\t * a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t * return parseFloat( a );\n\t\t * }\n\t\t * } );\n\t\t *\n\t\t * @example\n\t\t * // Case-sensitive string ordering, with no pre-formatting method\n\t\t * $.extend( $.fn.dataTable.ext.order, {\n\t\t * \"string-case-asc\": function(x,y) {\n\t\t * return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t * },\n\t\t * \"string-case-desc\": function(x,y) {\n\t\t * return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t * }\n\t\t * } );\n\t\t */\n\t\torder: {}\n\t},\n\n\t/**\n\t * Unique DataTables instance counter\n\t *\n\t * @type int\n\t * @private\n\t */\n\t_unique: 0,\n\n\n\t//\n\t// Depreciated\n\t// The following properties are retained for backwards compatibility only.\n\t// The should not be used in new projects and will be removed in a future\n\t// version\n\t//\n\n\t/**\n\t * Version check function.\n\t * @type function\n\t * @depreciated Since 1.10\n\t */\n\tfnVersionCheck: DataTable.fnVersionCheck,\n\n\n\t/**\n\t * Index for what 'this' index API functions should use\n\t * @type int\n\t * @deprecated Since v1.10\n\t */\n\tiApiIndex: 0,\n\n\n\t/**\n\t * jQuery UI class container\n\t * @type object\n\t * @deprecated Since v1.10\n\t */\n\toJUIClasses: {},\n\n\n\t/**\n\t * Software version\n\t * @type string\n\t * @deprecated Since v1.10\n\t */\n\tsVersion: DataTable.version\n};\n\n\n//\n// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n//\n$.extend( _ext, {\n\tafnFiltering: _ext.search,\n\taTypes: _ext.type.detect,\n\tofnSearch: _ext.type.search,\n\toSort: _ext.type.order,\n\tafnSortData: _ext.order,\n\taoFeatures: _ext.feature,\n\toApi: _ext.internal,\n\toStdClasses: _ext.classes,\n\toPagination: _ext.pager\n} );\n\n\n$.extend( DataTable.ext.classes, {\n\t\"sTable\": \"dataTable\",\n\t\"sNoFooter\": \"no-footer\",\n\n\t/* Paging buttons */\n\t\"sPageButton\": \"paginate_button\",\n\t\"sPageButtonActive\": \"current\",\n\t\"sPageButtonDisabled\": \"disabled\",\n\n\t/* Striping classes */\n\t\"sStripeOdd\": \"odd\",\n\t\"sStripeEven\": \"even\",\n\n\t/* Empty row */\n\t\"sRowEmpty\": \"dataTables_empty\",\n\n\t/* Features */\n\t\"sWrapper\": \"dataTables_wrapper\",\n\t\"sFilter\": \"dataTables_filter\",\n\t\"sInfo\": \"dataTables_info\",\n\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\"sLength\": \"dataTables_length\",\n\t\"sProcessing\": \"dataTables_processing\",\n\n\t/* Sorting */\n\t\"sSortAsc\": \"sorting_asc\",\n\t\"sSortDesc\": \"sorting_desc\",\n\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\"sSortableAsc\": \"sorting_desc_disabled\",\n\t\"sSortableDesc\": \"sorting_asc_disabled\",\n\t\"sSortableNone\": \"sorting_disabled\",\n\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\n\t/* Filtering */\n\t\"sFilterInput\": \"\",\n\n\t/* Page length */\n\t\"sLengthSelect\": \"\",\n\n\t/* Scrolling */\n\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\n\t/* Misc */\n\t\"sHeaderTH\": \"\",\n\t\"sFooterTH\": \"\",\n\n\t// Deprecated\n\t\"sSortJUIAsc\": \"\",\n\t\"sSortJUIDesc\": \"\",\n\t\"sSortJUI\": \"\",\n\t\"sSortJUIAscAllowed\": \"\",\n\t\"sSortJUIDescAllowed\": \"\",\n\t\"sSortJUIWrapper\": \"\",\n\t\"sSortIcon\": \"\",\n\t\"sJUIHeader\": \"\",\n\t\"sJUIFooter\": \"\"\n} );\n\n\nvar extPagination = DataTable.ext.pager;\n\nfunction _numbers ( page, pages ) {\n\tvar\n\t\tnumbers = [],\n\t\tbuttons = extPagination.numbers_length,\n\t\thalf = Math.floor( buttons / 2 ),\n\t\ti = 1;\n\n\tif ( pages <= buttons ) {\n\t\tnumbers = _range( 0, pages );\n\t}\n\telse if ( page <= half ) {\n\t\tnumbers = _range( 0, buttons-2 );\n\t\tnumbers.push( 'ellipsis' );\n\t\tnumbers.push( pages-1 );\n\t}\n\telse if ( page >= pages - 1 - half ) {\n\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\tnumbers.splice( 0, 0, 0 );\n\t}\n\telse {\n\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\tnumbers.push( 'ellipsis' );\n\t\tnumbers.push( pages-1 );\n\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\tnumbers.splice( 0, 0, 0 );\n\t}\n\n\tnumbers.DT_el = 'span';\n\treturn numbers;\n}\n\n\n$.extend( extPagination, {\n\tsimple: function ( page, pages ) {\n\t\treturn [ 'previous', 'next' ];\n\t},\n\n\tfull: function ( page, pages ) {\n\t\treturn [ 'first', 'previous', 'next', 'last' ];\n\t},\n\n\tnumbers: function ( page, pages ) {\n\t\treturn [ _numbers(page, pages) ];\n\t},\n\n\tsimple_numbers: function ( page, pages ) {\n\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t},\n\n\tfull_numbers: function ( page, pages ) {\n\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t},\n\t\n\tfirst_last_numbers: function (page, pages) {\n \t\treturn ['first', _numbers(page, pages), 'last'];\n \t},\n\n\t// For testing and plug-ins to use\n\t_numbers: _numbers,\n\n\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\tnumbers_length: 7\n} );\n\n\n$.extend( true, DataTable.ext.renderer, {\n\tpageButton: {\n\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\tvar classes = settings.oClasses;\n\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\tvar aria = settings.oLanguage.oAria.paginate || {};\n\t\t\tvar btnDisplay, btnClass;\n\n\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\tvar i, ien, node, button;\n\t\t\t\tvar disabledClass = classes.sPageButtonDisabled;\n\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t};\n\n\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\tbutton = buttons[i];\n\n\t\t\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar disabled = false;\n\n\t\t\t\t\t\tbtnDisplay = null;\n\t\t\t\t\t\tbtnClass = button;\n\n\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">…</span>');\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\n\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\n\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\n\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\n\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbtnDisplay = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( btnDisplay !== null ) {\n\t\t\t\t\t\t\tvar tag = settings.oInit.pagingTag || 'a';\n\n\t\t\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnode = $('<'+tag+'>', {\n\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t\t'aria-current': btnClass === classes.sPageButtonActive ? 'page' : null,\n\t\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\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\n\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t// accessibility, but neither are frames.\n\t\t\tvar activeEl;\n\n\t\t\ttry {\n\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t// completed\n\t\t\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t\t\t}\n\t\t\tcatch (e) {}\n\n\t\t\tattach( $(host).empty(), buttons );\n\n\t\t\tif ( activeEl !== undefined ) {\n\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n\n// Built in type detection. See model.ext.aTypes for information about\n// what is required from this methods.\n$.extend( DataTable.ext.type.detect, [\n\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t},\n\n\t// Dates (only those recognised by the browser's Date.parse)\n\tfunction ( d, settings )\n\t{\n\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t// plug-in for anything other than ISO8601 style strings\n\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\treturn null;\n\t\t}\n\t\tvar parsed = Date.parse(d);\n\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t},\n\n\t// Formatted numbers\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t},\n\n\t// HTML numeric\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t},\n\n\t// HTML numeric, formatted\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t},\n\n\t// HTML (this is strict checking - there must be html)\n\tfunction ( d, settings )\n\t{\n\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t'html' : null;\n\t}\n] );\n\n\n\n// Filter formatting functions. See model.ext.ofnSearch for information about\n// what is required from these methods.\n// \n// Note that additional search methods are added for the html numbers and\n// html formatted numbers by `_addNumericSort()` when we know what the decimal\n// place is\n\n\n$.extend( DataTable.ext.type.search, {\n\thtml: function ( data ) {\n\t\treturn _empty(data) ?\n\t\t\tdata :\n\t\t\ttypeof data === 'string' ?\n\t\t\t\tdata\n\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t'';\n\t},\n\n\tstring: function ( data ) {\n\t\treturn _empty(data) ?\n\t\t\tdata :\n\t\t\ttypeof data === 'string' ?\n\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\tdata;\n\t}\n} );\n\n\n\nvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\tif ( d !== 0 && (!d || d === '-') ) {\n\t\treturn -Infinity;\n\t}\n\t\n\tvar type = typeof d;\n\n\tif (type === 'number' || type === 'bigint') {\n\t\treturn d;\n\t}\n\n\t// If a decimal place other than `.` is used, it needs to be given to the\n\t// function so we can detect it and replace with a `.` which is the only\n\t// decimal place Javascript recognises - it is not locale aware.\n\tif ( decimalPlace ) {\n\t\td = _numToDecimal( d, decimalPlace );\n\t}\n\n\tif ( d.replace ) {\n\t\tif ( re1 ) {\n\t\t\td = d.replace( re1, '' );\n\t\t}\n\n\t\tif ( re2 ) {\n\t\t\td = d.replace( re2, '' );\n\t\t}\n\t}\n\n\treturn d * 1;\n};\n\n\n// Add the numeric 'deformatting' functions for sorting and search. This is done\n// in a function to provide an easy ability for the language options to add\n// additional methods if a non-period decimal place is used.\nfunction _addNumericSort ( decimalPlace ) {\n\t$.each(\n\t\t{\n\t\t\t// Plain numbers\n\t\t\t\"num\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t},\n\n\t\t\t// Formatted numbers\n\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t},\n\n\t\t\t// HTML numeric\n\t\t\t\"html-num\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t},\n\n\t\t\t// HTML numeric, formatted\n\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t}\n\t\t},\n\t\tfunction ( key, fn ) {\n\t\t\t// Add the ordering method\n\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\n\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t}\n\t\t}\n\t);\n}\n\n\n// Default sort methods\n$.extend( _ext.type.order, {\n\t// Dates\n\t\"date-pre\": function ( d ) {\n\t\tvar ts = Date.parse( d );\n\t\treturn isNaN(ts) ? -Infinity : ts;\n\t},\n\n\t// html\n\t\"html-pre\": function ( a ) {\n\t\treturn _empty(a) ?\n\t\t\t'' :\n\t\t\ta.replace ?\n\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\ta+'';\n\t},\n\n\t// string\n\t\"string-pre\": function ( a ) {\n\t\t// This is a little complex, but faster than always calling toString,\n\t\t// https://jsperf.com/tostring-v-check\n\t\treturn _empty(a) ?\n\t\t\t'' :\n\t\t\ttypeof a === 'string' ?\n\t\t\t\ta.toLowerCase() :\n\t\t\t\t! a.toString ?\n\t\t\t\t\t'' :\n\t\t\t\t\ta.toString();\n\t},\n\n\t// string-asc and -desc are retained only for compatibility with the old\n\t// sort methods\n\t\"string-asc\": function ( x, y ) {\n\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t},\n\n\t\"string-desc\": function ( x, y ) {\n\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t}\n} );\n\n\n// Numeric sorting types - order doesn't matter here\n_addNumericSort( '' );\n\n\n$.extend( true, DataTable.ext.renderer, {\n\theader: {\n\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t// No additional mark-up required\n\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t// listening for\n\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\treturn; // table, not a nested one\n\t\t\t\t}\n\n\t\t\t\tvar colIdx = column.idx;\n\n\t\t\t\tcell\n\t\t\t\t\t.removeClass(\n\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t)\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t);\n\t\t\t} );\n\t\t},\n\n\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t$('<div/>')\n\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t.append( cell.contents() )\n\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t)\n\t\t\t\t.appendTo( cell );\n\n\t\t\t// Attach a sort listener to update on sort\n\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar colIdx = column.idx;\n\n\t\t\t\tcell\n\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t);\n\n\t\t\t\tcell\n\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t.removeClass(\n\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t)\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n/*\n * Public helper functions. These aren't used internally by DataTables, or\n * called by any of the options passed into DataTables, but they can be used\n * externally by developers working with DataTables. They are helper functions\n * to make working with DataTables a little bit easier.\n */\n\nvar __htmlEscapeEntities = function ( d ) {\n\tif (Array.isArray(d)) {\n\t\td = d.join(',');\n\t}\n\n\treturn typeof d === 'string' ?\n\t\td\n\t\t\t.replace(/&/g, '&')\n\t\t\t.replace(/</g, '<')\n\t\t\t.replace(/>/g, '>')\n\t\t\t.replace(/\"/g, '"') :\n\t\td;\n};\n\n// Common logic for moment, luxon or a date action\nfunction __mld( dt, momentFn, luxonFn, dateFn, arg1 ) {\n\tif (window.moment) {\n\t\treturn dt[momentFn]( arg1 );\n\t}\n\telse if (window.luxon) {\n\t\treturn dt[luxonFn]( arg1 );\n\t}\n\t\n\treturn dateFn ? dt[dateFn]( arg1 ) : dt;\n}\n\n\nvar __mlWarning = false;\nfunction __mldObj (d, format, locale) {\n\tvar dt;\n\n\tif (window.moment) {\n\t\tdt = window.moment.utc( d, format, locale, true );\n\n\t\tif (! dt.isValid()) {\n\t\t\treturn null;\n\t\t}\n\t}\n\telse if (window.luxon) {\n\t\tdt = format && typeof d === 'string'\n\t\t\t? window.luxon.DateTime.fromFormat( d, format )\n\t\t\t: window.luxon.DateTime.fromISO( d );\n\n\t\tif (! dt.isValid) {\n\t\t\treturn null;\n\t\t}\n\n\t\tdt.setLocale(locale);\n\t}\n\telse if (! format) {\n\t\t// No format given, must be ISO\n\t\tdt = new Date(d);\n\t}\n\telse {\n\t\tif (! __mlWarning) {\n\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t}\n\n\t\t__mlWarning = true;\n\t}\n\n\treturn dt;\n}\n\n// Wrapper for date, datetime and time which all operate the same way with the exception of\n// the output string for auto locale support\nfunction __mlHelper (localeString) {\n\treturn function ( from, to, locale, def ) {\n\t\t// Luxon and Moment support\n\t\t// Argument shifting\n\t\tif ( arguments.length === 0 ) {\n\t\t\tlocale = 'en';\n\t\t\tto = null; // means toLocaleString\n\t\t\tfrom = null; // means iso8601\n\t\t}\n\t\telse if ( arguments.length === 1 ) {\n\t\t\tlocale = 'en';\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t}\n\t\telse if ( arguments.length === 2 ) {\n\t\t\tlocale = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t}\n\n\t\tvar typeName = 'datetime-' + to;\n\n\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t});\n\n\t\t\t// The renderer gives us Moment, Luxon or Date obects for the sorting, all of which have a\n\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\tDataTable.ext.type.order[typeName + '-asc'] = function (a, b) {\n\t\t\t\tvar x = a.valueOf();\n\t\t\t\tvar y = b.valueOf();\n\n\t\t\t\treturn x === y\n\t\t\t\t\t? 0\n\t\t\t\t\t: x < y\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1;\n\t\t\t}\n\n\t\t\tDataTable.ext.type.order[typeName + '-desc'] = function (a, b) {\n\t\t\t\tvar x = a.valueOf();\n\t\t\t\tvar y = b.valueOf();\n\n\t\t\t\treturn x === y\n\t\t\t\t\t? 0\n\t\t\t\t\t: x > y\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1;\n\t\t\t}\n\t\t}\n\t\n\t\treturn function ( d, type ) {\n\t\t\t// Allow for a default value\n\t\t\tif (d === null || d === undefined) {\n\t\t\t\tif (def === '--now') {\n\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t// UTC\n\t\t\t\t\tvar local = new Date();\n\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td = '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (type === 'type') {\n\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\treturn typeName;\n\t\t\t}\n\n\t\t\tif (d === '') {\n\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t? ''\n\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t}\n\n\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\tvar dt = __mldObj(d, from, locale);\n\n\t\t\tif (dt === null) {\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\tif (type === 'sort') {\n\t\t\t\treturn dt;\n\t\t\t}\n\t\t\t\n\t\t\tvar formatted = to === null\n\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString]()\n\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\n\t\t\t// XSS protection\n\t\t\treturn type === 'display' ?\n\t\t\t\t__htmlEscapeEntities( formatted ) :\n\t\t\t\tformatted;\n\t\t};\n\t}\n}\n\n// Based on locale, determine standard number formatting\n// Fallback for legacy browsers is US English\nvar __thousands = ',';\nvar __decimal = '.';\n\nif (window.Intl !== undefined) {\n\ttry {\n\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\n\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\tif (num[i].type === 'group') {\n\t\t\t\t__thousands = num[i].value;\n\t\t\t}\n\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t__decimal = num[i].value;\n\t\t\t}\n\t\t}\n\t}\n\tcatch (e) {\n\t\t// noop\n\t}\n}\n\n// Formatted date time detection - use by declaring the formats you are going to use\nDataTable.datetime = function ( format, locale ) {\n\tvar typeName = 'datetime-detect-' + format;\n\n\tif (! locale) {\n\t\tlocale = 'en';\n\t}\n\n\tif (! DataTable.ext.type.order[typeName]) {\n\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\treturn d === '' || dt ? typeName : false;\n\t\t});\n\n\t\tDataTable.ext.type.order[typeName + '-pre'] = function (d) {\n\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t}\n\t}\n}\n\n/**\n * Helpers for `columns.render`.\n *\n * The options defined here can be used with the `columns.render` initialisation\n * option to provide a display renderer. The following functions are defined:\n *\n * * `number` - Will format numeric data (defined by `columns.data`) for\n * display, retaining the original unformatted data for sorting and filtering.\n * It takes 5 parameters:\n * * `string` - Thousands grouping separator\n * * `string` - Decimal point indicator\n * * `integer` - Number of decimal points to show\n * * `string` (optional) - Prefix.\n * * `string` (optional) - Postfix (/suffix).\n * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n * parameters.\n *\n * @example\n * // Column definition using the number renderer\n * {\n * data: \"salary\",\n * render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n * }\n *\n * @namespace\n */\nDataTable.render = {\n\tdate: __mlHelper('toLocaleDateString'),\n\tdatetime: __mlHelper('toLocaleString'),\n\ttime: __mlHelper('toLocaleTimeString'),\n\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t// Auto locale detection\n\t\tif (thousands === null || thousands === undefined) {\n\t\t\tthousands = __thousands;\n\t\t}\n\n\t\tif (decimal === null || decimal === undefined) {\n\t\t\tdecimal = __decimal;\n\t\t}\n\n\t\treturn {\n\t\t\tdisplay: function ( d ) {\n\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\n\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\n\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\tvar flo = parseFloat( d );\n\n\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t// be a number after all)\n\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\treturn __htmlEscapeEntities( d );\n\t\t\t\t}\n\n\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\td = Math.abs( flo );\n\n\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t'';\n\n\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\tnegative = '';\n\t\t\t\t}\n\n\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t) +\n\t\t\t\t\tfloatPart +\n\t\t\t\t\t(postfix||'');\n\t\t\t}\n\t\t};\n\t},\n\n\ttext: function () {\n\t\treturn {\n\t\t\tdisplay: __htmlEscapeEntities,\n\t\t\tfilter: __htmlEscapeEntities\n\t\t};\n\t}\n};\n\n\n/*\n * This is really a good bit rubbish this method of exposing the internal methods\n * publicly... - To be fixed in 2.0 using methods on the prototype\n */\n\n\n/**\n * Create a wrapper function for exporting an internal functions to an external API.\n * @param {string} fn API function name\n * @returns {function} wrapped function\n * @memberof DataTable#internal\n */\nfunction _fnExternApiFunc (fn)\n{\n\treturn function() {\n\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\tArray.prototype.slice.call(arguments)\n\t\t);\n\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t};\n}\n\n\n/**\n * Reference to internal functions for use by plug-in developers. Note that\n * these methods are references to internal functions and are considered to be\n * private. If you use these methods, be aware that they are liable to change\n * between versions.\n * @namespace\n */\n$.extend( DataTable.ext.internal, {\n\t_fnExternApiFunc: _fnExternApiFunc,\n\t_fnBuildAjax: _fnBuildAjax,\n\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t_fnAjaxParameters: _fnAjaxParameters,\n\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t_fnAddColumn: _fnAddColumn,\n\t_fnColumnOptions: _fnColumnOptions,\n\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t_fnVisbleColumns: _fnVisbleColumns,\n\t_fnGetColumns: _fnGetColumns,\n\t_fnColumnTypes: _fnColumnTypes,\n\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t_fnHungarianMap: _fnHungarianMap,\n\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t_fnLanguageCompat: _fnLanguageCompat,\n\t_fnBrowserDetect: _fnBrowserDetect,\n\t_fnAddData: _fnAddData,\n\t_fnAddTr: _fnAddTr,\n\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t_fnGetCellData: _fnGetCellData,\n\t_fnSetCellData: _fnSetCellData,\n\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t_fnGetDataMaster: _fnGetDataMaster,\n\t_fnClearTable: _fnClearTable,\n\t_fnDeleteIndex: _fnDeleteIndex,\n\t_fnInvalidate: _fnInvalidate,\n\t_fnGetRowElements: _fnGetRowElements,\n\t_fnCreateTr: _fnCreateTr,\n\t_fnBuildHead: _fnBuildHead,\n\t_fnDrawHead: _fnDrawHead,\n\t_fnDraw: _fnDraw,\n\t_fnReDraw: _fnReDraw,\n\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t_fnDetectHeader: _fnDetectHeader,\n\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t_fnFilterComplete: _fnFilterComplete,\n\t_fnFilterCustom: _fnFilterCustom,\n\t_fnFilterColumn: _fnFilterColumn,\n\t_fnFilter: _fnFilter,\n\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t_fnEscapeRegex: _fnEscapeRegex,\n\t_fnFilterData: _fnFilterData,\n\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t_fnUpdateInfo: _fnUpdateInfo,\n\t_fnInfoMacros: _fnInfoMacros,\n\t_fnInitialise: _fnInitialise,\n\t_fnInitComplete: _fnInitComplete,\n\t_fnLengthChange: _fnLengthChange,\n\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t_fnPageChange: _fnPageChange,\n\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t_fnScrollDraw: _fnScrollDraw,\n\t_fnApplyToChildren: _fnApplyToChildren,\n\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t_fnThrottle: _fnThrottle,\n\t_fnConvertToWidth: _fnConvertToWidth,\n\t_fnGetWidestNode: _fnGetWidestNode,\n\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t_fnStringToCss: _fnStringToCss,\n\t_fnSortFlatten: _fnSortFlatten,\n\t_fnSort: _fnSort,\n\t_fnSortAria: _fnSortAria,\n\t_fnSortListener: _fnSortListener,\n\t_fnSortAttachListener: _fnSortAttachListener,\n\t_fnSortingClasses: _fnSortingClasses,\n\t_fnSortData: _fnSortData,\n\t_fnSaveState: _fnSaveState,\n\t_fnLoadState: _fnLoadState,\n\t_fnImplementState: _fnImplementState,\n\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t_fnLog: _fnLog,\n\t_fnMap: _fnMap,\n\t_fnBindAction: _fnBindAction,\n\t_fnCallbackReg: _fnCallbackReg,\n\t_fnCallbackFire: _fnCallbackFire,\n\t_fnLengthOverflow: _fnLengthOverflow,\n\t_fnRenderer: _fnRenderer,\n\t_fnDataSource: _fnDataSource,\n\t_fnRowAttributes: _fnRowAttributes,\n\t_fnExtend: _fnExtend,\n\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t // in 1.10, so this dead-end function is\n\t // added to prevent errors\n} );\n\n\n// jQuery access\n$.fn.dataTable = DataTable;\n\n// Provide access to the host jQuery object (circular reference)\nDataTable.$ = $;\n\n// Legacy aliases\n$.fn.dataTableSettings = DataTable.settings;\n$.fn.dataTableExt = DataTable.ext;\n\n// With a capital `D` we return a DataTables API instance rather than a\n// jQuery object\n$.fn.DataTable = function ( opts ) {\n\treturn $(this).dataTable( opts ).api();\n};\n\n// All properties that are available to $.fn.dataTable should also be\n// available on $.fn.DataTable\n$.each( DataTable, function ( prop, val ) {\n\t$.fn.DataTable[ prop ] = val;\n} );\n\nexport default DataTable;\n"],"names":[],"version":3,"file":"choosing-your-solicitor-or-conveyancer.7902b70d.js.map"}