{"version":3,"file":"common.js","mappings":"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","sources":["webpack:///./js/src/location-map.js","webpack:///./node_modules/fitvids.1.1.0/jquery.fitvids.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/magnific-popup/dist/jquery.magnific-popup.js","webpack:///./node_modules/throttle-debounce/debounce.js","webpack:///./node_modules/throttle-debounce/index.js","webpack:///./node_modules/throttle-debounce/throttle.js","webpack:///webpack/bootstrap","webpack:///./node_modules/ssr-window/ssr-window.esm.js","webpack:///./node_modules/dom7/dom7.esm.js","webpack:///./node_modules/swiper/shared/dom.js","webpack:///./node_modules/swiper/shared/utils.js","webpack:///./node_modules/swiper/shared/get-support.js","webpack:///./node_modules/swiper/shared/get-device.js","webpack:///./node_modules/swiper/shared/get-browser.js","webpack:///./node_modules/swiper/core/events-emitter.js","webpack:///./node_modules/swiper/core/update/index.js","webpack:///./node_modules/swiper/core/update/updateSize.js","webpack:///./node_modules/swiper/core/update/updateSlides.js","webpack:///./node_modules/swiper/core/update/updateAutoHeight.js","webpack:///./node_modules/swiper/core/update/updateSlidesOffset.js","webpack:///./node_modules/swiper/core/update/updateSlidesProgress.js","webpack:///./node_modules/swiper/core/update/updateProgress.js","webpack:///./node_modules/swiper/core/update/updateSlidesClasses.js","webpack:///./node_modules/swiper/core/update/updateActiveIndex.js","webpack:///./node_modules/swiper/core/update/updateClickedSlide.js","webpack:///./node_modules/swiper/core/transition/transitionEmit.js","webpack:///./node_modules/swiper/core/slide/index.js","webpack:///./node_modules/swiper/core/slide/slideTo.js","webpack:///./node_modules/swiper/core/slide/slideToLoop.js","webpack:///./node_modules/swiper/core/slide/slideNext.js","webpack:///./node_modules/swiper/core/slide/slidePrev.js","webpack:///./node_modules/swiper/core/slide/slideReset.js","webpack:///./node_modules/swiper/core/slide/slideToClosest.js","webpack:///./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack:///./node_modules/swiper/core/loop/index.js","webpack:///./node_modules/swiper/core/loop/loopCreate.js","webpack:///./node_modules/swiper/core/loop/loopFix.js","webpack:///./node_modules/swiper/core/loop/loopDestroy.js","webpack:///./node_modules/swiper/core/events/onTouchStart.js","webpack:///./node_modules/swiper/core/events/onTouchMove.js","webpack:///./node_modules/swiper/core/events/onTouchEnd.js","webpack:///./node_modules/swiper/core/events/onResize.js","webpack:///./node_modules/swiper/core/events/onClick.js","webpack:///./node_modules/swiper/core/events/onScroll.js","webpack:///./node_modules/swiper/core/events/index.js","webpack:///./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack:///./node_modules/swiper/core/classes/index.js","webpack:///./node_modules/swiper/core/classes/addClasses.js","webpack:///./node_modules/swiper/core/classes/removeClasses.js","webpack:///./node_modules/swiper/core/defaults.js","webpack:///./node_modules/swiper/core/moduleExtendParams.js","webpack:///./node_modules/swiper/core/core.js","webpack:///./node_modules/swiper/core/translate/index.js","webpack:///./node_modules/swiper/core/translate/getTranslate.js","webpack:///./node_modules/swiper/core/translate/setTranslate.js","webpack:///./node_modules/swiper/core/translate/minTranslate.js","webpack:///./node_modules/swiper/core/translate/maxTranslate.js","webpack:///./node_modules/swiper/core/translate/translateTo.js","webpack:///./node_modules/swiper/core/transition/index.js","webpack:///./node_modules/swiper/core/transition/setTransition.js","webpack:///./node_modules/swiper/core/transition/transitionStart.js","webpack:///./node_modules/swiper/core/transition/transitionEnd.js","webpack:///./node_modules/swiper/core/grab-cursor/index.js","webpack:///./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack:///./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack:///./node_modules/swiper/core/breakpoints/index.js","webpack:///./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack:///./node_modules/swiper/core/check-overflow/index.js","webpack:///./node_modules/swiper/core/images/index.js","webpack:///./node_modules/swiper/core/images/loadImage.js","webpack:///./node_modules/swiper/core/images/preloadImages.js","webpack:///./node_modules/swiper/core/modules/resize/resize.js","webpack:///./node_modules/swiper/core/modules/observer/observer.js","webpack:///./node_modules/swiper/shared/create-element-if-not-defined.js","webpack:///./node_modules/swiper/shared/classes-to-selector.js","webpack:///./node_modules/swiper/shared/effect-target.js","webpack:///./js/src/slideshows.js","webpack:///./node_modules/swiper/modules/navigation/navigation.js","webpack:///./node_modules/swiper/modules/pagination/pagination.js","webpack:///./node_modules/swiper/modules/effect-fade/effect-fade.js","webpack:///./node_modules/swiper/shared/effect-init.js","webpack:///./node_modules/swiper/shared/effect-virtual-transition-end.js","webpack:///./node_modules/swiper/modules/parallax/parallax.js","webpack:///./node_modules/swiper/modules/a11y/a11y.js","webpack:///./js/src/responsive-nav.jquery.js","webpack:///./js/src/jquery.accordion.js","webpack:///./js/src/common.js"],"sourcesContent":["/* globals jQuery, theme_url */\n\nmodule.exports = (function($) {\n\n    var LocationMap = function(mapElement) {\n        this.initialCenter = new google.maps.LatLng(47.160723, -122.148960);\n        this.initialZoom = 12;\n        this.maxZoom = 18;\n        this.mapElement = mapElement;\n        this.map = null;\n        this.locations = [];\n        this.locationMarkers = [];\n        this.locationInfoWindow = new google.maps.InfoWindow();\n        //mapStyles: https://snazzymaps.com/style/38/shades-of-grey\n        // this.mapStyles = [{\"featureType\":\"all\",\"elementType\":\"labels.text.fill\",\"stylers\":[{\"saturation\":36},{\"color\":\"#000000\"},{\"lightness\":40}]},{\"featureType\":\"all\",\"elementType\":\"labels.text.stroke\",\"stylers\":[{\"visibility\":\"on\"},{\"color\":\"#000000\"},{\"lightness\":16}]},{\"featureType\":\"all\",\"elementType\":\"labels.icon\",\"stylers\":[{\"visibility\":\"off\"}]},{\"featureType\":\"administrative\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":20}]},{\"featureType\":\"administrative\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":17},{\"weight\":1.2}]},{\"featureType\":\"landscape\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":20}]},{\"featureType\":\"poi\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":21}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.fill\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":17}]},{\"featureType\":\"road.highway\",\"elementType\":\"geometry.stroke\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":29},{\"weight\":0.2}]},{\"featureType\":\"road.arterial\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":18}]},{\"featureType\":\"road.local\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":16}]},{\"featureType\":\"transit\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":19}]},{\"featureType\":\"water\",\"elementType\":\"geometry\",\"stylers\":[{\"color\":\"#000000\"},{\"lightness\":17}]}];\n        this.mapContainClass = 'location-map';\n        this.infobox = new InfoBox({\n            content: '',\n            disableAutoPan: false,\n            maxWidth: 0,\n            alignBottom: true,\n            pixelOffset: new google.maps.Size(-160, -70),\n            zIndex: 1,\n            pane: \"floatPane\",\n            boxStyle: {\n                width: \"320px\"\n            },\n            closeBoxMargin: \"12px 12px 0 0\",\n            closeBoxURL: theme_url + '/img/x.svg',\n            infoBoxClearance: new google.maps.Size(-10, -10),\n            enableEventPropagation: true\n        });\n\n    };\n\n    /**\n     * Initializes the Google map on the page and add the markers\n     */\n    LocationMap.prototype.initMap = function(controls, popup){\n\n        var self = this;\n        // Map arguments\n        var args = {\n            zoom:              this.initialZoom,\n            maxZoom:           this.maxZoom,\n            center:            this.initialCenter,\n            mapTypeId:         google.maps.MapTypeId.ROADMAP,\n            mapTypeControl:    false,\n            rotateControl:     false,\n            fullscreenControl: false,\n            streetViewControl: false,\n            disableDefaultUI:  controls==false ? true : false,\n            styles:            this.mapStyles\n        };\n\n        var $markers = $('.location-map').find('.acf-map-marker'),\n            bounds = new google.maps.LatLngBounds();\n\n        // Create map and store it for future reference\n        self.map = new google.maps.Map(this.mapElement, args);\n\n        //loop through the markers to set them\n        $markers.each(function(index, element){\n\n            var lat = $(this).data('lat'),\n                lng = $(this).data('lng'),\n                directions = $(this).data('directions');\n\n            // Marker coordinates\n            var latlng = new google.maps.LatLng(lat, lng);\n\n            // create marker\n            var marker = new google.maps.Marker({\n                position: latlng,\n                map: self.map,\n                optimized: false,\n                icon: {\n                    url: theme_url + '/img/map-pin.svg',\n                    size: new google.maps.Size(65, 65),\n                    scaledSize: new google.maps.Size(65, 65),\n                    origin: new google.maps.Point(0, 0)\n                },\n                animation: google.maps.Animation.DROP\n            });\n\n            self.map.setCenter(marker.position);\n\n            if( $(this).html() && popup ){\n\n                // extend maps bounds to include markers\n                bounds.extend(marker.position);\n                self.map.fitBounds(bounds);\n\n                marker.popupContent = $(this).html();\n\n                // show info window when marker is clicked\n                marker.addListener('click', function() {\n                    self.map.setCenter(marker.position);\n                    self.infobox.setContent(marker.popupContent);\n                    self.infobox.open(self.map, marker);\n                });\n\n            }\n\n        }); //endfor each marker\n\n    };//initMap\n\n\n    // Return our LocationMap function so we can use it outside the current scope\n    return LocationMap;\n\n})(jQuery);\n","/*jshint browser:true */\n/*!\n* FitVids 1.1\n*\n* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com\n* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/\n* Released under the WTFPL license - http://sam.zoy.org/wtfpl/\n*\n*/\n\n;(function( $ ){\n\n  'use strict';\n\n  $.fn.fitVids = function( options ) {\n    var settings = {\n      customSelector: null,\n      ignore: null\n    };\n\n    if(!document.getElementById('fit-vids-style')) {\n      // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js\n      var head = document.head || document.getElementsByTagName('head')[0];\n      var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';\n      var div = document.createElement(\"div\");\n      div.innerHTML = '<p>x</p><style id=\"fit-vids-style\">' + css + '</style>';\n      head.appendChild(div.childNodes[1]);\n    }\n\n    if ( options ) {\n      $.extend( settings, options );\n    }\n\n    return this.each(function(){\n      var selectors = [\n        'iframe[src*=\"player.vimeo.com\"]',\n        'iframe[src*=\"youtube.com\"]',\n        'iframe[src*=\"youtube-nocookie.com\"]',\n        'iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]',\n        'object',\n        'embed'\n      ];\n\n      if (settings.customSelector) {\n        selectors.push(settings.customSelector);\n      }\n\n      var ignoreList = '.fitvidsignore';\n\n      if(settings.ignore) {\n        ignoreList = ignoreList + ', ' + settings.ignore;\n      }\n\n      var $allVideos = $(this).find(selectors.join(','));\n      $allVideos = $allVideos.not('object object'); // SwfObj conflict patch\n      $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.\n\n      $allVideos.each(function(){\n        var $this = $(this);\n        if($this.parents(ignoreList).length > 0) {\n          return; // Disable FitVids on this video.\n        }\n        if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }\n        if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))\n        {\n          $this.attr('height', 9);\n          $this.attr('width', 16);\n        }\n        var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),\n            width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),\n            aspectRatio = height / width;\n        if(!$this.attr('name')){\n          var videoName = 'fitvid' + $.fn.fitVids._count;\n          $this.attr('name', videoName);\n          $.fn.fitVids._count++;\n        }\n        $this.wrap('<div class=\"fluid-width-video-wrapper\"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');\n        $this.removeAttr('height').removeAttr('width');\n      });\n    });\n  };\n  \n  // Internal counter for unique video names.\n  $.fn.fitVids._count = 0;\n  \n// Works with either jQuery or Zepto\n})( window.jQuery || window.Zepto );\n","/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\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 #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\n\tversion = \"3.6.0\",\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\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\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}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\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\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\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: http://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]\n\t\t// 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\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": 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\t\"needsContext\": 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\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\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 = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar 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, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\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\tresults.push( 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, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\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\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\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 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\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 ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\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 ) || rcombinators.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\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 = nid.replace( rcssescape, fcssescape );\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( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #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 Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created 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 * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :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\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\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 Sizzle 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// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, 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\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\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 ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\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\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\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\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"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\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\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\tcontains( 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\tcontains( 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( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\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 eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\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 eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\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 Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.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 contains( context, elem );\n};\n\nSizzle.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 (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\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\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\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\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\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\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 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\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = 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 elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ 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\tuniqueCache[ 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\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ 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\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( 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\t\"not\": 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( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #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\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\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\t\"empty\": function( elem ) {\n\n\t\t\t// http://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\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear 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\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( 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 = rcombinators.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( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\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, uniqueCache, 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\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ 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\tuniqueCache[ 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\tSizzle( 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,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\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( 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( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\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 (issue #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// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\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: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\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\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\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\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, 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(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\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 Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( 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\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 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 ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\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// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\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\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\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 (#9521)\n\t// Strict HTML recognition (#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 Sizzle\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.stackTrace );\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 stack, 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.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = 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\njQuery.Deferred.exceptionHook = function( error, stack ) {\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, error.stack, stack );\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 #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 (#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 #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 (#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 (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#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 (#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 (#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 (#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\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\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\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 (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( 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 (#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\", returnTrue );\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, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\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 notAsync, 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\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\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\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\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\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\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 the\n\t\t\t\t// 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.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\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 (#504, #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\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\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, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\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\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\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\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 (#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// Reenable 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\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 Sizzle here for performance reasons: 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 getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #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 (#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 = \"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\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, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\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\trcustomProp = /^--/,\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\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\tif ( box === \"margin\" ) {\n\t\t\tdelta += 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;\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\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\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 (#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 #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 (#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 )` (#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.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\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// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\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 classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\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\telem.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 classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\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\telem.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 type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\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\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\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = 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 (#14686, #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 (#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\n\n\nsupport.focusin = \"onfocusin\" in window;\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 (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#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 (#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\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\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\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// #7653, #8125, #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 (#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 #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 (#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 #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 (#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// #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 (#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// #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 #8605, #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// #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.mouseenter( fnOver ).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\nvar rtrim = /^[\\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, \"\" );\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// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n;(function (factory) { \nif (typeof define === 'function' && define.amd) { \n // AMD. Register as an anonymous module. \n define(['jquery'], factory); \n } else if (typeof exports === 'object') { \n // Node/CommonJS \n factory(require('jquery')); \n } else { \n // Browser globals \n factory(window.jQuery || window.Zepto); \n } \n }(function($) { \n\n/*>>core*/\n/**\n * \n * Magnific Popup Core JS file\n * \n */\n\n\n/**\n * Private static constants\n */\nvar CLOSE_EVENT = 'Close',\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\n\tAFTER_CLOSE_EVENT = 'AfterClose',\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\n\tOPEN_EVENT = 'Open',\n\tCHANGE_EVENT = 'Change',\n\tNS = 'mfp',\n\tEVENT_NS = '.' + NS,\n\tREADY_CLASS = 'mfp-ready',\n\tREMOVING_CLASS = 'mfp-removing',\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\n\n\n/**\n * Private vars \n */\n/*jshint -W079 */\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\n\tMagnificPopup = function(){},\n\t_isJQ = !!(window.jQuery),\n\t_prevStatus,\n\t_window = $(window),\n\t_document,\n\t_prevContentType,\n\t_wrapClasses,\n\t_currPopupType;\n\n\n/**\n * Private functions\n */\nvar _mfpOn = function(name, f) {\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\n\t},\n\t_getEl = function(className, appendTo, html, raw) {\n\t\tvar el = document.createElement('div');\n\t\tel.className = 'mfp-'+className;\n\t\tif(html) {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t\tif(!raw) {\n\t\t\tel = $(el);\n\t\t\tif(appendTo) {\n\t\t\t\tel.appendTo(appendTo);\n\t\t\t}\n\t\t} else if(appendTo) {\n\t\t\tappendTo.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\t_mfpTrigger = function(e, data) {\n\t\tmfp.ev.triggerHandler(NS + e, data);\n\n\t\tif(mfp.st.callbacks) {\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\n\t\t\tif(mfp.st.callbacks[e]) {\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\n\t\t\t}\n\t\t}\n\t},\n\t_getCloseBtn = function(type) {\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\n\t\t\t_currPopupType = type;\n\t\t}\n\t\treturn mfp.currTemplate.closeBtn;\n\t},\n\t// Initialize Magnific Popup only when called at least once\n\t_checkInstance = function() {\n\t\tif(!$.magnificPopup.instance) {\n\t\t\t/*jshint -W020 */\n\t\t\tmfp = new MagnificPopup();\n\t\t\tmfp.init();\n\t\t\t$.magnificPopup.instance = mfp;\n\t\t}\n\t},\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n\tsupportsTransitions = function() {\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\n\n\t\tif( s['transition'] !== undefined ) {\n\t\t\treturn true; \n\t\t}\n\t\t\t\n\t\twhile( v.length ) {\n\t\t\tif( v.pop() + 'Transition' in s ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn false;\n\t};\n\n\n\n/**\n * Public functions\n */\nMagnificPopup.prototype = {\n\n\tconstructor: MagnificPopup,\n\n\t/**\n\t * Initializes Magnific Popup plugin. \n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\n\t */\n\tinit: function() {\n\t\tvar appVersion = navigator.appVersion;\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\n\t\tmfp.supportsTransition = supportsTransitions();\n\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\n\t\t// If you know a better way of detecting this - let me know.\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\n\t\t_document = $(document);\n\n\t\tmfp.popupsCache = {};\n\t},\n\n\t/**\n\t * Opens popup\n\t * @param  data [description]\n\t */\n\topen: function(data) {\n\n\t\tvar i;\n\n\t\tif(data.isObj === false) { \n\t\t\t// convert jQuery collection to array to avoid conflicts later\n\t\t\tmfp.items = data.items.toArray();\n\n\t\t\tmfp.index = 0;\n\t\t\tvar items = data.items,\n\t\t\t\titem;\n\t\t\tfor(i = 0; i < items.length; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tif(item.parsed) {\n\t\t\t\t\titem = item.el[0];\n\t\t\t\t}\n\t\t\t\tif(item === data.el[0]) {\n\t\t\t\t\tmfp.index = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\n\t\t\tmfp.index = data.index || 0;\n\t\t}\n\n\t\t// if popup is already opened - we just update the content\n\t\tif(mfp.isOpen) {\n\t\t\tmfp.updateItemHTML();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmfp.types = []; \n\t\t_wrapClasses = '';\n\t\tif(data.mainEl && data.mainEl.length) {\n\t\t\tmfp.ev = data.mainEl.eq(0);\n\t\t} else {\n\t\t\tmfp.ev = _document;\n\t\t}\n\n\t\tif(data.key) {\n\t\t\tif(!mfp.popupsCache[data.key]) {\n\t\t\t\tmfp.popupsCache[data.key] = {};\n\t\t\t}\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\n\t\t} else {\n\t\t\tmfp.currTemplate = {};\n\t\t}\n\n\n\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\n\n\t\tif(mfp.st.modal) {\n\t\t\tmfp.st.closeOnContentClick = false;\n\t\t\tmfp.st.closeOnBgClick = false;\n\t\t\tmfp.st.showCloseBtn = false;\n\t\t\tmfp.st.enableEscapeKey = false;\n\t\t}\n\t\t\n\n\t\t// Building markup\n\t\t// main containers are created only once\n\t\tif(!mfp.bgOverlay) {\n\n\t\t\t// Dark overlay\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\n\t\t\t\tmfp.close();\n\t\t\t});\n\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\n\t\t}\n\n\t\tmfp.contentContainer = _getEl('content');\n\t\tif(mfp.st.preloader) {\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\n\t\t}\n\n\n\t\t// Initializing modules\n\t\tvar modules = $.magnificPopup.modules;\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar n = modules[i];\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\n\t\t\tmfp['init'+n].call(mfp);\n\t\t}\n\t\t_mfpTrigger('BeforeOpen');\n\n\n\t\tif(mfp.st.showCloseBtn) {\n\t\t\t// Close button\n\t\t\tif(!mfp.st.closeBtnInside) {\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\n\t\t\t} else {\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\n\t\t\t\t});\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\n\t\t\t}\n\t\t}\n\n\t\tif(mfp.st.alignTop) {\n\t\t\t_wrapClasses += ' mfp-align-top';\n\t\t}\n\n\t\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css({\n\t\t\t\toverflow: mfp.st.overflowY,\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\toverflowY: mfp.st.overflowY\n\t\t\t});\n\t\t} else {\n\t\t\tmfp.wrap.css({ \n\t\t\t\ttop: _window.scrollTop(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\n\t\t\tmfp.bgOverlay.css({\n\t\t\t\theight: _document.height(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\n\t\t\n\n\t\tif(mfp.st.enableEscapeKey) {\n\t\t\t// Close on ESC key\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\n\t\t\t\tif(e.keyCode === 27) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_window.on('resize' + EVENT_NS, function() {\n\t\t\tmfp.updateSize();\n\t\t});\n\n\n\t\tif(!mfp.st.closeOnContentClick) {\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\n\t\t}\n\t\t\n\t\tif(_wrapClasses)\n\t\t\tmfp.wrap.addClass(_wrapClasses);\n\n\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\n\t\tvar windowHeight = mfp.wH = _window.height();\n\n\t\t\n\t\tvar windowStyles = {};\n\n\t\tif( mfp.fixedContentPos ) {\n            if(mfp._hasScrollBar(windowHeight)){\n                var s = mfp._getScrollbarSize();\n                if(s) {\n                    windowStyles.marginRight = s;\n                }\n            }\n        }\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tif(!mfp.isIE7) {\n\t\t\t\twindowStyles.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\t// ie7 double-scroll bug\n\t\t\t\t$('body, html').css('overflow', 'hidden');\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t\n\t\tvar classesToadd = mfp.st.mainClass;\n\t\tif(mfp.isIE7) {\n\t\t\tclassesToadd += ' mfp-ie7';\n\t\t}\n\t\tif(classesToadd) {\n\t\t\tmfp._addClassToMFP( classesToadd );\n\t\t}\n\n\t\t// add content\n\t\tmfp.updateItemHTML();\n\n\t\t_mfpTrigger('BuildControls');\n\n\t\t// remove scrollbar, add margin e.t.c\n\t\t$('html').css(windowStyles);\n\t\t\n\t\t// add everything to DOM\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\n\n\t\t// Save last focused element\n\t\tmfp._lastFocusedEl = document.activeElement;\n\t\t\n\t\t// Wait for next cycle to allow CSS transition\n\t\tsetTimeout(function() {\n\t\t\t\n\t\t\tif(mfp.content) {\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\n\t\t\t\tmfp._setFocus();\n\t\t\t} else {\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\n\t\t\t}\n\t\t\t\n\t\t\t// Trap the focus in popup\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\n\n\t\t}, 16);\n\n\t\tmfp.isOpen = true;\n\t\tmfp.updateSize(windowHeight);\n\t\t_mfpTrigger(OPEN_EVENT);\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Closes the popup\n\t */\n\tclose: function() {\n\t\tif(!mfp.isOpen) return;\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\n\n\t\tmfp.isOpen = false;\n\t\t// for CSS3 animation\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\n\t\t\tsetTimeout(function() {\n\t\t\t\tmfp._close();\n\t\t\t}, mfp.st.removalDelay);\n\t\t} else {\n\t\t\tmfp._close();\n\t\t}\n\t},\n\n\t/**\n\t * Helper for close() function\n\t */\n\t_close: function() {\n\t\t_mfpTrigger(CLOSE_EVENT);\n\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\n\n\t\tmfp.bgOverlay.detach();\n\t\tmfp.wrap.detach();\n\t\tmfp.container.empty();\n\n\t\tif(mfp.st.mainClass) {\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\n\t\t}\n\n\t\tmfp._removeClassFromMFP(classesToRemove);\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tvar windowStyles = {marginRight: ''};\n\t\t\tif(mfp.isIE7) {\n\t\t\t\t$('body, html').css('overflow', '');\n\t\t\t} else {\n\t\t\t\twindowStyles.overflow = '';\n\t\t\t}\n\t\t\t$('html').css(windowStyles);\n\t\t}\n\t\t\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\n\t\tmfp.ev.off(EVENT_NS);\n\n\t\t// clean up DOM elements that aren't removed\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\n\t\tmfp.container.attr('class', 'mfp-container');\n\n\t\t// remove close button from target element\n\t\tif(mfp.st.showCloseBtn &&\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\n\t\t\tif(mfp.currTemplate.closeBtn)\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\n\t\t}\n\n\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\n\t\t}\n\t\tmfp.currItem = null;\t\n\t\tmfp.content = null;\n\t\tmfp.currTemplate = null;\n\t\tmfp.prevHeight = 0;\n\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\n\t},\n\t\n\tupdateSize: function(winHeight) {\n\n\t\tif(mfp.isIOS) {\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\n\t\t\tvar height = window.innerHeight * zoomLevel;\n\t\t\tmfp.wrap.css('height', height);\n\t\t\tmfp.wH = height;\n\t\t} else {\n\t\t\tmfp.wH = winHeight || _window.height();\n\t\t}\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\n\t\tif(!mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css('height', mfp.wH);\n\t\t}\n\n\t\t_mfpTrigger('Resize');\n\n\t},\n\n\t/**\n\t * Set content of popup based on current index\n\t */\n\tupdateItemHTML: function() {\n\t\tvar item = mfp.items[mfp.index];\n\n\t\t// Detach and perform modifications\n\t\tmfp.contentContainer.detach();\n\n\t\tif(mfp.content)\n\t\t\tmfp.content.detach();\n\n\t\tif(!item.parsed) {\n\t\t\titem = mfp.parseEl( mfp.index );\n\t\t}\n\n\t\tvar type = item.type;\n\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\n\t\t// BeforeChange event works like so:\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\n\n\t\tmfp.currItem = item;\n\n\t\tif(!mfp.currTemplate[type]) {\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\n\n\t\t\t// allows to modify markup\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\n\n\t\t\tif(markup) {\n\t\t\t\tmfp.currTemplate[type] = $(markup);\n\t\t\t} else {\n\t\t\t\t// if there is no markup found we just define that template is parsed\n\t\t\t\tmfp.currTemplate[type] = true;\n\t\t\t}\n\t\t}\n\n\t\tif(_prevContentType && _prevContentType !== item.type) {\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\n\t\t}\n\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\n\t\tmfp.appendContent(newContent, type);\n\n\t\titem.preloaded = true;\n\n\t\t_mfpTrigger(CHANGE_EVENT, item);\n\t\t_prevContentType = item.type;\n\n\t\t// Append container back after its content changed\n\t\tmfp.container.prepend(mfp.contentContainer);\n\n\t\t_mfpTrigger('AfterChange');\n\t},\n\n\n\t/**\n\t * Set HTML content of popup\n\t */\n\tappendContent: function(newContent, type) {\n\t\tmfp.content = newContent;\n\n\t\tif(newContent) {\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\n\t\t\t\tmfp.currTemplate[type] === true) {\n\t\t\t\t// if there is no markup, we just append close button element inside\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmfp.content = newContent;\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.content = '';\n\t\t}\n\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\n\n\t\tmfp.contentContainer.append(mfp.content);\n\t},\n\n\n\t/**\n\t * Creates Magnific Popup data object based on given data\n\t * @param  {int} index Index of item to parse\n\t */\n\tparseEl: function(index) {\n\t\tvar item = mfp.items[index],\n\t\t\ttype;\n\n\t\tif(item.tagName) {\n\t\t\titem = { el: $(item) };\n\t\t} else {\n\t\t\ttype = item.type;\n\t\t\titem = { data: item, src: item.src };\n\t\t}\n\n\t\tif(item.el) {\n\t\t\tvar types = mfp.types;\n\n\t\t\t// check for 'mfp-TYPE' class\n\t\t\tfor(var i = 0; i < types.length; i++) {\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\n\t\t\t\t\ttype = types[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.src = item.el.attr('data-mfp-src');\n\t\t\tif(!item.src) {\n\t\t\t\titem.src = item.el.attr('href');\n\t\t\t}\n\t\t}\n\n\t\titem.type = type || mfp.st.type || 'inline';\n\t\titem.index = index;\n\t\titem.parsed = true;\n\t\tmfp.items[index] = item;\n\t\t_mfpTrigger('ElementParse', item);\n\n\t\treturn mfp.items[index];\n\t},\n\n\n\t/**\n\t * Initializes single popup or a group of popups\n\t */\n\taddGroup: function(el, options) {\n\t\tvar eHandler = function(e) {\n\t\t\te.mfpEl = this;\n\t\t\tmfp._openClick(e, el, options);\n\t\t};\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tvar eName = 'click.magnificPopup';\n\t\toptions.mainEl = el;\n\n\t\tif(options.items) {\n\t\t\toptions.isObj = true;\n\t\t\tel.off(eName).on(eName, eHandler);\n\t\t} else {\n\t\t\toptions.isObj = false;\n\t\t\tif(options.delegate) {\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\n\t\t\t} else {\n\t\t\t\toptions.items = el;\n\t\t\t\tel.off(eName).on(eName, eHandler);\n\t\t\t}\n\t\t}\n\t},\n\t_openClick: function(e, el, options) {\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\n\n\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\n\n\t\tif(disableOn) {\n\t\t\tif($.isFunction(disableOn)) {\n\t\t\t\tif( !disableOn.call(mfp) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else { // else it's number\n\t\t\t\tif( _window.width() < disableOn ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(e.type) {\n\t\t\te.preventDefault();\n\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\n\t\t\tif(mfp.isOpen) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\toptions.el = $(e.mfpEl);\n\t\tif(options.delegate) {\n\t\t\toptions.items = el.find(options.delegate);\n\t\t}\n\t\tmfp.open(options);\n\t},\n\n\n\t/**\n\t * Updates text on preloader\n\t */\n\tupdateStatus: function(status, text) {\n\n\t\tif(mfp.preloader) {\n\t\t\tif(_prevStatus !== status) {\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\n\t\t\t}\n\n\t\t\tif(!text && status === 'loading') {\n\t\t\t\ttext = mfp.st.tLoading;\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tstatus: status,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t\t// allows to modify status\n\t\t\t_mfpTrigger('UpdateStatus', data);\n\n\t\t\tstatus = data.status;\n\t\t\ttext = data.text;\n\n\t\t\tmfp.preloader.html(text);\n\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tmfp.container.addClass('mfp-s-'+status);\n\t\t\t_prevStatus = status;\n\t\t}\n\t},\n\n\n\t/*\n\t\t\"Private\" helpers that aren't private at all\n\t */\n\t// Check to close popup or not\n\t// \"target\" is an element that was clicked\n\t_checkIfClose: function(target) {\n\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\n\n\t\tif(closeOnContent && closeOnBg) {\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// if click is outside the content\n\t\t\tif(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {\n\t\t\t\tif(closeOnBg) {\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\n\t\t\t\t\tif( $.contains(document, target) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(closeOnContent) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\t\treturn false;\n\t},\n\t_addClassToMFP: function(cName) {\n\t\tmfp.bgOverlay.addClass(cName);\n\t\tmfp.wrap.addClass(cName);\n\t},\n\t_removeClassFromMFP: function(cName) {\n\t\tthis.bgOverlay.removeClass(cName);\n\t\tmfp.wrap.removeClass(cName);\n\t},\n\t_hasScrollBar: function(winHeight) {\n\t\treturn (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\n\t},\n\t_setFocus: function() {\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\n\t},\n\t_onFocusIn: function(e) {\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\n\t\t\tmfp._setFocus();\n\t\t\treturn false;\n\t\t}\n\t},\n\t_parseMarkup: function(template, values, item) {\n\t\tvar arr;\n\t\tif(item.data) {\n\t\t\tvalues = $.extend(item.data, values);\n\t\t}\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\n\n\t\t$.each(values, function(key, value) {\n\t\t\tif(value === undefined || value === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tarr = key.split('_');\n\t\t\tif(arr.length > 1) {\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\n\n\t\t\t\tif(el.length > 0) {\n\t\t\t\t\tvar attr = arr[1];\n\t\t\t\t\tif(attr === 'replaceWith') {\n\t\t\t\t\t\tif(el[0] !== value[0]) {\n\t\t\t\t\t\t\tel.replaceWith(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(attr === 'img') {\n\t\t\t\t\t\tif(el.is('img')) {\n\t\t\t\t\t\t\tel.attr('src', value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.attr(arr[1], value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\n\t\t\t}\n\t\t});\n\t},\n\n\t_getScrollbarSize: function() {\n\t\t// thx David\n\t\tif(mfp.scrollbarSize === undefined) {\n\t\t\tvar scrollDiv = document.createElement(\"div\");\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\n\t\t\tdocument.body.appendChild(scrollDiv);\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t\tdocument.body.removeChild(scrollDiv);\n\t\t}\n\t\treturn mfp.scrollbarSize;\n\t}\n\n}; /* MagnificPopup core prototype end */\n\n\n\n\n/**\n * Public static functions\n */\n$.magnificPopup = {\n\tinstance: null,\n\tproto: MagnificPopup.prototype,\n\tmodules: [],\n\n\topen: function(options, index) {\n\t\t_checkInstance();\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t} else {\n\t\t\toptions = $.extend(true, {}, options);\n\t\t}\n\n\t\toptions.isObj = true;\n\t\toptions.index = index || 0;\n\t\treturn this.instance.open(options);\n\t},\n\n\tclose: function() {\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\n\t},\n\n\tregisterModule: function(name, module) {\n\t\tif(module.options) {\n\t\t\t$.magnificPopup.defaults[name] = module.options;\n\t\t}\n\t\t$.extend(this.proto, module.proto);\n\t\tthis.modules.push(name);\n\t},\n\n\tdefaults: {\n\n\t\t// Info about options is in docs:\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\n\n\t\tdisableOn: 0,\n\n\t\tkey: null,\n\n\t\tmidClick: false,\n\n\t\tmainClass: '',\n\n\t\tpreloader: true,\n\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\n\n\t\tcloseOnContentClick: false,\n\n\t\tcloseOnBgClick: true,\n\n\t\tcloseBtnInside: true,\n\n\t\tshowCloseBtn: true,\n\n\t\tenableEscapeKey: true,\n\n\t\tmodal: false,\n\n\t\talignTop: false,\n\n\t\tremovalDelay: 0,\n\n\t\tprependTo: null,\n\n\t\tfixedContentPos: 'auto',\n\n\t\tfixedBgPos: 'auto',\n\n\t\toverflowY: 'auto',\n\n\t\tcloseMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">&#215;</button>',\n\n\t\ttClose: 'Close (Esc)',\n\n\t\ttLoading: 'Loading...',\n\n\t\tautoFocusLast: true\n\n\t}\n};\n\n\n\n$.fn.magnificPopup = function(options) {\n\t_checkInstance();\n\n\tvar jqEl = $(this);\n\n\t// We call some API method of first param is a string\n\tif (typeof options === \"string\" ) {\n\n\t\tif(options === 'open') {\n\t\t\tvar items,\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\n\n\t\t\tif(itemOpts.items) {\n\t\t\t\titems = itemOpts.items[index];\n\t\t\t} else {\n\t\t\t\titems = jqEl;\n\t\t\t\tif(itemOpts.delegate) {\n\t\t\t\t\titems = items.find(itemOpts.delegate);\n\t\t\t\t}\n\t\t\t\titems = items.eq( index );\n\t\t\t}\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\n\t\t} else {\n\t\t\tif(mfp.isOpen)\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\n\t} else {\n\t\t// clone options obj\n\t\toptions = $.extend(true, {}, options);\n\n\t\t/*\n\t\t * As Zepto doesn't support .data() method for objects\n\t\t * and it works only in normal browsers\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\n\t\t */\n\t\tif(_isJQ) {\n\t\t\tjqEl.data('magnificPopup', options);\n\t\t} else {\n\t\t\tjqEl[0].magnificPopup = options;\n\t\t}\n\n\t\tmfp.addGroup(jqEl, options);\n\n\t}\n\treturn jqEl;\n};\n\n/*>>core*/\n\n/*>>inline*/\n\nvar INLINE_NS = 'inline',\n\t_hiddenClass,\n\t_inlinePlaceholder,\n\t_lastInlineElement,\n\t_putInlineElementsBack = function() {\n\t\tif(_lastInlineElement) {\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\n\t\t\t_lastInlineElement = null;\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(INLINE_NS, {\n\toptions: {\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\n\t\tmarkup: '',\n\t\ttNotFound: 'Content not found'\n\t},\n\tproto: {\n\n\t\tinitInline: function() {\n\t\t\tmfp.types.push(INLINE_NS);\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\n\t\t\t\t_putInlineElementsBack();\n\t\t\t});\n\t\t},\n\n\t\tgetInline: function(item, template) {\n\n\t\t\t_putInlineElementsBack();\n\n\t\t\tif(item.src) {\n\t\t\t\tvar inlineSt = mfp.st.inline,\n\t\t\t\t\tel = $(item.src);\n\n\t\t\t\tif(el.length) {\n\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\n\t\t\t\t\tvar parent = el[0].parentNode;\n\t\t\t\t\tif(parent && parent.tagName) {\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace target inline element with placeholder\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\n\t\t\t\t\t}\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t} else {\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\n\t\t\t\t\tel = $('<div>');\n\t\t\t\t}\n\n\t\t\t\titem.inlineElement = el;\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('ready');\n\t\t\tmfp._parseMarkup(template, {}, item);\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>inline*/\n\n/*>>ajax*/\nvar AJAX_NS = 'ajax',\n\t_ajaxCur,\n\t_removeAjaxCursor = function() {\n\t\tif(_ajaxCur) {\n\t\t\t$(document.body).removeClass(_ajaxCur);\n\t\t}\n\t},\n\t_destroyAjaxRequest = function() {\n\t\t_removeAjaxCursor();\n\t\tif(mfp.req) {\n\t\t\tmfp.req.abort();\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(AJAX_NS, {\n\n\toptions: {\n\t\tsettings: null,\n\t\tcursor: 'mfp-ajax-cur',\n\t\ttError: '<a href=\"%url%\">The content</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitAjax: function() {\n\t\t\tmfp.types.push(AJAX_NS);\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\n\t\t},\n\t\tgetAjax: function(item) {\n\n\t\t\tif(_ajaxCur) {\n\t\t\t\t$(document.body).addClass(_ajaxCur);\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\n\t\t\tvar opts = $.extend({\n\t\t\t\turl: item.src,\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\tvar temp = {\n\t\t\t\t\t\tdata:data,\n\t\t\t\t\t\txhr:jqXHR\n\t\t\t\t\t};\n\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\n\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\n\n\t\t\t\t\titem.finished = true;\n\n\t\t\t\t\t_removeAjaxCursor();\n\n\t\t\t\t\tmfp._setFocus();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\n\t\t\t\t\t}, 16);\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t_removeAjaxCursor();\n\t\t\t\t\titem.finished = item.loadError = true;\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\n\t\t\t\t}\n\t\t\t}, mfp.st.ajax.settings);\n\n\t\t\tmfp.req = $.ajax(opts);\n\n\t\t\treturn '';\n\t\t}\n\t}\n});\n\n/*>>ajax*/\n\n/*>>image*/\nvar _imgInterval,\n\t_getTitle = function(item) {\n\t\tif(item.data && item.data.title !== undefined)\n\t\t\treturn item.data.title;\n\n\t\tvar src = mfp.st.image.titleSrc;\n\n\t\tif(src) {\n\t\t\tif($.isFunction(src)) {\n\t\t\t\treturn src.call(mfp, item);\n\t\t\t} else if(item.el) {\n\t\t\t\treturn item.el.attr(src) || '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\n$.magnificPopup.registerModule('image', {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-figure\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<figure>'+\n\t\t\t\t\t\t'<div class=\"mfp-img\"></div>'+\n\t\t\t\t\t\t'<figcaption>'+\n\t\t\t\t\t\t\t'<div class=\"mfp-bottom-bar\">'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-title\"></div>'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-counter\"></div>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</figcaption>'+\n\t\t\t\t\t'</figure>'+\n\t\t\t\t'</div>',\n\t\tcursor: 'mfp-zoom-out-cur',\n\t\ttitleSrc: 'title',\n\t\tverticalFit: true,\n\t\ttError: '<a href=\"%url%\">The image</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitImage: function() {\n\t\t\tvar imgSt = mfp.st.image,\n\t\t\t\tns = '.image';\n\n\t\t\tmfp.types.push('image');\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(imgSt.cursor) {\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t\t_window.off('resize' + EVENT_NS);\n\t\t\t});\n\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\n\t\t\tif(mfp.isLowIE) {\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\n\t\t\t}\n\t\t},\n\t\tresizeImage: function() {\n\t\t\tvar item = mfp.currItem;\n\t\t\tif(!item || !item.img) return;\n\n\t\t\tif(mfp.st.image.verticalFit) {\n\t\t\t\tvar decr = 0;\n\t\t\t\t// fix box-sizing in ie7/8\n\t\t\t\tif(mfp.isLowIE) {\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\n\t\t\t\t}\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\n\t\t\t}\n\t\t},\n\t\t_onImageHasSize: function(item) {\n\t\t\tif(item.img) {\n\n\t\t\t\titem.hasSize = true;\n\n\t\t\t\tif(_imgInterval) {\n\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t}\n\n\t\t\t\titem.isCheckingImgSize = false;\n\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\n\n\t\t\t\tif(item.imgHidden) {\n\t\t\t\t\tif(mfp.content)\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\n\n\t\t\t\t\titem.imgHidden = false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Function that loops until the image has size to display elements that rely on it asap\n\t\t */\n\t\tfindImageSize: function(item) {\n\n\t\t\tvar counter = 0,\n\t\t\t\timg = item.img[0],\n\t\t\t\tmfpSetInterval = function(delay) {\n\n\t\t\t\t\tif(_imgInterval) {\n\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t}\n\t\t\t\t\t// decelerating interval that checks for size of an image\n\t\t\t\t\t_imgInterval = setInterval(function() {\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter > 200) {\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\tif(counter === 3) {\n\t\t\t\t\t\t\tmfpSetInterval(10);\n\t\t\t\t\t\t} else if(counter === 40) {\n\t\t\t\t\t\t\tmfpSetInterval(50);\n\t\t\t\t\t\t} else if(counter === 100) {\n\t\t\t\t\t\t\tmfpSetInterval(500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t};\n\n\t\t\tmfpSetInterval(1);\n\t\t},\n\n\t\tgetImage: function(item, template) {\n\n\t\t\tvar guard = 0,\n\n\t\t\t\t// image load complete handler\n\t\t\t\tonLoadComplete = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\tif (item.img[0].complete) {\n\t\t\t\t\t\t\titem.img.off('.mfploader');\n\n\t\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\t\titem.loaded = true;\n\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\n\t\t\t\t\t\t\tguard++;\n\t\t\t\t\t\t\tif(guard < 200) {\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonLoadError();\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// image error handler\n\t\t\t\tonLoadError = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\titem.img.off('.mfploader');\n\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\titem.loaded = true;\n\t\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timgSt = mfp.st.image;\n\n\n\t\t\tvar el = template.find('.mfp-img');\n\t\t\tif(el.length) {\n\t\t\t\tvar img = document.createElement('img');\n\t\t\t\timg.className = 'mfp-img';\n\t\t\t\tif(item.el && item.el.find('img').length) {\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\n\t\t\t\t}\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\n\t\t\t\timg.src = item.src;\n\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\n\t\t\t\t// TODO: find a way to avoid such cloning\n\t\t\t\tif(el.is('img')) {\n\t\t\t\t\titem.img = item.img.clone();\n\t\t\t\t}\n\n\t\t\t\timg = item.img[0];\n\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t} else if(!img.width) {\n\t\t\t\t\titem.hasSize = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmfp._parseMarkup(template, {\n\t\t\t\ttitle: _getTitle(item),\n\t\t\t\timg_replaceWith: item.img\n\t\t\t}, item);\n\n\t\t\tmfp.resizeImage();\n\n\t\t\tif(item.hasSize) {\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\n\n\t\t\t\tif(item.loadError) {\n\t\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t} else {\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t}\n\t\t\t\treturn template;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\t\t\titem.loading = true;\n\n\t\t\tif(!item.hasSize) {\n\t\t\t\titem.imgHidden = true;\n\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\tmfp.findImageSize(item);\n\t\t\t}\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>image*/\n\n/*>>zoom*/\nvar hasMozTransform,\n\tgetHasMozTransform = function() {\n\t\tif(hasMozTransform === undefined) {\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\n\t\t}\n\t\treturn hasMozTransform;\n\t};\n\n$.magnificPopup.registerModule('zoom', {\n\n\toptions: {\n\t\tenabled: false,\n\t\teasing: 'ease-in-out',\n\t\tduration: 300,\n\t\topener: function(element) {\n\t\t\treturn element.is('img') ? element : element.find('img');\n\t\t}\n\t},\n\n\tproto: {\n\n\t\tinitZoom: function() {\n\t\t\tvar zoomSt = mfp.st.zoom,\n\t\t\t\tns = '.zoom',\n\t\t\t\timage;\n\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar duration = zoomSt.duration,\n\t\t\t\tgetElToAnimate = function(image) {\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\n\t\t\t\t\t\tcssObj = {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tt = 'transition';\n\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\n\n\t\t\t\t\tnewImg.css(cssObj);\n\t\t\t\t\treturn newImg;\n\t\t\t\t},\n\t\t\t\tshowMainContent = function() {\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\n\t\t\t\t},\n\t\t\t\topenTimeout,\n\t\t\t\tanimatedImg;\n\n\t\t\t_mfpOn('BuildControls'+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\n\n\t\t\t\t\timage = mfp._getItemToZoom();\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\tshowMainContent();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\n\t\t\t\t\topenTimeout = setTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\n\n\t\t\t\t\t\t\tshowMainContent();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t\t\t\timage = animatedImg = null;\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\n\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\n\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\n\n\n\t\t\t\t\t// Lots of timeouts...\n\t\t\t\t}\n\t\t\t});\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\n\t\t\t\t\tmfp.st.removalDelay = duration;\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\timage = mfp._getItemToZoom();\n\t\t\t\t\t\tif(!image) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\t\t\t\t\t}, 16);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\t\t\t\t\tshowMainContent();\n\t\t\t\t\tif(animatedImg) {\n\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t}\n\t\t\t\t\timage = null;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_allowZoom: function() {\n\t\t\treturn mfp.currItem.type === 'image';\n\t\t},\n\n\t\t_getItemToZoom: function() {\n\t\t\tif(mfp.currItem.hasSize) {\n\t\t\t\treturn mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Get element postion relative to viewport\n\t\t_getOffset: function(isLarge) {\n\t\t\tvar el;\n\t\t\tif(isLarge) {\n\t\t\t\tel = mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\n\t\t\t}\n\n\t\t\tvar offset = el.offset();\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\n\n\n\t\t\t/*\n\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\n\n\t\t\t */\n\t\t\tvar obj = {\n\t\t\t\twidth: el.width(),\n\t\t\t\t// fix Zepto height+padding issue\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\n\t\t\t};\n\n\t\t\t// I hate to do this, but there is no another option\n\t\t\tif( getHasMozTransform() ) {\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\n\t\t\t} else {\n\t\t\t\tobj.left = offset.left;\n\t\t\t\tobj.top = offset.top;\n\t\t\t}\n\t\t\treturn obj;\n\t\t}\n\n\t}\n});\n\n\n\n/*>>zoom*/\n\n/*>>iframe*/\n\nvar IFRAME_NS = 'iframe',\n\t_emptyPage = '//about:blank',\n\n\t_fixIframeBugs = function(isShowing) {\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\n\t\t\tif(el.length) {\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\n\t\t\t\tif(!isShowing) {\n\t\t\t\t\tel[0].src = _emptyPage;\n\t\t\t\t}\n\n\t\t\t\t// IE8 black screen bug fix\n\t\t\t\tif(mfp.isIE8) {\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(IFRAME_NS, {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-iframe-scaler\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<iframe class=\"mfp-iframe\" src=\"//about:blank\" frameborder=\"0\" allowfullscreen></iframe>'+\n\t\t\t\t'</div>',\n\n\t\tsrcAction: 'iframe_src',\n\n\t\t// we don't care and support only one default type of URL by default\n\t\tpatterns: {\n\t\t\tyoutube: {\n\t\t\t\tindex: 'youtube.com',\n\t\t\t\tid: 'v=',\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\n\t\t\t},\n\t\t\tvimeo: {\n\t\t\t\tindex: 'vimeo.com/',\n\t\t\t\tid: '/',\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\n\t\t\t},\n\t\t\tgmaps: {\n\t\t\t\tindex: '//maps.google.',\n\t\t\t\tsrc: '%id%&output=embed'\n\t\t\t}\n\t\t}\n\t},\n\n\tproto: {\n\t\tinitIframe: function() {\n\t\t\tmfp.types.push(IFRAME_NS);\n\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\n\t\t\t\tif(prevType !== newType) {\n\t\t\t\t\tif(prevType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\n\t\t\t\t\t}\n\t\t\t\t}// else {\n\t\t\t\t\t// iframe source is switched, don't do anything\n\t\t\t\t//}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\n\t\t\t\t_fixIframeBugs();\n\t\t\t});\n\t\t},\n\n\t\tgetIframe: function(item, template) {\n\t\t\tvar embedSrc = item.src;\n\t\t\tvar iframeSt = mfp.st.iframe;\n\n\t\t\t$.each(iframeSt.patterns, function() {\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\n\t\t\t\t\tif(this.id) {\n\t\t\t\t\t\tif(typeof this.id === 'string') {\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\n\t\t\t\t\treturn false; // break;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar dataObj = {};\n\t\t\tif(iframeSt.srcAction) {\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\n\t\t\t}\n\t\t\tmfp._parseMarkup(template, dataObj, item);\n\n\t\t\tmfp.updateStatus('ready');\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n\n\n/*>>iframe*/\n\n/*>>gallery*/\n/**\n * Get looped index depending on number of slides\n */\nvar _getLoopedId = function(index) {\n\t\tvar numSlides = mfp.items.length;\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else  if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t_replaceCurrTotal = function(text, curr, total) {\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\n\t};\n\n$.magnificPopup.registerModule('gallery', {\n\n\toptions: {\n\t\tenabled: false,\n\t\tarrowMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-arrow mfp-arrow-%dir%\"></button>',\n\t\tpreload: [0,2],\n\t\tnavigateByImgClick: true,\n\t\tarrows: true,\n\n\t\ttPrev: 'Previous (Left arrow key)',\n\t\ttNext: 'Next (Right arrow key)',\n\t\ttCounter: '%curr% of %total%'\n\t},\n\n\tproto: {\n\t\tinitGallery: function() {\n\n\t\t\tvar gSt = mfp.st.gallery,\n\t\t\t\tns = '.mfp-gallery';\n\n\t\t\tmfp.direction = true; // true - next, false - prev\n\n\t\t\tif(!gSt || !gSt.enabled ) return false;\n\n\t\t\t_wrapClasses += ' mfp-gallery';\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\n\t\t\t\tif(gSt.navigateByImgClick) {\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\n\t\t\t\t\t\tif(mfp.items.length > 1) {\n\t\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_document.on('keydown'+ns, function(e) {\n\t\t\t\t\tif (e.keyCode === 37) {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t} else if (e.keyCode === 39) {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\n\t\t\t\tif(data.text) {\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\n\t\t\t\tvar l = mfp.items.length;\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\n\t\t\t});\n\n\t\t\t_mfpOn('BuildControls' + ns, function() {\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\n\n\t\t\t\t\tarrowLeft.click(function() {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t});\n\t\t\t\t\tarrowRight.click(function() {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t});\n\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\n\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\n\t\t\t\t\tmfp.preloadNearbyImages();\n\t\t\t\t\tmfp._preloadTimeout = null;\n\t\t\t\t}, 16);\n\t\t\t});\n\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\t_document.off(ns);\n\t\t\t\tmfp.wrap.off('click'+ns);\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\n\t\t\t});\n\n\t\t},\n\t\tnext: function() {\n\t\t\tmfp.direction = true;\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tprev: function() {\n\t\t\tmfp.direction = false;\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tgoTo: function(newIndex) {\n\t\t\tmfp.direction = (newIndex >= mfp.index);\n\t\t\tmfp.index = newIndex;\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tpreloadNearbyImages: function() {\n\t\t\tvar p = mfp.st.gallery.preload,\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\n\t\t\t\ti;\n\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index+i);\n\t\t\t}\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index-i);\n\t\t\t}\n\t\t},\n\t\t_preloadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\n\t\t\tif(mfp.items[index].preloaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = mfp.items[index];\n\t\t\tif(!item.parsed) {\n\t\t\t\titem = mfp.parseEl( index );\n\t\t\t}\n\n\t\t\t_mfpTrigger('LazyLoad', item);\n\n\t\t\tif(item.type === 'image') {\n\t\t\t\titem.img = $('<img class=\"mfp-img\" />').on('load.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t}).on('error.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\n\t\t\t\t}).attr('src', item.src);\n\t\t\t}\n\n\n\t\t\titem.preloaded = true;\n\t\t}\n\t}\n});\n\n/*>>gallery*/\n\n/*>>retina*/\n\nvar RETINA_NS = 'retina';\n\n$.magnificPopup.registerModule(RETINA_NS, {\n\toptions: {\n\t\treplaceSrc: function(item) {\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\n\t\t},\n\t\tratio: 1 // Function or number.  Set to 1 to disable.\n\t},\n\tproto: {\n\t\tinitRetina: function() {\n\t\t\tif(window.devicePixelRatio > 1) {\n\n\t\t\t\tvar st = mfp.st.retina,\n\t\t\t\t\tratio = st.ratio;\n\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\n\n\t\t\t\tif(ratio > 1) {\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.img.css({\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\n\t\t\t\t\t\t\t'width': '100%'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n\n/*>>retina*/\n _checkInstance(); }));","/* eslint-disable no-undefined */\n\nvar throttle = require('./throttle');\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param  {Number}   delay         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}  [atBegin]     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param  {Function} callback      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                  to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\nmodule.exports = function ( delay, atBegin, callback ) {\n\treturn callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n};\n","var throttle = require('./throttle');\nvar debounce = require('./debounce');\n\nmodule.exports = {\n\tthrottle: throttle,\n\tdebounce: debounce\n};\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param  {Number}    delay          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}   [noTrailing]   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n *                                    the internal counter is reset)\n * @param  {Function}  callback       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param  {Boolean}   [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n *                                    schedule `callback` to execute after `delay` ms.\n *\n * @return {Function}  A new, throttled, function.\n */\nmodule.exports = function ( delay, noTrailing, callback, debounceMode ) {\n\n\t// After wrapper has stopped being called, this timeout ensures that\n\t// `callback` is executed at the proper times in `throttle` and `end`\n\t// debounce modes.\n\tvar timeoutID;\n\n\t// Keep track of the last time `callback` was executed.\n\tvar lastExec = 0;\n\n\t// `noTrailing` defaults to falsy.\n\tif ( typeof noTrailing !== 'boolean' ) {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t// The `wrapper` function encapsulates all of the throttling / debouncing\n\t// functionality and when executed will limit the rate at which `callback`\n\t// is executed.\n\tfunction wrapper () {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec () {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\t// If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t// to allow future `callback` executions.\n\t\tfunction clear () {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif ( debounceMode && !timeoutID ) {\n\t\t\t// Since `wrapper` is being called for the first time and\n\t\t\t// `debounceMode` is true (at begin), execute `callback`.\n\t\t\texec();\n\t\t}\n\n\t\t// Clear any existing timeout.\n\t\tif ( timeoutID ) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif ( debounceMode === undefined && elapsed > delay ) {\n\t\t\t// In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t// `callback`.\n\t\t\texec();\n\n\t\t} else if ( noTrailing !== true ) {\n\t\t\t// In trailing throttle mode, since `delay` time has not been\n\t\t\t// exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t// recent execution.\n\t\t\t//\n\t\t\t// If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t// after `delay` ms.\n\t\t\t//\n\t\t\t// If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t// execute after `delay` ms.\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\n\t}\n\n\t// Return the wrapper function.\n\treturn wrapper;\n\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n    return (obj !== null &&\n        typeof obj === 'object' &&\n        'constructor' in obj &&\n        obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n    Object.keys(src).forEach((key) => {\n        if (typeof target[key] === 'undefined')\n            target[key] = src[key];\n        else if (isObject(src[key]) &&\n            isObject(target[key]) &&\n            Object.keys(src[key]).length > 0) {\n            extend(target[key], src[key]);\n        }\n    });\n}\n\nconst ssrDocument = {\n    body: {},\n    addEventListener() { },\n    removeEventListener() { },\n    activeElement: {\n        blur() { },\n        nodeName: '',\n    },\n    querySelector() {\n        return null;\n    },\n    querySelectorAll() {\n        return [];\n    },\n    getElementById() {\n        return null;\n    },\n    createEvent() {\n        return {\n            initEvent() { },\n        };\n    },\n    createElement() {\n        return {\n            children: [],\n            childNodes: [],\n            style: {},\n            setAttribute() { },\n            getElementsByTagName() {\n                return [];\n            },\n        };\n    },\n    createElementNS() {\n        return {};\n    },\n    importNode() {\n        return null;\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n};\nfunction getDocument() {\n    const doc = typeof document !== 'undefined' ? document : {};\n    extend(doc, ssrDocument);\n    return doc;\n}\n\nconst ssrWindow = {\n    document: ssrDocument,\n    navigator: {\n        userAgent: '',\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n    history: {\n        replaceState() { },\n        pushState() { },\n        go() { },\n        back() { },\n    },\n    CustomEvent: function CustomEvent() {\n        return this;\n    },\n    addEventListener() { },\n    removeEventListener() { },\n    getComputedStyle() {\n        return {\n            getPropertyValue() {\n                return '';\n            },\n        };\n    },\n    Image() { },\n    Date() { },\n    screen: {},\n    setTimeout() { },\n    clearTimeout() { },\n    matchMedia() {\n        return {};\n    },\n    requestAnimationFrame(callback) {\n        if (typeof setTimeout === 'undefined') {\n            callback();\n            return null;\n        }\n        return setTimeout(callback, 0);\n    },\n    cancelAnimationFrame(id) {\n        if (typeof setTimeout === 'undefined') {\n            return;\n        }\n        clearTimeout(id);\n    },\n};\nfunction getWindow() {\n    const win = typeof window !== 'undefined' ? window : {};\n    extend(win, ssrWindow);\n    return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.2\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n  const proto = obj.__proto__;\n  Object.defineProperty(obj, '__proto__', {\n    get() {\n      return proto;\n    },\n\n    set(value) {\n      proto.__proto__ = value;\n    }\n\n  });\n}\n\nclass Dom7 extends Array {\n  constructor(items) {\n    super(...(items || []));\n    makeReactive(this);\n  }\n\n}\n\nfunction arrayFlat(arr = []) {\n  const res = [];\n  arr.forEach(el => {\n    if (Array.isArray(el)) {\n      res.push(...arrayFlat(el));\n    } else {\n      res.push(el);\n    }\n  });\n  return res;\n}\nfunction arrayFilter(arr, callback) {\n  return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n  const uniqueArray = [];\n\n  for (let i = 0; i < arr.length; i += 1) {\n    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n  }\n\n  return uniqueArray;\n}\nfunction toCamelCase(string) {\n  return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n  if (typeof selector !== 'string') {\n    return [selector];\n  }\n\n  const a = [];\n  const res = context.querySelectorAll(selector);\n\n  for (let i = 0; i < res.length; i += 1) {\n    a.push(res[i]);\n  }\n\n  return a;\n}\n\nfunction $(selector, context) {\n  const window = getWindow();\n  const document = getDocument();\n  let arr = [];\n\n  if (!context && selector instanceof Dom7) {\n    return selector;\n  }\n\n  if (!selector) {\n    return new Dom7(arr);\n  }\n\n  if (typeof selector === 'string') {\n    const html = selector.trim();\n\n    if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n      let toCreate = 'div';\n      if (html.indexOf('<li') === 0) toCreate = 'ul';\n      if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n      if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n      if (html.indexOf('<tbody') === 0) toCreate = 'table';\n      if (html.indexOf('<option') === 0) toCreate = 'select';\n      const tempParent = document.createElement(toCreate);\n      tempParent.innerHTML = html;\n\n      for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n        arr.push(tempParent.childNodes[i]);\n      }\n    } else {\n      arr = qsa(selector.trim(), context || document);\n    } // arr = qsa(selector, document);\n\n  } else if (selector.nodeType || selector === window || selector === document) {\n    arr.push(selector);\n  } else if (Array.isArray(selector)) {\n    if (selector instanceof Dom7) return selector;\n    arr = selector;\n  }\n\n  return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\n// eslint-disable-next-line\n\nfunction addClass(...classes) {\n  const classNames = arrayFlat(classes.map(c => c.split(' ')));\n  this.forEach(el => {\n    el.classList.add(...classNames);\n  });\n  return this;\n}\n\nfunction removeClass(...classes) {\n  const classNames = arrayFlat(classes.map(c => c.split(' ')));\n  this.forEach(el => {\n    el.classList.remove(...classNames);\n  });\n  return this;\n}\n\nfunction toggleClass(...classes) {\n  const classNames = arrayFlat(classes.map(c => c.split(' ')));\n  this.forEach(el => {\n    classNames.forEach(className => {\n      el.classList.toggle(className);\n    });\n  });\n}\n\nfunction hasClass(...classes) {\n  const classNames = arrayFlat(classes.map(c => c.split(' ')));\n  return arrayFilter(this, el => {\n    return classNames.filter(className => el.classList.contains(className)).length > 0;\n  }).length > 0;\n}\n\nfunction attr(attrs, value) {\n  if (arguments.length === 1 && typeof attrs === 'string') {\n    // Get attr\n    if (this[0]) return this[0].getAttribute(attrs);\n    return undefined;\n  } // Set attrs\n\n\n  for (let i = 0; i < this.length; i += 1) {\n    if (arguments.length === 2) {\n      // String\n      this[i].setAttribute(attrs, value);\n    } else {\n      // Object\n      for (const attrName in attrs) {\n        this[i][attrName] = attrs[attrName];\n        this[i].setAttribute(attrName, attrs[attrName]);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction removeAttr(attr) {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].removeAttribute(attr);\n  }\n\n  return this;\n}\n\nfunction prop(props, value) {\n  if (arguments.length === 1 && typeof props === 'string') {\n    // Get prop\n    if (this[0]) return this[0][props];\n  } else {\n    // Set props\n    for (let i = 0; i < this.length; i += 1) {\n      if (arguments.length === 2) {\n        // String\n        this[i][props] = value;\n      } else {\n        // Object\n        for (const propName in props) {\n          this[i][propName] = props[propName];\n        }\n      }\n    }\n\n    return this;\n  }\n\n  return this;\n}\n\nfunction data(key, value) {\n  let el;\n\n  if (typeof value === 'undefined') {\n    el = this[0];\n    if (!el) return undefined; // Get value\n\n    if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n      return el.dom7ElementDataStorage[key];\n    }\n\n    const dataKey = el.getAttribute(`data-${key}`);\n\n    if (dataKey) {\n      return dataKey;\n    }\n\n    return undefined;\n  } // Set value\n\n\n  for (let i = 0; i < this.length; i += 1) {\n    el = this[i];\n    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n    el.dom7ElementDataStorage[key] = value;\n  }\n\n  return this;\n}\n\nfunction removeData(key) {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n\n    if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n      el.dom7ElementDataStorage[key] = null;\n      delete el.dom7ElementDataStorage[key];\n    }\n  }\n}\n\nfunction dataset() {\n  const el = this[0];\n  if (!el) return undefined;\n  const dataset = {}; // eslint-disable-line\n\n  if (el.dataset) {\n    for (const dataKey in el.dataset) {\n      dataset[dataKey] = el.dataset[dataKey];\n    }\n  } else {\n    for (let i = 0; i < el.attributes.length; i += 1) {\n      const attr = el.attributes[i];\n\n      if (attr.name.indexOf('data-') >= 0) {\n        dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n      }\n    }\n  }\n\n  for (const key in dataset) {\n    if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n  }\n\n  return dataset;\n}\n\nfunction val(value) {\n  if (typeof value === 'undefined') {\n    // get value\n    const el = this[0];\n    if (!el) return undefined;\n\n    if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n      const values = [];\n\n      for (let i = 0; i < el.selectedOptions.length; i += 1) {\n        values.push(el.selectedOptions[i].value);\n      }\n\n      return values;\n    }\n\n    return el.value;\n  } // set value\n\n\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n\n    if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n      for (let j = 0; j < el.options.length; j += 1) {\n        el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n      }\n    } else {\n      el.value = value;\n    }\n  }\n\n  return this;\n}\n\nfunction value(value) {\n  return this.val(value);\n}\n\nfunction transform(transform) {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].style.transform = transform;\n  }\n\n  return this;\n}\n\nfunction transition(duration) {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n  }\n\n  return this;\n}\n\nfunction on(...args) {\n  let [eventType, targetSelector, listener, capture] = args;\n\n  if (typeof args[1] === 'function') {\n    [eventType, listener, capture] = args;\n    targetSelector = undefined;\n  }\n\n  if (!capture) capture = false;\n\n  function handleLiveEvent(e) {\n    const target = e.target;\n    if (!target) return;\n    const eventData = e.target.dom7EventData || [];\n\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n\n    if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n      const parents = $(target).parents(); // eslint-disable-line\n\n      for (let k = 0; k < parents.length; k += 1) {\n        if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n      }\n    }\n  }\n\n  function handleEvent(e) {\n    const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n\n    listener.apply(this, eventData);\n  }\n\n  const events = eventType.split(' ');\n  let j;\n\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n\n    if (!targetSelector) {\n      for (j = 0; j < events.length; j += 1) {\n        const event = events[j];\n        if (!el.dom7Listeners) el.dom7Listeners = {};\n        if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n        el.dom7Listeners[event].push({\n          listener,\n          proxyListener: handleEvent\n        });\n        el.addEventListener(event, handleEvent, capture);\n      }\n    } else {\n      // Live events\n      for (j = 0; j < events.length; j += 1) {\n        const event = events[j];\n        if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n        if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n        el.dom7LiveListeners[event].push({\n          listener,\n          proxyListener: handleLiveEvent\n        });\n        el.addEventListener(event, handleLiveEvent, capture);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction off(...args) {\n  let [eventType, targetSelector, listener, capture] = args;\n\n  if (typeof args[1] === 'function') {\n    [eventType, listener, capture] = args;\n    targetSelector = undefined;\n  }\n\n  if (!capture) capture = false;\n  const events = eventType.split(' ');\n\n  for (let i = 0; i < events.length; i += 1) {\n    const event = events[i];\n\n    for (let j = 0; j < this.length; j += 1) {\n      const el = this[j];\n      let handlers;\n\n      if (!targetSelector && el.dom7Listeners) {\n        handlers = el.dom7Listeners[event];\n      } else if (targetSelector && el.dom7LiveListeners) {\n        handlers = el.dom7LiveListeners[event];\n      }\n\n      if (handlers && handlers.length) {\n        for (let k = handlers.length - 1; k >= 0; k -= 1) {\n          const handler = handlers[k];\n\n          if (listener && handler.listener === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (!listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          }\n        }\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction once(...args) {\n  const dom = this;\n  let [eventName, targetSelector, listener, capture] = args;\n\n  if (typeof args[1] === 'function') {\n    [eventName, listener, capture] = args;\n    targetSelector = undefined;\n  }\n\n  function onceHandler(...eventArgs) {\n    listener.apply(this, eventArgs);\n    dom.off(eventName, targetSelector, onceHandler, capture);\n\n    if (onceHandler.dom7proxy) {\n      delete onceHandler.dom7proxy;\n    }\n  }\n\n  onceHandler.dom7proxy = listener;\n  return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n  const window = getWindow();\n  const events = args[0].split(' ');\n  const eventData = args[1];\n\n  for (let i = 0; i < events.length; i += 1) {\n    const event = events[i];\n\n    for (let j = 0; j < this.length; j += 1) {\n      const el = this[j];\n\n      if (window.CustomEvent) {\n        const evt = new window.CustomEvent(event, {\n          detail: eventData,\n          bubbles: true,\n          cancelable: true\n        });\n        el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n        el.dispatchEvent(evt);\n        el.dom7EventData = [];\n        delete el.dom7EventData;\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction transitionEnd(callback) {\n  const dom = this;\n\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    dom.off('transitionend', fireCallBack);\n  }\n\n  if (callback) {\n    dom.on('transitionend', fireCallBack);\n  }\n\n  return this;\n}\n\nfunction animationEnd(callback) {\n  const dom = this;\n\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    dom.off('animationend', fireCallBack);\n  }\n\n  if (callback) {\n    dom.on('animationend', fireCallBack);\n  }\n\n  return this;\n}\n\nfunction width() {\n  const window = getWindow();\n\n  if (this[0] === window) {\n    return window.innerWidth;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('width'));\n  }\n\n  return null;\n}\n\nfunction outerWidth(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      const styles = this.styles();\n      return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n    }\n\n    return this[0].offsetWidth;\n  }\n\n  return null;\n}\n\nfunction height() {\n  const window = getWindow();\n\n  if (this[0] === window) {\n    return window.innerHeight;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('height'));\n  }\n\n  return null;\n}\n\nfunction outerHeight(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      const styles = this.styles();\n      return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n    }\n\n    return this[0].offsetHeight;\n  }\n\n  return null;\n}\n\nfunction offset() {\n  if (this.length > 0) {\n    const window = getWindow();\n    const document = getDocument();\n    const el = this[0];\n    const box = el.getBoundingClientRect();\n    const body = document.body;\n    const clientTop = el.clientTop || body.clientTop || 0;\n    const clientLeft = el.clientLeft || body.clientLeft || 0;\n    const scrollTop = el === window ? window.scrollY : el.scrollTop;\n    const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n    return {\n      top: box.top + scrollTop - clientTop,\n      left: box.left + scrollLeft - clientLeft\n    };\n  }\n\n  return null;\n}\n\nfunction hide() {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].style.display = 'none';\n  }\n\n  return this;\n}\n\nfunction show() {\n  const window = getWindow();\n\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n\n    if (el.style.display === 'none') {\n      el.style.display = '';\n    }\n\n    if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n      // Still not visible\n      el.style.display = 'block';\n    }\n  }\n\n  return this;\n}\n\nfunction styles() {\n  const window = getWindow();\n  if (this[0]) return window.getComputedStyle(this[0], null);\n  return {};\n}\n\nfunction css(props, value) {\n  const window = getWindow();\n  let i;\n\n  if (arguments.length === 1) {\n    if (typeof props === 'string') {\n      // .css('width')\n      if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n    } else {\n      // .css({ width: '100px' })\n      for (i = 0; i < this.length; i += 1) {\n        for (const prop in props) {\n          this[i].style[prop] = props[prop];\n        }\n      }\n\n      return this;\n    }\n  }\n\n  if (arguments.length === 2 && typeof props === 'string') {\n    // .css('width', '100px')\n    for (i = 0; i < this.length; i += 1) {\n      this[i].style[props] = value;\n    }\n\n    return this;\n  }\n\n  return this;\n}\n\nfunction each(callback) {\n  if (!callback) return this;\n  this.forEach((el, index) => {\n    callback.apply(el, [el, index]);\n  });\n  return this;\n}\n\nfunction filter(callback) {\n  const result = arrayFilter(this, callback);\n  return $(result);\n}\n\nfunction html(html) {\n  if (typeof html === 'undefined') {\n    return this[0] ? this[0].innerHTML : null;\n  }\n\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].innerHTML = html;\n  }\n\n  return this;\n}\n\nfunction text(text) {\n  if (typeof text === 'undefined') {\n    return this[0] ? this[0].textContent.trim() : null;\n  }\n\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].textContent = text;\n  }\n\n  return this;\n}\n\nfunction is(selector) {\n  const window = getWindow();\n  const document = getDocument();\n  const el = this[0];\n  let compareWith;\n  let i;\n  if (!el || typeof selector === 'undefined') return false;\n\n  if (typeof selector === 'string') {\n    if (el.matches) return el.matches(selector);\n    if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n    if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n    compareWith = $(selector);\n\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n\n    return false;\n  }\n\n  if (selector === document) {\n    return el === document;\n  }\n\n  if (selector === window) {\n    return el === window;\n  }\n\n  if (selector.nodeType || selector instanceof Dom7) {\n    compareWith = selector.nodeType ? [selector] : selector;\n\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n\n    return false;\n  }\n\n  return false;\n}\n\nfunction index() {\n  let child = this[0];\n  let i;\n\n  if (child) {\n    i = 0; // eslint-disable-next-line\n\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n\n    return i;\n  }\n\n  return undefined;\n}\n\nfunction eq(index) {\n  if (typeof index === 'undefined') return this;\n  const length = this.length;\n\n  if (index > length - 1) {\n    return $([]);\n  }\n\n  if (index < 0) {\n    const returnIndex = length + index;\n    if (returnIndex < 0) return $([]);\n    return $([this[returnIndex]]);\n  }\n\n  return $([this[index]]);\n}\n\nfunction append(...els) {\n  let newChild;\n  const document = getDocument();\n\n  for (let k = 0; k < els.length; k += 1) {\n    newChild = els[k];\n\n    for (let i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        const tempDiv = document.createElement('div');\n        tempDiv.innerHTML = newChild;\n\n        while (tempDiv.firstChild) {\n          this[i].appendChild(tempDiv.firstChild);\n        }\n      } else if (newChild instanceof Dom7) {\n        for (let j = 0; j < newChild.length; j += 1) {\n          this[i].appendChild(newChild[j]);\n        }\n      } else {\n        this[i].appendChild(newChild);\n      }\n    }\n  }\n\n  return this;\n}\n\nfunction appendTo(parent) {\n  $(parent).append(this);\n  return this;\n}\n\nfunction prepend(newChild) {\n  const document = getDocument();\n  let i;\n  let j;\n\n  for (i = 0; i < this.length; i += 1) {\n    if (typeof newChild === 'string') {\n      const tempDiv = document.createElement('div');\n      tempDiv.innerHTML = newChild;\n\n      for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n        this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n      }\n    } else if (newChild instanceof Dom7) {\n      for (j = 0; j < newChild.length; j += 1) {\n        this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n      }\n    } else {\n      this[i].insertBefore(newChild, this[i].childNodes[0]);\n    }\n  }\n\n  return this;\n}\n\nfunction prependTo(parent) {\n  $(parent).prepend(this);\n  return this;\n}\n\nfunction insertBefore(selector) {\n  const before = $(selector);\n\n  for (let i = 0; i < this.length; i += 1) {\n    if (before.length === 1) {\n      before[0].parentNode.insertBefore(this[i], before[0]);\n    } else if (before.length > 1) {\n      for (let j = 0; j < before.length; j += 1) {\n        before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n      }\n    }\n  }\n}\n\nfunction insertAfter(selector) {\n  const after = $(selector);\n\n  for (let i = 0; i < this.length; i += 1) {\n    if (after.length === 1) {\n      after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n    } else if (after.length > 1) {\n      for (let j = 0; j < after.length; j += 1) {\n        after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n      }\n    }\n  }\n}\n\nfunction next(selector) {\n  if (this.length > 0) {\n    if (selector) {\n      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n        return $([this[0].nextElementSibling]);\n      }\n\n      return $([]);\n    }\n\n    if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n    return $([]);\n  }\n\n  return $([]);\n}\n\nfunction nextAll(selector) {\n  const nextEls = [];\n  let el = this[0];\n  if (!el) return $([]);\n\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n\n    if (selector) {\n      if ($(next).is(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n\n    el = next;\n  }\n\n  return $(nextEls);\n}\n\nfunction prev(selector) {\n  if (this.length > 0) {\n    const el = this[0];\n\n    if (selector) {\n      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n        return $([el.previousElementSibling]);\n      }\n\n      return $([]);\n    }\n\n    if (el.previousElementSibling) return $([el.previousElementSibling]);\n    return $([]);\n  }\n\n  return $([]);\n}\n\nfunction prevAll(selector) {\n  const prevEls = [];\n  let el = this[0];\n  if (!el) return $([]);\n\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n\n    if (selector) {\n      if ($(prev).is(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n\n    el = prev;\n  }\n\n  return $(prevEls);\n}\n\nfunction siblings(selector) {\n  return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n  const parents = []; // eslint-disable-line\n\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode !== null) {\n      if (selector) {\n        if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n      } else {\n        parents.push(this[i].parentNode);\n      }\n    }\n  }\n\n  return $(parents);\n}\n\nfunction parents(selector) {\n  const parents = []; // eslint-disable-line\n\n  for (let i = 0; i < this.length; i += 1) {\n    let parent = this[i].parentNode; // eslint-disable-line\n\n    while (parent) {\n      if (selector) {\n        if ($(parent).is(selector)) parents.push(parent);\n      } else {\n        parents.push(parent);\n      }\n\n      parent = parent.parentNode;\n    }\n  }\n\n  return $(parents);\n}\n\nfunction closest(selector) {\n  let closest = this; // eslint-disable-line\n\n  if (typeof selector === 'undefined') {\n    return $([]);\n  }\n\n  if (!closest.is(selector)) {\n    closest = closest.parents(selector).eq(0);\n  }\n\n  return closest;\n}\n\nfunction find(selector) {\n  const foundElements = [];\n\n  for (let i = 0; i < this.length; i += 1) {\n    const found = this[i].querySelectorAll(selector);\n\n    for (let j = 0; j < found.length; j += 1) {\n      foundElements.push(found[j]);\n    }\n  }\n\n  return $(foundElements);\n}\n\nfunction children(selector) {\n  const children = []; // eslint-disable-line\n\n  for (let i = 0; i < this.length; i += 1) {\n    const childNodes = this[i].children;\n\n    for (let j = 0; j < childNodes.length; j += 1) {\n      if (!selector || $(childNodes[j]).is(selector)) {\n        children.push(childNodes[j]);\n      }\n    }\n  }\n\n  return $(children);\n}\n\nfunction remove() {\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n  }\n\n  return this;\n}\n\nfunction detach() {\n  return this.remove();\n}\n\nfunction add(...els) {\n  const dom = this;\n  let i;\n  let j;\n\n  for (i = 0; i < els.length; i += 1) {\n    const toAdd = $(els[i]);\n\n    for (j = 0; j < toAdd.length; j += 1) {\n      dom.push(toAdd[j]);\n    }\n  }\n\n  return dom;\n}\n\nfunction empty() {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n\n    if (el.nodeType === 1) {\n      for (let j = 0; j < el.childNodes.length; j += 1) {\n        if (el.childNodes[j].parentNode) {\n          el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n        }\n      }\n\n      el.textContent = '';\n    }\n  }\n\n  return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n  const window = getWindow();\n  let [left, top, duration, easing, callback] = args;\n\n  if (args.length === 4 && typeof easing === 'function') {\n    callback = easing;\n    [left, top, duration, callback, easing] = args;\n  }\n\n  if (typeof easing === 'undefined') easing = 'swing';\n  return this.each(function animate() {\n    const el = this;\n    let currentTop;\n    let currentLeft;\n    let maxTop;\n    let maxLeft;\n    let newTop;\n    let newLeft;\n    let scrollTop; // eslint-disable-line\n\n    let scrollLeft; // eslint-disable-line\n\n    let animateTop = top > 0 || top === 0;\n    let animateLeft = left > 0 || left === 0;\n\n    if (typeof easing === 'undefined') {\n      easing = 'swing';\n    }\n\n    if (animateTop) {\n      currentTop = el.scrollTop;\n\n      if (!duration) {\n        el.scrollTop = top;\n      }\n    }\n\n    if (animateLeft) {\n      currentLeft = el.scrollLeft;\n\n      if (!duration) {\n        el.scrollLeft = left;\n      }\n    }\n\n    if (!duration) return;\n\n    if (animateTop) {\n      maxTop = el.scrollHeight - el.offsetHeight;\n      newTop = Math.max(Math.min(top, maxTop), 0);\n    }\n\n    if (animateLeft) {\n      maxLeft = el.scrollWidth - el.offsetWidth;\n      newLeft = Math.max(Math.min(left, maxLeft), 0);\n    }\n\n    let startTime = null;\n    if (animateTop && newTop === currentTop) animateTop = false;\n    if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n    function render(time = new Date().getTime()) {\n      if (startTime === null) {\n        startTime = time;\n      }\n\n      const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n      const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n      let done;\n      if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n      if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n      if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n\n      if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n\n      if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (done) {\n        if (callback) callback();\n        return;\n      }\n\n      if (animateTop) el.scrollTop = scrollTop;\n      if (animateLeft) el.scrollLeft = scrollLeft;\n      window.requestAnimationFrame(render);\n    }\n\n    window.requestAnimationFrame(render);\n  });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n  let [top, duration, easing, callback] = args;\n\n  if (args.length === 3 && typeof easing === 'function') {\n    [top, duration, callback, easing] = args;\n  }\n\n  const dom = this;\n\n  if (typeof top === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollTop;\n    return null;\n  }\n\n  return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n  let [left, duration, easing, callback] = args;\n\n  if (args.length === 3 && typeof easing === 'function') {\n    [left, duration, callback, easing] = args;\n  }\n\n  const dom = this;\n\n  if (typeof left === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollLeft;\n    return null;\n  }\n\n  return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n  const window = getWindow();\n  const els = this;\n  const a = {\n    props: Object.assign({}, initialProps),\n    params: Object.assign({\n      duration: 300,\n      easing: 'swing' // or 'linear'\n\n      /* Callbacks\n      begin(elements)\n      complete(elements)\n      progress(elements, complete, remaining, start, tweenValue)\n      */\n\n    }, initialParams),\n    elements: els,\n    animating: false,\n    que: [],\n\n    easingProgress(easing, progress) {\n      if (easing === 'swing') {\n        return 0.5 - Math.cos(progress * Math.PI) / 2;\n      }\n\n      if (typeof easing === 'function') {\n        return easing(progress);\n      }\n\n      return progress;\n    },\n\n    stop() {\n      if (a.frameId) {\n        window.cancelAnimationFrame(a.frameId);\n      }\n\n      a.animating = false;\n      a.elements.each(el => {\n        const element = el;\n        delete element.dom7AnimateInstance;\n      });\n      a.que = [];\n    },\n\n    done(complete) {\n      a.animating = false;\n      a.elements.each(el => {\n        const element = el;\n        delete element.dom7AnimateInstance;\n      });\n      if (complete) complete(els);\n\n      if (a.que.length > 0) {\n        const que = a.que.shift();\n        a.animate(que[0], que[1]);\n      }\n    },\n\n    animate(props, params) {\n      if (a.animating) {\n        a.que.push([props, params]);\n        return a;\n      }\n\n      const elements = []; // Define & Cache Initials & Units\n\n      a.elements.each((el, index) => {\n        let initialFullValue;\n        let initialValue;\n        let unit;\n        let finalValue;\n        let finalFullValue;\n        if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n        elements[index] = {\n          container: el\n        };\n        Object.keys(props).forEach(prop => {\n          initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n          initialValue = parseFloat(initialFullValue);\n          unit = initialFullValue.replace(initialValue, '');\n          finalValue = parseFloat(props[prop]);\n          finalFullValue = props[prop] + unit;\n          elements[index][prop] = {\n            initialFullValue,\n            initialValue,\n            unit,\n            finalValue,\n            finalFullValue,\n            currentValue: initialValue\n          };\n        });\n      });\n      let startTime = null;\n      let time;\n      let elementsDone = 0;\n      let propsDone = 0;\n      let done;\n      let began = false;\n      a.animating = true;\n\n      function render() {\n        time = new Date().getTime();\n        let progress;\n        let easeProgress; // let el;\n\n        if (!began) {\n          began = true;\n          if (params.begin) params.begin(els);\n        }\n\n        if (startTime === null) {\n          startTime = time;\n        }\n\n        if (params.progress) {\n          // eslint-disable-next-line\n          params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n        }\n\n        elements.forEach(element => {\n          const el = element;\n          if (done || el.done) return;\n          Object.keys(props).forEach(prop => {\n            if (done || el.done) return;\n            progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n            easeProgress = a.easingProgress(params.easing, progress);\n            const {\n              initialValue,\n              finalValue,\n              unit\n            } = el[prop];\n            el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n            const currentValue = el[prop].currentValue;\n\n            if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n              el.container.style[prop] = finalValue + unit;\n              propsDone += 1;\n\n              if (propsDone === Object.keys(props).length) {\n                el.done = true;\n                elementsDone += 1;\n              }\n\n              if (elementsDone === elements.length) {\n                done = true;\n              }\n            }\n\n            if (done) {\n              a.done(params.complete);\n              return;\n            }\n\n            el.container.style[prop] = currentValue + unit;\n          });\n        });\n        if (done) return; // Then call\n\n        a.frameId = window.requestAnimationFrame(render);\n      }\n\n      a.frameId = window.requestAnimationFrame(render);\n      return a;\n    }\n\n  };\n\n  if (a.elements.length === 0) {\n    return els;\n  }\n\n  let animateInstance;\n\n  for (let i = 0; i < a.elements.length; i += 1) {\n    if (a.elements[i].dom7AnimateInstance) {\n      animateInstance = a.elements[i].dom7AnimateInstance;\n    } else a.elements[i].dom7AnimateInstance = a;\n  }\n\n  if (!animateInstance) {\n    animateInstance = a;\n  }\n\n  if (initialProps === 'stop') {\n    animateInstance.stop();\n  } else {\n    animateInstance.animate(a.props, a.params);\n  }\n\n  return els;\n}\n\nfunction stop() {\n  const els = this;\n\n  for (let i = 0; i < els.length; i += 1) {\n    if (els[i].dom7AnimateInstance) {\n      els[i].dom7AnimateInstance.stop();\n    }\n  }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n  function eventHandler(...args) {\n    if (typeof args[0] === 'undefined') {\n      for (let i = 0; i < this.length; i += 1) {\n        if (noTrigger.indexOf(name) < 0) {\n          if (name in this[i]) this[i][name]();else {\n            $(this[i]).trigger(name);\n          }\n        }\n      }\n\n      return this;\n    }\n\n    return this.on(name, ...args);\n  }\n\n  return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  styles,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove\n};\nObject.keys(Methods).forEach(methodName => {\n  Object.defineProperty($.fn, methodName, {\n    value: Methods[methodName],\n    writable: true\n  });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n  const object = obj;\n  Object.keys(object).forEach(key => {\n    try {\n      object[key] = null;\n    } catch (e) {// no getter for object\n    }\n\n    try {\n      delete object[key];\n    } catch (e) {// something got wrong\n    }\n  });\n}\n\nfunction nextTick(callback, delay = 0) {\n  return setTimeout(callback, delay);\n}\n\nfunction now() {\n  return Date.now();\n}\n\nfunction getComputedStyle(el) {\n  const window = getWindow();\n  let style;\n\n  if (window.getComputedStyle) {\n    style = window.getComputedStyle(el, null);\n  }\n\n  if (!style && el.currentStyle) {\n    style = el.currentStyle;\n  }\n\n  if (!style) {\n    style = el.style;\n  }\n\n  return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n  const window = getWindow();\n  let matrix;\n  let curTransform;\n  let transformMatrix;\n  const curStyle = getComputedStyle(el, null);\n\n  if (window.WebKitCSSMatrix) {\n    curTransform = curStyle.transform || curStyle.webkitTransform;\n\n    if (curTransform.split(',').length > 6) {\n      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n    } // Some old versions of Webkit choke when 'none' is passed; pass\n    // empty string instead in this case\n\n\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n  } else {\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n    matrix = transformMatrix.toString().split(',');\n  }\n\n  if (axis === 'x') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n    else curTransform = parseFloat(matrix[4]);\n  }\n\n  if (axis === 'y') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n    else curTransform = parseFloat(matrix[5]);\n  }\n\n  return curTransform || 0;\n}\n\nfunction isObject(o) {\n  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n  // eslint-disable-next-line\n  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n    return node instanceof HTMLElement;\n  }\n\n  return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n  const to = Object(args[0]);\n  const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n  for (let i = 1; i < args.length; i += 1) {\n    const nextSource = args[i];\n\n    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n        const nextKey = keysArray[nextIndex];\n        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n        if (desc !== undefined && desc.enumerable) {\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            to[nextKey] = {};\n\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n  }\n\n  return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n  el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n  swiper,\n  targetPosition,\n  side\n}) {\n  const window = getWindow();\n  const startPosition = -swiper.translate;\n  let startTime = null;\n  let time;\n  const duration = swiper.params.speed;\n  swiper.wrapperEl.style.scrollSnapType = 'none';\n  window.cancelAnimationFrame(swiper.cssModeFrameID);\n  const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n  const isOutOfBound = (current, target) => {\n    return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n  };\n\n  const animate = () => {\n    time = new Date().getTime();\n\n    if (startTime === null) {\n      startTime = time;\n    }\n\n    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      currentPosition = targetPosition;\n    }\n\n    swiper.wrapperEl.scrollTo({\n      [side]: currentPosition\n    });\n\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      swiper.wrapperEl.style.overflow = 'hidden';\n      swiper.wrapperEl.style.scrollSnapType = '';\n      setTimeout(() => {\n        swiper.wrapperEl.style.overflow = '';\n        swiper.wrapperEl.scrollTo({\n          [side]: currentPosition\n        });\n      });\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\n      return;\n    }\n\n    swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n  };\n\n  animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n  const window = getWindow();\n  const document = getDocument();\n  return {\n    smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n    passiveListener: function checkPassiveListener() {\n      let supportsPassive = false;\n\n      try {\n        const opts = Object.defineProperty({}, 'passive', {\n          // eslint-disable-next-line\n          get() {\n            supportsPassive = true;\n          }\n\n        });\n        window.addEventListener('testPassiveListener', null, opts);\n      } catch (e) {// No support\n      }\n\n      return supportsPassive;\n    }(),\n    gestures: function checkGestures() {\n      return 'ongesturestart' in window;\n    }()\n  };\n}\n\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n\n  return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n  userAgent\n} = {}) {\n  const support = getSupport();\n  const window = getWindow();\n  const platform = window.navigator.platform;\n  const ua = userAgent || window.navigator.userAgent;\n  const device = {\n    ios: false,\n    android: false\n  };\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const windows = platform === 'Win32';\n  let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    if (!ipad) ipad = [0, 1, '13_0_0'];\n    macos = false;\n  } // Android\n\n\n  if (android && !windows) {\n    device.os = 'android';\n    device.android = true;\n  }\n\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  } // Export object\n\n\n  return device;\n}\n\nfunction getDevice(overrides = {}) {\n  if (!deviceCached) {\n    deviceCached = calcDevice(overrides);\n  }\n\n  return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n  const window = getWindow();\n\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n  }\n\n  return {\n    isSafari: isSafari(),\n    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n  };\n}\n\nfunction getBrowser() {\n  if (!browser) {\n    browser = calcBrowser();\n  }\n\n  return browser;\n}\n\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\nexport default {\n  on(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(event => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  },\n\n  once(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n\n    function onceHandler(...args) {\n      self.off(events, onceHandler);\n\n      if (onceHandler.__emitterProxy) {\n        delete onceHandler.__emitterProxy;\n      }\n\n      handler.apply(self, args);\n    }\n\n    onceHandler.__emitterProxy = handler;\n    return self.on(events, onceHandler, priority);\n  },\n\n  onAny(handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\n      self.eventsAnyListeners[method](handler);\n    }\n\n    return self;\n  },\n\n  offAny(handler) {\n    const self = this;\n    if (!self.eventsAnyListeners) return self;\n    const index = self.eventsAnyListeners.indexOf(handler);\n\n    if (index >= 0) {\n      self.eventsAnyListeners.splice(index, 1);\n    }\n\n    return self;\n  },\n\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach(event => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  },\n\n  emit(...args) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n\n    data.unshift(context);\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(event => {\n      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n        self.eventsAnyListeners.forEach(eventHandler => {\n          eventHandler.apply(context, [event, ...data]);\n        });\n      }\n\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(eventHandler => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide\n};","export default function updateSize() {\n  const swiper = this;\n  let width;\n  let height;\n  const $el = swiper.$el;\n\n  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n    width = swiper.params.width;\n  } else {\n    width = $el[0].clientWidth;\n  }\n\n  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n    height = swiper.params.height;\n  } else {\n    height = $el[0].clientHeight;\n  }\n\n  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n    return;\n  } // Subtract paddings\n\n\n  width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n  height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n  if (Number.isNaN(width)) width = 0;\n  if (Number.isNaN(height)) height = 0;\n  Object.assign(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height\n  });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n  const swiper = this;\n\n  function getDirectionLabel(property) {\n    if (swiper.isHorizontal()) {\n      return property;\n    } // prettier-ignore\n\n\n    return {\n      'width': 'height',\n      'margin-top': 'margin-left',\n      'margin-bottom ': 'margin-right',\n      'margin-left': 'margin-top',\n      'margin-right': 'margin-bottom',\n      'padding-left': 'padding-top',\n      'padding-right': 'padding-bottom',\n      'marginRight': 'marginBottom'\n    }[property];\n  }\n\n  function getDirectionPropertyValue(node, label) {\n    return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n  }\n\n  const params = swiper.params;\n  const {\n    $wrapperEl,\n    size: swiperSize,\n    rtlTranslate: rtl,\n    wrongRTL\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n  let offsetBefore = params.slidesOffsetBefore;\n\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n\n  let offsetAfter = params.slidesOffsetAfter;\n\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.slidesGrid.length;\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n  }\n\n  swiper.virtualSize = -spaceBetween; // reset margins\n\n  if (rtl) slides.css({\n    marginLeft: '',\n    marginBottom: '',\n    marginTop: ''\n  });else slides.css({\n    marginRight: '',\n    marginBottom: '',\n    marginTop: ''\n  }); // reset cssMode offsets\n\n  if (params.centeredSlides && params.cssMode) {\n    setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n    setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n  }\n\n  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n  if (gridEnabled) {\n    swiper.grid.initSlides(slidesLength);\n  } // Calc slides\n\n\n  let slideSize;\n  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n    return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n  }).length > 0;\n\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    const slide = slides.eq(i);\n\n    if (gridEnabled) {\n      swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n    }\n\n    if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      if (shouldResetSlideSize) {\n        slides[i].style[getDirectionLabel('width')] = ``;\n      }\n\n      const slideStyles = getComputedStyle(slide[0]);\n      const currentTransform = slide[0].style.transform;\n      const currentWebKitTransform = slide[0].style.webkitTransform;\n\n      if (currentTransform) {\n        slide[0].style.transform = 'none';\n      }\n\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = 'none';\n      }\n\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n      } else {\n        // eslint-disable-next-line\n        const width = getDirectionPropertyValue(slideStyles, 'width');\n        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n        const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n        if (boxSizing && boxSizing === 'border-box') {\n          slideSize = width + marginLeft + marginRight;\n        } else {\n          const {\n            clientWidth,\n            offsetWidth\n          } = slide[0];\n          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n        }\n      }\n\n      if (currentTransform) {\n        slide[0].style.transform = currentTransform;\n      }\n\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = currentWebKitTransform;\n      }\n\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n      if (slides[i]) {\n        slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n      }\n    }\n\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n\n    slidesSizesGrid.push(slideSize);\n\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n\n    swiper.virtualSize += slideSize + spaceBetween;\n    prevSlideSize = slideSize;\n    index += 1;\n  }\n\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    $wrapperEl.css({\n      width: `${swiper.virtualSize + params.spaceBetween}px`\n    });\n  }\n\n  if (params.setWrapperSize) {\n    $wrapperEl.css({\n      [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n    });\n  }\n\n  if (gridEnabled) {\n    swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n  } // Remove last grid elements depending on width\n\n\n  if (!params.centeredSlides) {\n    const newSlidesGrid = [];\n\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n\n    snapGrid = newSlidesGrid;\n\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n\n  if (snapGrid.length === 0) snapGrid = [0];\n\n  if (params.spaceBetween !== 0) {\n    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n    slides.filter((_, slideIndex) => {\n      if (!params.cssMode) return true;\n\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n\n      return true;\n    }).css({\n      [key]: `${spaceBetween}px`\n    });\n  }\n\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    const maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map(snap => {\n      if (snap < 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n\n    if (allSlidesSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n\n  Object.assign(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid\n  });\n\n  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n    setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n    setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n    const addToSnapGrid = -swiper.snapGrid[0];\n    const addToSlidesGrid = -swiper.slidesGrid[0];\n    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n  }\n\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n}","export default function updateAutoHeight(speed) {\n  const swiper = this;\n  const activeSlides = [];\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  let newHeight = 0;\n  let i;\n\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n\n  const getSlideByIndex = index => {\n    if (isVirtual) {\n      return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n    }\n\n    return swiper.slides.eq(index)[0];\n  }; // Find slides currently in view\n\n\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      swiper.visibleSlides.each(slide => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length && !isVirtual) break;\n        activeSlides.push(getSlideByIndex(index));\n      }\n    }\n  } else {\n    activeSlides.push(getSlideByIndex(swiper.activeIndex));\n  } // Find new height from highest slide in view\n\n\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  } // Update Height\n\n\n  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n  const swiper = this;\n  const slides = swiper.slides;\n\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n  }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n  const swiper = this;\n  const params = swiper.params;\n  const {\n    slides,\n    rtlTranslate: rtl,\n    snapGrid\n  } = swiper;\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate; // Visible Slides\n\n  slides.removeClass(params.slideVisibleClass);\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    let slideOffset = slide.swiperSlideOffset;\n\n    if (params.cssMode && params.centeredSlides) {\n      slideOffset -= slides[0].swiperSlideOffset;\n    }\n\n    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n    const slideBefore = -(offsetCenter - slideOffset);\n    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n    if (isVisible) {\n      swiper.visibleSlides.push(slide);\n      swiper.visibleSlidesIndexes.push(i);\n      slides.eq(i).addClass(params.slideVisibleClass);\n    }\n\n    slide.progress = rtl ? -slideProgress : slideProgress;\n    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n  }\n\n  swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n  const swiper = this;\n\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n  }\n\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let {\n    progress,\n    isBeginning,\n    isEnd\n  } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / translatesDiff;\n    isBeginning = progress <= 0;\n    isEnd = progress >= 1;\n  }\n\n  Object.assign(swiper, {\n    progress,\n    isBeginning,\n    isEnd\n  });\n  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n\n  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n    swiper.emit('fromEdge');\n  }\n\n  swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n  const swiper = this;\n  const {\n    slides,\n    params,\n    $wrapperEl,\n    activeIndex,\n    realIndex\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n  let activeSlide;\n\n  if (isVirtual) {\n    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n  } else {\n    activeSlide = slides.eq(activeIndex);\n  } // Active classes\n\n\n  activeSlide.addClass(params.slideActiveClass);\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (activeSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n    } else {\n      $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n    }\n  } // Next Slide\n\n\n  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n  if (params.loop && nextSlide.length === 0) {\n    nextSlide = slides.eq(0);\n    nextSlide.addClass(params.slideNextClass);\n  } // Prev Slide\n\n\n  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n  if (params.loop && prevSlide.length === 0) {\n    prevSlide = slides.eq(-1);\n    prevSlide.addClass(params.slidePrevClass);\n  }\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (nextSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n    } else {\n      $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n    }\n\n    if (prevSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n    } else {\n      $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n    }\n  }\n\n  swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    slidesGrid,\n    snapGrid,\n    params,\n    activeIndex: previousIndex,\n    realIndex: previousRealIndex,\n    snapIndex: previousSnapIndex\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n\n  if (typeof activeIndex === 'undefined') {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n          activeIndex = i;\n        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n          activeIndex = i + 1;\n        }\n      } else if (translate >= slidesGrid[i]) {\n        activeIndex = i;\n      }\n    } // Normalize slideIndex\n\n\n    if (params.normalizeSlideIndex) {\n      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n    }\n  }\n\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if (activeIndex === previousIndex) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n\n    return;\n  } // Get real index\n\n\n  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n  Object.assign(swiper, {\n    snapIndex,\n    realIndex,\n    previousIndex,\n    activeIndex\n  });\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n\n  if (previousRealIndex !== realIndex) {\n    swiper.emit('realIndexChange');\n  }\n\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    swiper.emit('slideChange');\n  }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n  const swiper = this;\n  const params = swiper.params;\n  const slide = $(e).closest(`.${params.slideClass}`)[0];\n  let slideFound = false;\n  let slideIndex;\n\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) {\n        slideFound = true;\n        slideIndex = i;\n        break;\n      }\n    }\n  }\n\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = slideIndex;\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}","export default function transitionEmit({\n  swiper,\n  runCallbacks,\n  direction,\n  step\n}) {\n  const {\n    activeIndex,\n    previousIndex\n  } = swiper;\n  let dir = direction;\n\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n  }\n\n  swiper.emit(`transition${step}`);\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit(`slideResetTransition${step}`);\n      return;\n    }\n\n    swiper.emit(`slideChangeTransition${step}`);\n\n    if (dir === 'next') {\n      swiper.emit(`slideNextTransition${step}`);\n    } else {\n      swiper.emit(`slidePrevTransition${step}`);\n    }\n  }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n  if (typeof index !== 'number' && typeof index !== 'string') {\n    throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n  }\n\n  if (typeof index === 'string') {\n    /**\n     * The `index` argument converted from `string` to `number`.\n     * @type {number}\n     */\n    const indexAsNumber = parseInt(index, 10);\n    /**\n     * Determines whether the `index` argument is a valid `number`\n     * after being converted from the `string` type.\n     * @type {boolean}\n     */\n\n    const isValidNumber = isFinite(indexAsNumber);\n\n    if (!isValidNumber) {\n      throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n    } // Knowing that the converted `index` is a valid number,\n    // we can update the original argument's value.\n\n\n    index = indexAsNumber;\n  }\n\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    previousIndex,\n    activeIndex,\n    rtlTranslate: rtl,\n    wrapperEl,\n    enabled\n  } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n    return false;\n  }\n\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  const translate = -snapGrid[snapIndex]; // Update progress\n\n  swiper.updateProgress(translate); // Normalize slideIndex\n\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      const normalizedTranslate = -Math.floor(translate * 100);\n      const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n          slideIndex = i;\n        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n          slideIndex = i + 1;\n        }\n      } else if (normalizedTranslate >= normalizedGrid) {\n        slideIndex = i;\n      }\n    }\n  } // Directions locks\n\n\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n      return false;\n    }\n\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) return false;\n    }\n  }\n\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n  if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n    swiper.updateActiveIndex(slideIndex); // Update Height\n\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n\n    swiper.updateSlidesClasses();\n\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n\n    return false;\n  }\n\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    const t = rtl ? translate : -translate;\n\n    if (speed === 0) {\n      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n      if (isVirtual) {\n        swiper.wrapperEl.style.scrollSnapType = 'none';\n        swiper._immediateVirtual = true;\n      }\n\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n      if (isVirtual) {\n        requestAnimationFrame(() => {\n          swiper.wrapperEl.style.scrollSnapType = '';\n          swiper._swiperImmediateVirtual = false;\n        });\n      }\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: t,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: t,\n        behavior: 'smooth'\n      });\n    }\n\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    swiper.transitionEnd(runCallbacks, direction);\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n\n    if (!swiper.animating) {\n      swiper.animating = true;\n\n      if (!swiper.onSlideToWrapperTransitionEnd) {\n        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n          swiper.onSlideToWrapperTransitionEnd = null;\n          delete swiper.onSlideToWrapperTransitionEnd;\n          swiper.transitionEnd(runCallbacks, direction);\n        };\n      }\n\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let newIndex = index;\n\n  if (swiper.params.loop) {\n    newIndex += swiper.loopedSlides;\n  }\n\n  return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    animating,\n    enabled,\n    params\n  } = swiper;\n  if (!enabled) return swiper;\n  let perGroup = params.slidesPerGroup;\n\n  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n  }\n\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n  if (params.loop) {\n    if (animating && params.loopPreventsSlide) return false;\n    swiper.loopFix(); // eslint-disable-next-line\n\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    params,\n    animating,\n    snapGrid,\n    slidesGrid,\n    rtlTranslate,\n    enabled\n  } = swiper;\n  if (!enabled) return swiper;\n\n  if (params.loop) {\n    if (animating && params.loopPreventsSlide) return false;\n    swiper.loopFix(); // eslint-disable-next-line\n\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    let prevSnapIndex;\n    snapGrid.forEach((snap, snapIndex) => {\n      if (normalizedTranslate >= snap) {\n        // prevSnap = snap;\n        prevSnapIndex = snapIndex;\n      }\n    });\n\n    if (typeof prevSnapIndex !== 'undefined') {\n      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n    }\n  }\n\n  let prevIndex = 0;\n\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n      prevIndex = Math.max(prevIndex, 0);\n    }\n  }\n\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n  const swiper = this;\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n\n    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n  const swiper = this;\n  const {\n    params,\n    $wrapperEl\n  } = swiper;\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n    if (params.centeredSlides) {\n      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n        nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n      nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n  loopCreate,\n  loopFix,\n  loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n  const swiper = this;\n  const document = getDocument();\n  const {\n    params,\n    $wrapperEl\n  } = swiper; // Remove duplicated slides\n\n  const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n  $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n  let slides = $selector.children(`.${params.slideClass}`);\n\n  if (params.loopFillGroupWithBlank) {\n    const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n    if (blankSlidesNum !== params.slidesPerGroup) {\n      for (let i = 0; i < blankSlidesNum; i += 1) {\n        const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n        $selector.append(blankNode);\n      }\n\n      slides = $selector.children(`.${params.slideClass}`);\n    }\n  }\n\n  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n  swiper.loopedSlides += params.loopAdditionalSlides;\n\n  if (swiper.loopedSlides > slides.length) {\n    swiper.loopedSlides = slides.length;\n  }\n\n  const prependSlides = [];\n  const appendSlides = [];\n  slides.each((el, index) => {\n    const slide = $(el);\n\n    if (index < swiper.loopedSlides) {\n      appendSlides.push(el);\n    }\n\n    if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n      prependSlides.push(el);\n    }\n\n    slide.attr('data-swiper-slide-index', index);\n  });\n\n  for (let i = 0; i < appendSlides.length; i += 1) {\n    $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n\n  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n    $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n}","export default function loopFix() {\n  const swiper = this;\n  swiper.emit('beforeLoopFix');\n  const {\n    activeIndex,\n    slides,\n    loopedSlides,\n    allowSlidePrev,\n    allowSlideNext,\n    snapGrid,\n    rtlTranslate: rtl\n  } = swiper;\n  let newIndex;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n  const snapTranslate = -snapGrid[activeIndex];\n  const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n  if (activeIndex < loopedSlides) {\n    newIndex = slides.length - loopedSlides * 3 + activeIndex;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  } else if (activeIndex >= slides.length - loopedSlides) {\n    // Fix For Positive Oversliding\n    newIndex = -slides.length + activeIndex + loopedSlides;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  }\n\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  swiper.emit('loopFix');\n}","export default function loopDestroy() {\n  const swiper = this;\n  const {\n    $wrapperEl,\n    params,\n    slides\n  } = swiper;\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n  slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n  function __closestFrom(el) {\n    if (!el || el === getDocument() || el === getWindow()) return null;\n    if (el.assignedSlot) el = el.assignedSlot;\n    const found = el.closest(selector);\n    return found || __closestFrom(el.getRootNode().host);\n  }\n\n  return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n  const swiper = this;\n  const document = getDocument();\n  const window = getWindow();\n  const data = swiper.touchEventsData;\n  const {\n    params,\n    touches,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n\n  if (!swiper.animating && params.cssMode && params.loop) {\n    swiper.loopFix();\n  }\n\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  let $targetEl = $(e.target);\n\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!$targetEl.closest(swiper.wrapperEl).length) return;\n  }\n\n  data.isTouchEvent = e.type === 'touchstart';\n  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n  if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n    $targetEl = $(event.path[0]);\n  }\n\n  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n  const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n    swiper.allowClick = true;\n    return;\n  }\n\n  if (params.swipeHandler) {\n    if (!$targetEl.closest(params.swipeHandler)[0]) return;\n  }\n\n  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n    if (edgeSwipeDetection === 'prevent') {\n      event.preventDefault();\n    } else {\n      return;\n    }\n  }\n\n  Object.assign(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined\n  });\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n\n  if (e.type !== 'touchstart') {\n    let preventDefault = true;\n    if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n    if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n      document.activeElement.blur();\n    }\n\n    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n    if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n      e.preventDefault();\n    }\n  }\n\n  swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n  const document = getDocument();\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n\n    return;\n  }\n\n  if (data.isTouchEvent && e.type !== 'touchmove') return;\n  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n\n  if (!swiper.allowTouchMove) {\n    // isMoved = true;\n    swiper.allowClick = false;\n\n    if (data.isTouched) {\n      Object.assign(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY\n      });\n      data.touchStartTime = now();\n    }\n\n    return;\n  }\n\n  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n      return;\n    }\n  }\n\n  if (data.isTouchEvent && document.activeElement) {\n    if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n\n  if (e.targetTouches && e.targetTouches.length > 1) return;\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if (diffX * diffX + diffY * diffY >= 25) {\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n      }\n    }\n  }\n\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n\n  if (data.isScrolling) {\n    data.isTouched = false;\n    return;\n  }\n\n  if (!data.startMoving) {\n    return;\n  }\n\n  swiper.allowClick = false;\n\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n\n  if (!data.isMoved) {\n    if (params.loop && !params.cssMode) {\n      swiper.loopFix();\n    }\n\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n\n    if (swiper.animating) {\n      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n    }\n\n    data.allowMomentumBounce = false; // Grab Cursor\n\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n\n    swiper.emit('sliderFirstMove', e);\n  }\n\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  touches.diff = diff;\n  diff *= params.touchRatio;\n  if (rtl) diff = -diff;\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  data.currentTranslate = diff + data.startTranslate;\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n\n  if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n  }\n\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  } // Directions locks\n\n\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n    data.currentTranslate = data.startTranslate;\n  } // Threshold\n\n\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n\n  if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n\n  if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n    swiper.freeMode.onTouchMove();\n  } // Update progress\n\n\n  swiper.updateProgress(data.currentTranslate); // Update translate\n\n  swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    slidesGrid,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n\n  data.allowTouchCallbacks = false;\n\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  } // Return Grab Cursor\n\n\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  } // Time diff\n\n\n  const touchEndTime = now();\n  const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n  if (swiper.allowClick) {\n    const pathTree = e.path || e.composedPath && e.composedPath();\n    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n    swiper.emit('tap click', e);\n\n    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n\n  data.lastClickTime = now();\n  nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n  let currentPos;\n\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n\n  if (params.cssMode) {\n    return;\n  }\n\n  if (swiper.params.freeMode && params.freeMode.enabled) {\n    swiper.freeMode.onTouchEnd({\n      currentPos\n    });\n    return;\n  } // Find current slide\n\n\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n\n  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  } // Find current slide size\n\n\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(stopIndex + increment);\n      }\n\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}","export default function onResize() {\n  const swiper = this;\n  const {\n    params,\n    el\n  } = swiper;\n  if (el && el.offsetWidth === 0) return; // Breakpoints\n\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  } // Save locks\n\n\n  const {\n    allowSlideNext,\n    allowSlidePrev,\n    snapGrid\n  } = swiper; // Disable locks on resize\n\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n  swiper.updateSize();\n  swiper.updateSlides();\n  swiper.updateSlidesClasses();\n\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    swiper.slideTo(swiper.activeIndex, 0, false, true);\n  }\n\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    swiper.autoplay.run();\n  } // Return locks after resize\n\n\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}","export default function onClick(e) {\n  const swiper = this;\n  if (!swiper.enabled) return;\n\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}","export default function onScroll() {\n  const swiper = this;\n  const {\n    wrapperEl,\n    rtlTranslate,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  swiper.previousTranslate = swiper.translate;\n\n  if (swiper.isHorizontal()) {\n    swiper.translate = -wrapperEl.scrollLeft;\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  } // eslint-disable-next-line\n\n\n  if (swiper.translate === -0) swiper.translate = 0;\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n  }\n\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n  const document = getDocument();\n  const {\n    params,\n    touchEvents,\n    el,\n    wrapperEl,\n    device,\n    support\n  } = swiper;\n  const capture = !!params.nested;\n  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n  const swiperMethod = method; // Touch Events\n\n  if (!support.touch) {\n    el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n    document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n    document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n    el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n      passive: false,\n      capture\n    } : capture);\n    el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n    if (touchEvents.cancel) {\n      el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n    }\n  } // Prevent Links Clicks\n\n\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el[domMethod]('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl[domMethod]('scroll', swiper.onScroll);\n  } // Resize handler\n\n\n  if (params.updateOnWindowResize) {\n    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n  } else {\n    swiper[swiperMethod]('observerUpdate', onResize, true);\n  }\n};\n\nfunction attachEvents() {\n  const swiper = this;\n  const document = getDocument();\n  const {\n    params,\n    support\n  } = swiper;\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n\n  swiper.onClick = onClick.bind(swiper);\n\n  if (support.touch && !dummyEventAttached) {\n    document.addEventListener('touchstart', dummyEventListener);\n    dummyEventAttached = true;\n  }\n\n  events(swiper, 'on');\n}\n\nfunction detachEvents() {\n  const swiper = this;\n  events(swiper, 'off');\n}\n\nexport default {\n  attachEvents,\n  detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n  return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n  const swiper = this;\n  const {\n    activeIndex,\n    initialized,\n    loopedSlides = 0,\n    params,\n    $el\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n  const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n  const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n  const wasMultiRow = isGridEnabled(swiper, params);\n  const isMultiRow = isGridEnabled(swiper, breakpointParams);\n  const wasEnabled = params.enabled;\n\n  if (wasMultiRow && !isMultiRow) {\n    $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n    swiper.emitContainerClasses();\n  } else if (!wasMultiRow && isMultiRow) {\n    $el.addClass(`${params.containerModifierClass}grid`);\n\n    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n      $el.addClass(`${params.containerModifierClass}grid-column`);\n    }\n\n    swiper.emitContainerClasses();\n  }\n\n  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n  if (directionChanged && initialized) {\n    swiper.changeDirection();\n  }\n\n  extend(swiper.params, breakpointParams);\n  const isEnabled = swiper.params.enabled;\n  Object.assign(swiper, {\n    allowTouchMove: swiper.params.allowTouchMove,\n    allowSlideNext: swiper.params.allowSlideNext,\n    allowSlidePrev: swiper.params.allowSlidePrev\n  });\n\n  if (wasEnabled && !isEnabled) {\n    swiper.disable();\n  } else if (!wasEnabled && isEnabled) {\n    swiper.enable();\n  }\n\n  swiper.currentBreakpoint = breakpoint;\n  swiper.emit('_beforeBreakpoint', breakpointParams);\n\n  if (needsReLoop && initialized) {\n    swiper.loopDestroy();\n    swiper.loopCreate();\n    swiper.updateSlides();\n    swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n  }\n\n  swiper.emit('breakpoint', breakpointParams);\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n  addClasses,\n  removeClasses\n};","function prepareClasses(entries, prefix) {\n  const resultClasses = [];\n  entries.forEach(item => {\n    if (typeof item === 'object') {\n      Object.keys(item).forEach(classNames => {\n        if (item[classNames]) {\n          resultClasses.push(prefix + classNames);\n        }\n      });\n    } else if (typeof item === 'string') {\n      resultClasses.push(prefix + item);\n    }\n  });\n  return resultClasses;\n}\n\nexport default function addClasses() {\n  const swiper = this;\n  const {\n    classNames,\n    params,\n    rtl,\n    $el,\n    device,\n    support\n  } = swiper; // prettier-ignore\n\n  const suffixes = prepareClasses(['initialized', params.direction, {\n    'pointer-events': !support.touch\n  }, {\n    'free-mode': swiper.params.freeMode && params.freeMode.enabled\n  }, {\n    'autoheight': params.autoHeight\n  }, {\n    'rtl': rtl\n  }, {\n    'grid': params.grid && params.grid.rows > 1\n  }, {\n    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n  }, {\n    'android': device.android\n  }, {\n    'ios': device.ios\n  }, {\n    'css-mode': params.cssMode\n  }, {\n    'centered': params.cssMode && params.centeredSlides\n  }], params.containerModifierClass);\n  classNames.push(...suffixes);\n  $el.addClass([...classNames].join(' '));\n  swiper.emitContainerClasses();\n}","export default function removeClasses() {\n  const swiper = this;\n  const {\n    $el,\n    classNames\n  } = swiper;\n  $el.removeClass(classNames.join(' '));\n  swiper.emitContainerClasses();\n}","export default {\n  init: true,\n  direction: 'horizontal',\n  touchEventsTarget: 'wrapper',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  resizeObserver: true,\n  nested: false,\n  createElements: false,\n  enabled: true,\n  focusableElements: 'input, select, option, textarea, button, video, label',\n  // Overrides\n  width: null,\n  height: null,\n  //\n  preventInteractionOnTransition: false,\n  // ssr\n  userAgent: null,\n  url: null,\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n  // Autoheight\n  autoHeight: false,\n  // Set wrapper width\n  setWrapperSize: false,\n  // Virtual Translate\n  virtualTranslate: false,\n  // Effects\n  effect: 'slide',\n  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n  // Breakpoints\n  breakpoints: undefined,\n  breakpointsBase: 'window',\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  slidesPerGroupAuto: false,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0,\n  // in px\n  slidesOffsetAfter: 0,\n  // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: true,\n  // Round length\n  roundLengths: false,\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 0,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n  // Progress\n  watchSlidesProgress: false,\n  // Cursor\n  grabCursor: false,\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n  // Images\n  preloadImages: true,\n  updateOnImagesReady: true,\n  // loop\n  loop: false,\n  loopAdditionalSlides: 0,\n  loopedSlides: null,\n  loopFillGroupWithBlank: false,\n  loopPreventsSlide: true,\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null,\n  // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n  // Passive Listeners\n  passiveListeners: true,\n  // NS\n  containerModifierClass: 'swiper-',\n  // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-invisible-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideDuplicateClass: 'swiper-slide-duplicate',\n  slideNextClass: 'swiper-slide-next',\n  slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n  slidePrevClass: 'swiper-slide-prev',\n  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n  wrapperClass: 'swiper-wrapper',\n  // Callbacks\n  runCallbacksOnInit: true,\n  // Internals\n  _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n  return function extendParams(obj = {}) {\n    const moduleParamName = Object.keys(obj)[0];\n    const moduleParams = obj[moduleParamName];\n\n    if (typeof moduleParams !== 'object' || moduleParams === null) {\n      extend(allModulesParams, obj);\n      return;\n    }\n\n    if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n      params[moduleParamName] = {\n        auto: true\n      };\n    }\n\n    if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n      extend(allModulesParams, obj);\n      return;\n    }\n\n    if (params[moduleParamName] === true) {\n      params[moduleParamName] = {\n        enabled: true\n      };\n    }\n\n    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n      params[moduleParamName].enabled = true;\n    }\n\n    if (!params[moduleParamName]) params[moduleParamName] = {\n      enabled: false\n    };\n    extend(allModulesParams, obj);\n  };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n  eventsEmitter,\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  events,\n  breakpoints,\n  checkOverflow,\n  classes,\n  images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n  constructor(...args) {\n    let el;\n    let params;\n\n    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n\n    if (!params) params = {};\n    params = extend({}, params);\n    if (el && !params.el) params.el = el;\n\n    if (params.el && $(params.el).length > 1) {\n      const swipers = [];\n      $(params.el).each(containerEl => {\n        const newParams = extend({}, params, {\n          el: containerEl\n        });\n        swipers.push(new Swiper(newParams));\n      });\n      return swipers;\n    } // Swiper Instance\n\n\n    const swiper = this;\n    swiper.__swiper__ = true;\n    swiper.support = getSupport();\n    swiper.device = getDevice({\n      userAgent: params.userAgent\n    });\n    swiper.browser = getBrowser();\n    swiper.eventsListeners = {};\n    swiper.eventsAnyListeners = [];\n    swiper.modules = [...swiper.__modules__];\n\n    if (params.modules && Array.isArray(params.modules)) {\n      swiper.modules.push(...params.modules);\n    }\n\n    const allModulesParams = {};\n    swiper.modules.forEach(mod => {\n      mod({\n        swiper,\n        extendParams: moduleExtendParams(params, allModulesParams),\n        on: swiper.on.bind(swiper),\n        once: swiper.once.bind(swiper),\n        off: swiper.off.bind(swiper),\n        emit: swiper.emit.bind(swiper)\n      });\n    }); // Extend defaults with modules params\n\n    const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n    swiper.params = extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = extend({}, swiper.params);\n    swiper.passedParams = extend({}, params); // add event listeners\n\n    if (swiper.params && swiper.params.on) {\n      Object.keys(swiper.params.on).forEach(eventName => {\n        swiper.on(eventName, swiper.params.on[eventName]);\n      });\n    }\n\n    if (swiper.params && swiper.params.onAny) {\n      swiper.onAny(swiper.params.onAny);\n    } // Save Dom lib\n\n\n    swiper.$ = $; // Extend Swiper\n\n    Object.assign(swiper, {\n      enabled: swiper.params.enabled,\n      el,\n      // Classes\n      classNames: [],\n      // Slides\n      slides: $(),\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n      //\n      isBeginning: true,\n      isEnd: false,\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n      // Touch Events\n      touchEvents: function touchEvents() {\n        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n        const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n        swiper.touchEventsTouch = {\n          start: touch[0],\n          move: touch[1],\n          end: touch[2],\n          cancel: touch[3]\n        };\n        swiper.touchEventsDesktop = {\n          start: desktop[0],\n          move: desktop[1],\n          end: desktop[2]\n        };\n        return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n      }(),\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        focusableElements: swiper.params.focusableElements,\n        // Last click time\n        lastClickTime: now(),\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        isTouchEvent: undefined,\n        startMoving: undefined\n      },\n      // Clicks\n      allowClick: true,\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0\n      },\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0\n    });\n    swiper.emit('_swiper'); // Init\n\n    if (swiper.params.init) {\n      swiper.init();\n    } // Return app instance\n\n\n    return swiper;\n  }\n\n  enable() {\n    const swiper = this;\n    if (swiper.enabled) return;\n    swiper.enabled = true;\n\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n\n    swiper.emit('enable');\n  }\n\n  disable() {\n    const swiper = this;\n    if (!swiper.enabled) return;\n    swiper.enabled = false;\n\n    if (swiper.params.grabCursor) {\n      swiper.unsetGrabCursor();\n    }\n\n    swiper.emit('disable');\n  }\n\n  setProgress(progress, speed) {\n    const swiper = this;\n    progress = Math.min(Math.max(progress, 0), 1);\n    const min = swiper.minTranslate();\n    const max = swiper.maxTranslate();\n    const current = (max - min) * progress + min;\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n\n  emitContainerClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const cls = swiper.el.className.split(' ').filter(className => {\n      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', cls.join(' '));\n  }\n\n  getSlideClasses(slideEl) {\n    const swiper = this;\n    return slideEl.className.split(' ').filter(className => {\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n    }).join(' ');\n  }\n\n  emitSlidesClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const updates = [];\n    swiper.slides.each(slideEl => {\n      const classNames = swiper.getSlideClasses(slideEl);\n      updates.push({\n        slideEl,\n        classNames\n      });\n      swiper.emit('_slideClass', slideEl, classNames);\n    });\n    swiper.emit('_slideClasses', updates);\n  }\n\n  slidesPerViewDynamic(view = 'current', exact = false) {\n    const swiper = this;\n    const {\n      params,\n      slides,\n      slidesGrid,\n      slidesSizesGrid,\n      size: swiperSize,\n      activeIndex\n    } = swiper;\n    let spv = 1;\n\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex].swiperSlideSize;\n      let breakLoop;\n\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      // eslint-disable-next-line\n      if (view === 'current') {\n        for (let i = activeIndex + 1; i < slides.length; i += 1) {\n          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      } else {\n        // previous\n        for (let i = activeIndex - 1; i >= 0; i -= 1) {\n          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      }\n    }\n\n    return spv;\n  }\n\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const {\n      snapGrid,\n      params\n    } = swiper; // Breakpoints\n\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n\n    let translated;\n\n    if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n      setTranslate();\n\n      if (swiper.params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n\n      if (!translated) {\n        setTranslate();\n      }\n    }\n\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n\n    swiper.emit('update');\n  }\n\n  changeDirection(newDirection, needUpdate = true) {\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n\n    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n      return swiper;\n    }\n\n    swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n    swiper.emitContainerClasses();\n    swiper.params.direction = newDirection;\n    swiper.slides.each(slideEl => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n    return swiper;\n  }\n\n  mount(el) {\n    const swiper = this;\n    if (swiper.mounted) return true; // Find el\n\n    const $el = $(el || swiper.params.el);\n    el = $el[0];\n\n    if (!el) {\n      return false;\n    }\n\n    el.swiper = swiper;\n\n    const getWrapperSelector = () => {\n      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n    };\n\n    const getWrapper = () => {\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n        res.children = options => $el.children(options);\n\n        return res;\n      }\n\n      return $el.children(getWrapperSelector());\n    }; // Find Wrapper\n\n\n    let $wrapperEl = getWrapper();\n\n    if ($wrapperEl.length === 0 && swiper.params.createElements) {\n      const document = getDocument();\n      const wrapper = document.createElement('div');\n      $wrapperEl = $(wrapper);\n      wrapper.className = swiper.params.wrapperClass;\n      $el.append(wrapper);\n      $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n        $wrapperEl.append(slideEl);\n      });\n    }\n\n    Object.assign(swiper, {\n      $el,\n      el,\n      $wrapperEl,\n      wrapperEl: $wrapperEl[0],\n      mounted: true,\n      // RTL\n      rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n    });\n    return true;\n  }\n\n  init(el) {\n    const swiper = this;\n    if (swiper.initialized) return swiper;\n    const mounted = swiper.mount(el);\n    if (mounted === false) return swiper;\n    swiper.emit('beforeInit'); // Set breakpoint\n\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    } // Add Classes\n\n\n    swiper.addClasses(); // Create loop\n\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    } // Update size\n\n\n    swiper.updateSize(); // Update slides\n\n    swiper.updateSlides();\n\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    } // Set Grab Cursor\n\n\n    if (swiper.params.grabCursor && swiper.enabled) {\n      swiper.setGrabCursor();\n    }\n\n    if (swiper.params.preloadImages) {\n      swiper.preloadImages();\n    } // Slide To Initial Slide\n\n\n    if (swiper.params.loop) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n    } // Attach events\n\n\n    swiper.attachEvents(); // Init Flag\n\n    swiper.initialized = true; // Emit\n\n    swiper.emit('init');\n    swiper.emit('afterInit');\n    return swiper;\n  }\n\n  destroy(deleteInstance = true, cleanStyles = true) {\n    const swiper = this;\n    const {\n      params,\n      $el,\n      $wrapperEl,\n      slides\n    } = swiper;\n\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n\n    swiper.emit('beforeDestroy'); // Init Flag\n\n    swiper.initialized = false; // Detach events\n\n    swiper.detachEvents(); // Destroy loop\n\n    if (params.loop) {\n      swiper.loopDestroy();\n    } // Cleanup styles\n\n\n    if (cleanStyles) {\n      swiper.removeClasses();\n      $el.removeAttr('style');\n      $wrapperEl.removeAttr('style');\n\n      if (slides && slides.length) {\n        slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n      }\n    }\n\n    swiper.emit('destroy'); // Detach emitter events\n\n    Object.keys(swiper.eventsListeners).forEach(eventName => {\n      swiper.off(eventName);\n    });\n\n    if (deleteInstance !== false) {\n      swiper.$el[0].swiper = null;\n      deleteProps(swiper);\n    }\n\n    swiper.destroyed = true;\n    return null;\n  }\n\n  static extendDefaults(newDefaults) {\n    extend(extendedDefaults, newDefaults);\n  }\n\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n\n  static get defaults() {\n    return defaults;\n  }\n\n  static installModule(mod) {\n    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n    const modules = Swiper.prototype.__modules__;\n\n    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n      modules.push(mod);\n    }\n  }\n\n  static use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(m => Swiper.installModule(m));\n      return Swiper;\n    }\n\n    Swiper.installModule(module);\n    return Swiper;\n  }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n  });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n  getTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n  const swiper = this;\n  const {\n    params,\n    rtlTranslate: rtl,\n    translate,\n    $wrapperEl\n  } = swiper;\n\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n\n  if (params.cssMode) {\n    return translate;\n  }\n\n  let currentTranslate = getTranslate($wrapperEl[0], axis);\n  if (rtl) currentTranslate = -currentTranslate;\n  return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl,\n    params,\n    $wrapperEl,\n    wrapperEl,\n    progress\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n  }\n\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n  }\n\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n  return -this.snapGrid[0];\n}","export default function maxTranslate() {\n  return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n  const swiper = this;\n  const {\n    params,\n    wrapperEl\n  } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n  swiper.updateProgress(newTranslate);\n\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: -newTranslate,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: -newTranslate,\n        behavior: 'smooth'\n      });\n    }\n\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n\n    if (!swiper.animating) {\n      swiper.animating = true;\n\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n  setTransition,\n  transitionStart,\n  transitionEnd\n};","export default function setTransition(duration, byController) {\n  const swiper = this;\n\n  if (!swiper.params.cssMode) {\n    swiper.$wrapperEl.transition(duration);\n  }\n\n  swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  if (params.cssMode) return;\n\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'Start'\n  });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'End'\n  });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n  setGrabCursor,\n  unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n  const swiper = this;\n  if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n  const swiper = this;\n\n  if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n\n  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n  setBreakpoint,\n  getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n  if (!breakpoints || base === 'container' && !containerEl) return undefined;\n  let breakpoint = false;\n  const window = getWindow();\n  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n  const points = Object.keys(breakpoints).map(point => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = currentHeight * minRatio;\n      return {\n        value,\n        point\n      };\n    }\n\n    return {\n      value: point,\n      point\n    };\n  });\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n  for (let i = 0; i < points.length; i += 1) {\n    const {\n      point,\n      value\n    } = points[i];\n\n    if (base === 'window') {\n      if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n        breakpoint = point;\n      }\n    } else if (value <= containerEl.clientWidth) {\n      breakpoint = point;\n    }\n  }\n\n  return breakpoint || 'max';\n}","function checkOverflow() {\n  const swiper = this;\n  const {\n    isLocked: wasLocked,\n    params\n  } = swiper;\n  const {\n    slidesOffsetBefore\n  } = params;\n\n  if (slidesOffsetBefore) {\n    const lastSlideIndex = swiper.slides.length - 1;\n    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n    swiper.isLocked = swiper.size > lastSlideRightEdge;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n\n  if (params.allowSlideNext === true) {\n    swiper.allowSlideNext = !swiper.isLocked;\n  }\n\n  if (params.allowSlidePrev === true) {\n    swiper.allowSlidePrev = !swiper.isLocked;\n  }\n\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n  }\n\n  if (wasLocked !== swiper.isLocked) {\n    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n  }\n}\n\nexport default {\n  checkOverflow\n};","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n  loadImage,\n  preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n  const window = getWindow();\n  let image;\n\n  function onReady() {\n    if (callback) callback();\n  }\n\n  const isPicture = $(imageEl).parent('picture')[0];\n\n  if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n    if (src) {\n      image = new window.Image();\n      image.onload = onReady;\n      image.onerror = onReady;\n\n      if (sizes) {\n        image.sizes = sizes;\n      }\n\n      if (srcset) {\n        image.srcset = srcset;\n      }\n\n      if (src) {\n        image.src = src;\n      }\n    } else {\n      onReady();\n    }\n  } else {\n    // image already loaded...\n    onReady();\n  }\n}","export default function preloadImages() {\n  const swiper = this;\n  swiper.imagesToLoad = swiper.$el.find('img');\n\n  function onReady() {\n    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n      if (swiper.params.updateOnImagesReady) swiper.update();\n      swiper.emit('imagesReady');\n    }\n  }\n\n  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n    const imageEl = swiper.imagesToLoad[i];\n    swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n  }\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n  swiper,\n  on,\n  emit\n}) {\n  const window = getWindow();\n  let observer = null;\n\n  const resizeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('beforeResize');\n    emit('resize');\n  };\n\n  const createObserver = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    observer = new ResizeObserver(entries => {\n      const {\n        width,\n        height\n      } = swiper;\n      let newWidth = width;\n      let newHeight = height;\n      entries.forEach(({\n        contentBoxSize,\n        contentRect,\n        target\n      }) => {\n        if (target && target !== swiper.el) return;\n        newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n        newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n      });\n\n      if (newWidth !== width || newHeight !== height) {\n        resizeHandler();\n      }\n    });\n    observer.observe(swiper.el);\n  };\n\n  const removeObserver = () => {\n    if (observer && observer.unobserve && swiper.el) {\n      observer.unobserve(swiper.el);\n      observer = null;\n    }\n  };\n\n  const orientationChangeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('orientationchange');\n  };\n\n  on('init', () => {\n    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n      createObserver();\n      return;\n    }\n\n    window.addEventListener('resize', resizeHandler);\n    window.addEventListener('orientationchange', orientationChangeHandler);\n  });\n  on('destroy', () => {\n    removeObserver();\n    window.removeEventListener('resize', resizeHandler);\n    window.removeEventListener('orientationchange', orientationChangeHandler);\n  });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n  swiper,\n  extendParams,\n  on,\n  emit\n}) {\n  const observers = [];\n  const window = getWindow();\n\n  const attach = (target, options = {}) => {\n    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n    const observer = new ObserverFunc(mutations => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (mutations.length === 1) {\n        emit('observerUpdate', mutations[0]);\n        return;\n      }\n\n      const observerUpdate = function observerUpdate() {\n        emit('observerUpdate', mutations[0]);\n      };\n\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n    });\n    observers.push(observer);\n  };\n\n  const init = () => {\n    if (!swiper.params.observer) return;\n\n    if (swiper.params.observeParents) {\n      const containerParents = swiper.$el.parents();\n\n      for (let i = 0; i < containerParents.length; i += 1) {\n        attach(containerParents[i]);\n      }\n    } // Observe container\n\n\n    attach(swiper.$el[0], {\n      childList: swiper.params.observeSlideChildren\n    }); // Observe wrapper\n\n    attach(swiper.$wrapperEl[0], {\n      attributes: false\n    });\n  };\n\n  const destroy = () => {\n    observers.forEach(observer => {\n      observer.disconnect();\n    });\n    observers.splice(0, observers.length);\n  };\n\n  extendParams({\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false\n  });\n  on('init', init);\n  on('destroy', destroy);\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n  const document = getDocument();\n\n  if (swiper.params.createElements) {\n    Object.keys(checkProps).forEach(key => {\n      if (!params[key] && params.auto === true) {\n        let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n        if (!element) {\n          element = document.createElement('div');\n          element.className = checkProps[key];\n          swiper.$el.append(element);\n        }\n\n        params[key] = element;\n        originalParams[key] = element;\n      }\n    });\n  }\n\n  return params;\n}","export default function classesToSelector(classes = '') {\n  return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.')}`;\n}","export default function effectTarget(effectParams, $slideEl) {\n  if (effectParams.transformEl) {\n    return $slideEl.find(effectParams.transformEl).css({\n      'backface-visibility': 'hidden',\n      '-webkit-backface-visibility': 'hidden'\n    });\n  }\n\n  return $slideEl;\n}","/* globals jQuery */\n//https://swiperjs.com/\nimport Swiper, {Navigation, Pagination, EffectFade, Parallax, A11y,} from 'swiper';\n\nSwiper.use([Navigation,Pagination,EffectFade,Parallax,A11y]);\n\n(($) => {\n\n    const swipers = document.querySelectorAll('.swiper');\n    const swiperPagination = document.querySelectorAll('.swiper-pagination');\n\n    swipers.forEach((slider, index) => {\n\n        if( slider.classList.contains('card-swiper') ){\n\n            const cardSwiper = new Swiper(slider, {\n                slidesPerView: 1,\n                spaceBetween: 15,\n                speed: 1000,\n                loop: true,\n                pagination: {\n                    el: swiperPagination[index],\n                    type: \"progressbar\"\n                },\n                navigation: {\n                    nextEl: '.swiper-button-next',\n                    prevEl: '.swiper-button-prev',\n                },\n                breakpoints: {\n                    768: {\n                        slidesPerView: 2,\n                        spaceBetween: 15,\n                    },\n                    1000 : {\n                        slidesPerView: 3,\n                        spaceBetween: 25,\n                    },\n                    // when window width is >= 1200px\n                    1200 : {\n                        slidesPerView: 4,\n                        spaceBetween: 35,\n                    }\n                }\n            });\n        }\n    });\n\n    //MAIN HERO SLIDESHOW\n    const mainSwiper = new Swiper('.js-home-slideshow', {\n        effect: 'fade',\n        loop: true,\n        parallax: true,\n        autoplay:{\n            delay: 7000, //7 seconds per slide\n            disableOnInteraction: false\n        },\n        pagination: {\n            el: '.swiper-pagination',\n            type: 'bullets',\n            hideOnclick: false,\n            clickable: true\n        }\n    });\n\n})(jQuery)","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation({\n  swiper,\n  extendParams,\n  on,\n  emit\n}) {\n  extendParams({\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock'\n    }\n  });\n  swiper.navigation = {\n    nextEl: null,\n    $nextEl: null,\n    prevEl: null,\n    $prevEl: null\n  };\n\n  function getEl(el) {\n    let $el;\n\n    if (el) {\n      $el = $(el);\n\n      if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n        $el = swiper.$el.find(el);\n      }\n    }\n\n    return $el;\n  }\n\n  function toggleEl($el, disabled) {\n    const params = swiper.params.navigation;\n\n    if ($el && $el.length > 0) {\n      $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n      if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n      if (swiper.params.watchOverflow && swiper.enabled) {\n        $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n    }\n  }\n\n  function update() {\n    // Update Navigation Buttons\n    if (swiper.params.loop) return;\n    const {\n      $nextEl,\n      $prevEl\n    } = swiper.navigation;\n    toggleEl($prevEl, swiper.isBeginning);\n    toggleEl($nextEl, swiper.isEnd);\n  }\n\n  function onPrevClick(e) {\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop) return;\n    swiper.slidePrev();\n  }\n\n  function onNextClick(e) {\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop) return;\n    swiper.slideNext();\n  }\n\n  function init() {\n    const params = swiper.params.navigation;\n    swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n      nextEl: 'swiper-button-next',\n      prevEl: 'swiper-button-prev'\n    });\n    if (!(params.nextEl || params.prevEl)) return;\n    const $nextEl = getEl(params.nextEl);\n    const $prevEl = getEl(params.prevEl);\n\n    if ($nextEl && $nextEl.length > 0) {\n      $nextEl.on('click', onNextClick);\n    }\n\n    if ($prevEl && $prevEl.length > 0) {\n      $prevEl.on('click', onPrevClick);\n    }\n\n    Object.assign(swiper.navigation, {\n      $nextEl,\n      nextEl: $nextEl && $nextEl[0],\n      $prevEl,\n      prevEl: $prevEl && $prevEl[0]\n    });\n\n    if (!swiper.enabled) {\n      if ($nextEl) $nextEl.addClass(params.lockClass);\n      if ($prevEl) $prevEl.addClass(params.lockClass);\n    }\n  }\n\n  function destroy() {\n    const {\n      $nextEl,\n      $prevEl\n    } = swiper.navigation;\n\n    if ($nextEl && $nextEl.length) {\n      $nextEl.off('click', onNextClick);\n      $nextEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n\n    if ($prevEl && $prevEl.length) {\n      $prevEl.off('click', onPrevClick);\n      $prevEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n  }\n\n  on('init', () => {\n    init();\n    update();\n  });\n  on('toEdge fromEdge lock unlock', () => {\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    const {\n      $nextEl,\n      $prevEl\n    } = swiper.navigation;\n\n    if ($nextEl) {\n      $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n    }\n\n    if ($prevEl) {\n      $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n    }\n  });\n  on('click', (_s, e) => {\n    const {\n      $nextEl,\n      $prevEl\n    } = swiper.navigation;\n    const targetEl = e.target;\n\n    if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n      let isHidden;\n\n      if ($nextEl) {\n        isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n      } else if ($prevEl) {\n        isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n      }\n\n      if (isHidden === true) {\n        emit('navigationShow');\n      } else {\n        emit('navigationHide');\n      }\n\n      if ($nextEl) {\n        $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n      }\n\n      if ($prevEl) {\n        $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n      }\n    }\n  });\n  Object.assign(swiper.navigation, {\n    update,\n    init,\n    destroy\n  });\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination({\n  swiper,\n  extendParams,\n  on,\n  emit\n}) {\n  const pfx = 'swiper-pagination';\n  extendParams({\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets',\n      // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: number => number,\n      formatFractionTotal: number => number,\n      bulletClass: `${pfx}-bullet`,\n      bulletActiveClass: `${pfx}-bullet-active`,\n      modifierClass: `${pfx}-`,\n      currentClass: `${pfx}-current`,\n      totalClass: `${pfx}-total`,\n      hiddenClass: `${pfx}-hidden`,\n      progressbarFillClass: `${pfx}-progressbar-fill`,\n      progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n      clickableClass: `${pfx}-clickable`,\n      lockClass: `${pfx}-lock`,\n      horizontalClass: `${pfx}-horizontal`,\n      verticalClass: `${pfx}-vertical`\n    }\n  });\n  swiper.pagination = {\n    el: null,\n    $el: null,\n    bullets: []\n  };\n  let bulletSize;\n  let dynamicBulletIndex = 0;\n\n  function isPaginationDisabled() {\n    return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n  }\n\n  function setSideBullets($bulletEl, position) {\n    const {\n      bulletActiveClass\n    } = swiper.params.pagination;\n    $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n  }\n\n  function update() {\n    // Render || Update Pagination bullets/items\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const $el = swiper.pagination.$el; // Current/Total\n\n    let current;\n    const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n    if (swiper.params.loop) {\n      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n      if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n        current -= slidesLength - swiper.loopedSlides * 2;\n      }\n\n      if (current > total - 1) current -= total;\n      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n    } else {\n      current = swiper.activeIndex || 0;\n    } // Types\n\n\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n\n      if (params.dynamicBullets) {\n        bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n          dynamicBulletIndex += current - swiper.previousIndex;\n\n          if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n            dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (dynamicBulletIndex < 0) {\n            dynamicBulletIndex = 0;\n          }\n        }\n\n        firstIndex = current - dynamicBulletIndex;\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n\n      bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n      if ($el.length > 1) {\n        bullets.each(bullet => {\n          const $bullet = $(bullet);\n          const bulletIndex = $bullet.index();\n\n          if (bulletIndex === current) {\n            $bullet.addClass(params.bulletActiveClass);\n          }\n\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              $bullet.addClass(`${params.bulletActiveClass}-main`);\n            }\n\n            if (bulletIndex === firstIndex) {\n              setSideBullets($bullet, 'prev');\n            }\n\n            if (bulletIndex === lastIndex) {\n              setSideBullets($bullet, 'next');\n            }\n          }\n        });\n      } else {\n        const $bullet = bullets.eq(current);\n        const bulletIndex = $bullet.index();\n        $bullet.addClass(params.bulletActiveClass);\n\n        if (params.dynamicBullets) {\n          const $firstDisplayedBullet = bullets.eq(firstIndex);\n          const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n          }\n\n          if (swiper.params.loop) {\n            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n              }\n\n              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n            } else {\n              setSideBullets($firstDisplayedBullet, 'prev');\n              setSideBullets($lastDisplayedBullet, 'next');\n            }\n          } else {\n            setSideBullets($firstDisplayedBullet, 'prev');\n            setSideBullets($lastDisplayedBullet, 'next');\n          }\n        }\n      }\n\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n      }\n    }\n\n    if (params.type === 'fraction') {\n      $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n      $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n    }\n\n    if (params.type === 'progressbar') {\n      let progressbarDirection;\n\n      if (params.progressbarOpposite) {\n        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n      } else {\n        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n      }\n\n      const scale = (current + 1) / total;\n      let scaleX = 1;\n      let scaleY = 1;\n\n      if (progressbarDirection === 'horizontal') {\n        scaleX = scale;\n      } else {\n        scaleY = scale;\n      }\n\n      $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n    }\n\n    if (params.type === 'custom' && params.renderCustom) {\n      $el.html(params.renderCustom(swiper, current + 1, total));\n      emit('paginationRender', $el[0]);\n    } else {\n      emit('paginationUpdate', $el[0]);\n    }\n\n    if (swiper.params.watchOverflow && swiper.enabled) {\n      $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n  }\n\n  function render() {\n    // Render Container\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const $el = swiper.pagination.$el;\n    let paginationHTML = '';\n\n    if (params.type === 'bullets') {\n      let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n      if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n        numberOfBullets = slidesLength;\n      }\n\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n\n      $el.html(paginationHTML);\n      swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n    }\n\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n      }\n\n      $el.html(paginationHTML);\n    }\n\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n\n      $el.html(paginationHTML);\n    }\n\n    if (params.type !== 'custom') {\n      emit('paginationRender', swiper.pagination.$el[0]);\n    }\n  }\n\n  function init() {\n    swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n      el: 'swiper-pagination'\n    });\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n    let $el = $(params.el);\n    if ($el.length === 0) return;\n\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n      $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n      if ($el.length > 1) {\n        $el = $el.filter(el => {\n          if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n          return true;\n        });\n      }\n    }\n\n    if (params.type === 'bullets' && params.clickable) {\n      $el.addClass(params.clickableClass);\n    }\n\n    $el.addClass(params.modifierClass + params.type);\n    $el.addClass(params.modifierClass + swiper.params.direction);\n\n    if (params.type === 'bullets' && params.dynamicBullets) {\n      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n      dynamicBulletIndex = 0;\n\n      if (params.dynamicMainBullets < 1) {\n        params.dynamicMainBullets = 1;\n      }\n    }\n\n    if (params.type === 'progressbar' && params.progressbarOpposite) {\n      $el.addClass(params.progressbarOppositeClass);\n    }\n\n    if (params.clickable) {\n      $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n        e.preventDefault();\n        let index = $(this).index() * swiper.params.slidesPerGroup;\n        if (swiper.params.loop) index += swiper.loopedSlides;\n        swiper.slideTo(index);\n      });\n    }\n\n    Object.assign(swiper.pagination, {\n      $el,\n      el: $el[0]\n    });\n\n    if (!swiper.enabled) {\n      $el.addClass(params.lockClass);\n    }\n  }\n\n  function destroy() {\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    const $el = swiper.pagination.$el;\n    $el.removeClass(params.hiddenClass);\n    $el.removeClass(params.modifierClass + params.type);\n    $el.removeClass(params.modifierClass + swiper.params.direction);\n    if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n    if (params.clickable) {\n      $el.off('click', classesToSelector(params.bulletClass));\n    }\n  }\n\n  on('init', () => {\n    init();\n    render();\n    update();\n  });\n  on('activeIndexChange', () => {\n    if (swiper.params.loop) {\n      update();\n    } else if (typeof swiper.snapIndex === 'undefined') {\n      update();\n    }\n  });\n  on('snapIndexChange', () => {\n    if (!swiper.params.loop) {\n      update();\n    }\n  });\n  on('slidesLengthChange', () => {\n    if (swiper.params.loop) {\n      render();\n      update();\n    }\n  });\n  on('snapGridLengthChange', () => {\n    if (!swiper.params.loop) {\n      render();\n      update();\n    }\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    const {\n      $el\n    } = swiper.pagination;\n\n    if ($el) {\n      $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n    }\n  });\n  on('lock unlock', () => {\n    update();\n  });\n  on('click', (_s, e) => {\n    const targetEl = e.target;\n    const {\n      $el\n    } = swiper.pagination;\n\n    if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n      if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n      const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n      if (isHidden === true) {\n        emit('paginationShow');\n      } else {\n        emit('paginationHide');\n      }\n\n      $el.toggleClass(swiper.params.pagination.hiddenClass);\n    }\n  });\n  Object.assign(swiper.pagination, {\n    render,\n    update,\n    init,\n    destroy\n  });\n}","import effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nexport default function EffectFade({\n  swiper,\n  extendParams,\n  on\n}) {\n  extendParams({\n    fadeEffect: {\n      crossFade: false,\n      transformEl: null\n    }\n  });\n\n  const setTranslate = () => {\n    const {\n      slides\n    } = swiper;\n    const params = swiper.params.fadeEffect;\n\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = swiper.slides.eq(i);\n      const offset = $slideEl[0].swiperSlideOffset;\n      let tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      let ty = 0;\n\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n\n      const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n      const $targetEl = effectTarget(params, $slideEl);\n      $targetEl.css({\n        opacity: slideOpacity\n      }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n    }\n  };\n\n  const setTransition = duration => {\n    const {\n      transformEl\n    } = swiper.params.fadeEffect;\n    const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n    $transitionElements.transition(duration);\n    effectVirtualTransitionEnd({\n      swiper,\n      duration,\n      transformEl,\n      allSlides: true\n    });\n  };\n\n  effectInit({\n    effect: 'fade',\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    overwriteParams: () => ({\n      slidesPerView: 1,\n      slidesPerGroup: 1,\n      watchSlidesProgress: true,\n      spaceBetween: 0,\n      virtualTranslate: !swiper.params.cssMode\n    })\n  });\n}","export default function effectInit(params) {\n  const {\n    effect,\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    overwriteParams,\n    perspective\n  } = params;\n  on('beforeInit', () => {\n    if (swiper.params.effect !== effect) return;\n    swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n    if (perspective && perspective()) {\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n    }\n\n    const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n    Object.assign(swiper.params, overwriteParamsResult);\n    Object.assign(swiper.originalParams, overwriteParamsResult);\n  });\n  on('setTranslate', () => {\n    if (swiper.params.effect !== effect) return;\n    setTranslate();\n  });\n  on('setTransition', (_s, duration) => {\n    if (swiper.params.effect !== effect) return;\n    setTransition(duration);\n  });\n}","export default function effectVirtualTransitionEnd({\n  swiper,\n  duration,\n  transformEl,\n  allSlides\n}) {\n  const {\n    slides,\n    activeIndex,\n    $wrapperEl\n  } = swiper;\n\n  if (swiper.params.virtualTranslate && duration !== 0) {\n    let eventTriggered = false;\n    let $transitionEndTarget;\n\n    if (allSlides) {\n      $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n    } else {\n      $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n    }\n\n    $transitionEndTarget.transitionEnd(() => {\n      if (eventTriggered) return;\n      if (!swiper || swiper.destroyed) return;\n      eventTriggered = true;\n      swiper.animating = false;\n      const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n      for (let i = 0; i < triggerEvents.length; i += 1) {\n        $wrapperEl.trigger(triggerEvents[i]);\n      }\n    });\n  }\n}","import $ from '../../shared/dom.js';\nexport default function Parallax({\n  swiper,\n  extendParams,\n  on\n}) {\n  extendParams({\n    parallax: {\n      enabled: false\n    }\n  });\n\n  const setTransform = (el, progress) => {\n    const {\n      rtl\n    } = swiper;\n    const $el = $(el);\n    const rtlFactor = rtl ? -1 : 1;\n    const p = $el.attr('data-swiper-parallax') || '0';\n    let x = $el.attr('data-swiper-parallax-x');\n    let y = $el.attr('data-swiper-parallax-y');\n    const scale = $el.attr('data-swiper-parallax-scale');\n    const opacity = $el.attr('data-swiper-parallax-opacity');\n\n    if (x || y) {\n      x = x || '0';\n      y = y || '0';\n    } else if (swiper.isHorizontal()) {\n      x = p;\n      y = '0';\n    } else {\n      y = p;\n      x = '0';\n    }\n\n    if (x.indexOf('%') >= 0) {\n      x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n    } else {\n      x = `${x * progress * rtlFactor}px`;\n    }\n\n    if (y.indexOf('%') >= 0) {\n      y = `${parseInt(y, 10) * progress}%`;\n    } else {\n      y = `${y * progress}px`;\n    }\n\n    if (typeof opacity !== 'undefined' && opacity !== null) {\n      const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n      $el[0].style.opacity = currentOpacity;\n    }\n\n    if (typeof scale === 'undefined' || scale === null) {\n      $el.transform(`translate3d(${x}, ${y}, 0px)`);\n    } else {\n      const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n    }\n  };\n\n  const setTranslate = () => {\n    const {\n      $el,\n      slides,\n      progress,\n      snapGrid\n    } = swiper;\n    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n      setTransform(el, progress);\n    });\n    slides.each((slideEl, slideIndex) => {\n      let slideProgress = slideEl.progress;\n\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n        slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n      }\n\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n        setTransform(el, slideProgress);\n      });\n    });\n  };\n\n  const setTransition = (duration = swiper.params.speed) => {\n    const {\n      $el\n    } = swiper;\n    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n      const $parallaxEl = $(parallaxEl);\n      let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n      if (duration === 0) parallaxDuration = 0;\n      $parallaxEl.transition(parallaxDuration);\n    });\n  };\n\n  on('beforeInit', () => {\n    if (!swiper.params.parallax.enabled) return;\n    swiper.params.watchSlidesProgress = true;\n    swiper.originalParams.watchSlidesProgress = true;\n  });\n  on('init', () => {\n    if (!swiper.params.parallax.enabled) return;\n    setTranslate();\n  });\n  on('setTranslate', () => {\n    if (!swiper.params.parallax.enabled) return;\n    setTranslate();\n  });\n  on('setTransition', (_swiper, duration) => {\n    if (!swiper.params.parallax.enabled) return;\n    setTransition(duration);\n  });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\nexport default function A11y({\n  swiper,\n  extendParams,\n  on\n}) {\n  extendParams({\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}',\n      slideLabelMessage: '{{index}} / {{slidesLength}}',\n      containerMessage: null,\n      containerRoleDescriptionMessage: null,\n      itemRoleDescriptionMessage: null,\n      slideRole: 'group'\n    }\n  });\n  let liveRegion = null;\n\n  function notify(message) {\n    const notification = liveRegion;\n    if (notification.length === 0) return;\n    notification.html('');\n    notification.html(message);\n  }\n\n  function getRandomNumber(size = 16) {\n    const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n    return 'x'.repeat(size).replace(/x/g, randomChar);\n  }\n\n  function makeElFocusable($el) {\n    $el.attr('tabIndex', '0');\n  }\n\n  function makeElNotFocusable($el) {\n    $el.attr('tabIndex', '-1');\n  }\n\n  function addElRole($el, role) {\n    $el.attr('role', role);\n  }\n\n  function addElRoleDescription($el, description) {\n    $el.attr('aria-roledescription', description);\n  }\n\n  function addElControls($el, controls) {\n    $el.attr('aria-controls', controls);\n  }\n\n  function addElLabel($el, label) {\n    $el.attr('aria-label', label);\n  }\n\n  function addElId($el, id) {\n    $el.attr('id', id);\n  }\n\n  function addElLive($el, live) {\n    $el.attr('aria-live', live);\n  }\n\n  function disableEl($el) {\n    $el.attr('aria-disabled', true);\n  }\n\n  function enableEl($el) {\n    $el.attr('aria-disabled', false);\n  }\n\n  function onEnterOrSpaceKey(e) {\n    if (e.keyCode !== 13 && e.keyCode !== 32) return;\n    const params = swiper.params.a11y;\n    const $targetEl = $(e.target);\n\n    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n      if (!(swiper.isEnd && !swiper.params.loop)) {\n        swiper.slideNext();\n      }\n\n      if (swiper.isEnd) {\n        notify(params.lastSlideMessage);\n      } else {\n        notify(params.nextSlideMessage);\n      }\n    }\n\n    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n      if (!(swiper.isBeginning && !swiper.params.loop)) {\n        swiper.slidePrev();\n      }\n\n      if (swiper.isBeginning) {\n        notify(params.firstSlideMessage);\n      } else {\n        notify(params.prevSlideMessage);\n      }\n    }\n\n    if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n      $targetEl[0].click();\n    }\n  }\n\n  function updateNavigation() {\n    if (swiper.params.loop || !swiper.navigation) return;\n    const {\n      $nextEl,\n      $prevEl\n    } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        disableEl($prevEl);\n        makeElNotFocusable($prevEl);\n      } else {\n        enableEl($prevEl);\n        makeElFocusable($prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        disableEl($nextEl);\n        makeElNotFocusable($nextEl);\n      } else {\n        enableEl($nextEl);\n        makeElFocusable($nextEl);\n      }\n    }\n  }\n\n  function hasPagination() {\n    return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n  }\n\n  function hasClickablePagination() {\n    return hasPagination() && swiper.params.pagination.clickable;\n  }\n\n  function updatePagination() {\n    const params = swiper.params.a11y;\n    if (!hasPagination()) return;\n    swiper.pagination.bullets.each(bulletEl => {\n      const $bulletEl = $(bulletEl);\n\n      if (swiper.params.pagination.clickable) {\n        makeElFocusable($bulletEl);\n\n        if (!swiper.params.pagination.renderBullet) {\n          addElRole($bulletEl, 'button');\n          addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n        }\n      }\n\n      if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n        $bulletEl.attr('aria-current', 'true');\n      } else {\n        $bulletEl.removeAttr('aria-current');\n      }\n    });\n  }\n\n  const initNavEl = ($el, wrapperId, message) => {\n    makeElFocusable($el);\n\n    if ($el[0].tagName !== 'BUTTON') {\n      addElRole($el, 'button');\n      $el.on('keydown', onEnterOrSpaceKey);\n    }\n\n    addElLabel($el, message);\n    addElControls($el, wrapperId);\n  };\n\n  function init() {\n    const params = swiper.params.a11y;\n    swiper.$el.append(liveRegion); // Container\n\n    const $containerEl = swiper.$el;\n\n    if (params.containerRoleDescriptionMessage) {\n      addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n    }\n\n    if (params.containerMessage) {\n      addElLabel($containerEl, params.containerMessage);\n    } // Wrapper\n\n\n    const $wrapperEl = swiper.$wrapperEl;\n    const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n    const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n    addElId($wrapperEl, wrapperId);\n    addElLive($wrapperEl, live); // Slide\n\n    if (params.itemRoleDescriptionMessage) {\n      addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n    }\n\n    addElRole($(swiper.slides), params.slideRole);\n    const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n    swiper.slides.each((slideEl, index) => {\n      const $slideEl = $(slideEl);\n      const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n      const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n      addElLabel($slideEl, ariaLabelMessage);\n    }); // Navigation\n\n    let $nextEl;\n    let $prevEl;\n\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n\n    if ($nextEl && $nextEl.length) {\n      initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n    }\n\n    if ($prevEl && $prevEl.length) {\n      initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n    } // Pagination\n\n\n    if (hasClickablePagination()) {\n      swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n    }\n  }\n\n  function destroy() {\n    if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n    let $nextEl;\n    let $prevEl;\n\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n\n    if ($nextEl) {\n      $nextEl.off('keydown', onEnterOrSpaceKey);\n    }\n\n    if ($prevEl) {\n      $prevEl.off('keydown', onEnterOrSpaceKey);\n    } // Pagination\n\n\n    if (hasClickablePagination()) {\n      swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n    }\n  }\n\n  on('beforeInit', () => {\n    liveRegion = $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`);\n  });\n  on('afterInit', () => {\n    if (!swiper.params.a11y.enabled) return;\n    init();\n    updateNavigation();\n  });\n  on('toEdge', () => {\n    if (!swiper.params.a11y.enabled) return;\n    updateNavigation();\n  });\n  on('fromEdge', () => {\n    if (!swiper.params.a11y.enabled) return;\n    updateNavigation();\n  });\n  on('paginationUpdate', () => {\n    if (!swiper.params.a11y.enabled) return;\n    updatePagination();\n  });\n  on('destroy', () => {\n    if (!swiper.params.a11y.enabled) return;\n    destroy();\n  });\n}","/* globals jQuery */\n\nimport { debounce } from 'throttle-debounce'\n\n/**\n * jQueryResponsiveNav module\n *\n * Usage:\n *\n * ```js\n * $.fn.responsiveNav = require('./responsive-nav.jquery.js')\n *\n * $('.my-nav-element').responsiveNav({\n *   navType: 'offCanvas'\n * })\n * ```\n */\nexport default (($) => {\n\nreturn function jQueryResponsiveNav( options ) {\n\n    options = $.extend({}, {\n        wrapperSelector: '.site-wrapper',\n        menuButtonSelector: '.menu-btn',\n        menuOpenWrapperClass: 'menu-open',\n        activeClass: 'active',\n        dropdownSelector: '',\n        navType: 'offCanvas',\n        debounceTime: 150,\n        closeOnOutsideClick: false,\n        showTabsOnFocus: false,\n    }, options)\n\n    const $this = $(this),\n        $wrapper = $( options.wrapperSelector ),\n        $menuButton = $( options.menuButtonSelector )\n\n    // target dropdown element, which may be distinct from $this\n    const $dropdownElem = options.dropdownSelector ?\n                            $(options.dropdownSelector) :\n                            $this\n\n    function _menuIsOpen() {\n        //site wrapper has the menu-open class\n        return $menuButton.hasClass( options.activeClass )\n    }\n\n    /*\n    * CLOSE NAVIGATION SETUP\n    */\n    function _closeDropdownNav() {\n        $dropdownElem.slideUp()\n    }\n\n    function _closeOffCanvasNav() {\n        $wrapper.removeClass( options.menuOpenWrapperClass )\n    }\n\n    const closeNavStrategies = {\n        dropdown: _closeDropdownNav,\n        offCanvas: _closeOffCanvasNav,\n    }\n\n    //set what type of closeNav we want\n    const closeNavStrategy = closeNavStrategies[options.navType] || _closeOffCanvasNav\n\n    //THIS IS THE ACTUAL FUNCTIoN THAT GETS CALLED TO CLOSE THE NAV\n    function closeNav() {\n        closeNavStrategy()\n        $menuButton.removeClass( options.activeClass )\n    }\n\n    /*\n    * OPEN NAVIGATION SETUP\n    */\n    function _openDropdownNav() {\n        $dropdownElem.slideDown()\n    }\n\n    function _openOffCanvasNav() {\n        $wrapper.addClass( options.menuOpenWrapperClass )\n    }\n\n    const openNavStrategies = {\n        dropdown: _openDropdownNav,\n        offCanvas: _openOffCanvasNav,\n    }\n    //set what type of closeNav we want\n    const openNavStrategy = openNavStrategies[options.navType] || _openOffCanvasNav\n\n    //THIS IS THE ACTUAL FUNCTION THAT GETS CALLED TO OPEN THE NAV\n    function openNav() {\n\n        openNavStrategy();\n        $menuButton.addClass( options.activeClass );\n\n        if (options.closeOnOutsideClick) {\n            // close the menu when the user clicks anywhere outside it\n            $(options.wrapperSelector).on('touchstart, click', function _onOutsideClick(evt) {\n                //if not nav container or a decendant of nav container\n                if( !$this.is(evt.target) && $this.has(evt.target).length === 0 ) {\n                    closeNav();\n                }\n            });\n        }\n    }\n\n    //KEYBOARD FUNCTIONALITY\n    if( options.showTabsOnFocus ) {\n        // Adding quick Tab Functionality for Navigation\n        $('nav.main-nav > ul > li.menu-item-has-children > a').on('focus', function () {\n            $(this).siblings('ul').addClass('tab-show');\n        }).on('blur',function(){\n            $(this).siblings('ul').removeClass('tab-show');\n        });\n\n      // focusing on sub menu item show its dropdown\n        $('nav.main-nav > ul > li.menu-item-has-children > ul > li > a').on('focus', function () {\n            $(this).parent().parent('ul').addClass('tab-show');\n        }).on('blur',function(){\n            $(this).parent().parent('ul').removeClass('tab-show');\n        });\n    }\n\n    const sublevelNav = function() {\n\t\t$this.find('span.main-nav__dropper').each(function(){\n\t\t\t$(this).on('touchstart, click', function(event) {\n\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t//if menu is open and the subnav is not visible and subnav exists\n\t\t\t\tif ( _menuIsOpen() && !$(this).parent().next().is(':visible') && $(this).parent().next().length > 0) {\n\n\t\t\t\t\t//close what's already open at the same level\n\t\t\t\t\t//remove toggle class from the li and slide up its child ul\n\t\t\t\t\t$(this).parent().parent().siblings().removeClass('toggle').children('ul').slideUp(250);\n\n\t\t\t\t\t//expand current click\n\t\t\t\t\t$(this).parent().parent().addClass('toggle');\n\t\t\t\t\t$(this).parent().next('ul').slideDown(250);\n\n\t\t\t\t}\n\t\t\t\telse if ( _menuIsOpen() && $(this).parent().next('ul').is(':visible') ) {\n\t\t\t\t\t\t//close this item\n\t\t\t\t\t\t$(this).parent().parent().removeClass('toggle');\n\t\t\t\t\t\t$(this).parent().next('ul').slideUp(250);\n\t\t\t\t}\n\n\t\t\t}); //end bind\n\t\t});//end find span.dropper\n\t};//end sublevelNav\n\n    const activeToggleFn = function(){\n        //on mobile check for active navigation and set open accordingly\n        if( $menuButton.is(':visible') ){\n\n            $this.find('ul.menu li.current_page_item, ul.menu li.current_page_ancestor').each(function(){\n                if( !$(this).hasClass('toggle') ){\n                    $(this).addClass('toggle');\n                }\n                if( !$(this).children('ul').is(':visible') ){\n                    $(this).children('ul').show();\n                }\n            });\n        }\n    } //end activeToggleFn\n\n\n    $menuButton.on( 'touchstart, click', function(event) {\n\n        event.stopPropagation();\n        event.preventDefault();\n\n        if ( _menuIsOpen() ) {\n            closeNav();\n        }\n        else{\n            openNav();\n        }\n    }) //end button on\n\n    //ADD EXPANDER ICON\n    $this.find('li.menu-item-has-children > a').each(function(){\n        if( $(this).next('ul').length ) {\n            $(this).append('<span class=\"main-nav__dropper\"></span>');\n        }\n    });\n\n    //IF DROPDOWN TYPE SET CLASSNAME\n    if( options.navType === 'dropdown' ){\n        $dropdownElem.addClass('main-nav-dropdown');\n    }\n\n    sublevelNav()\n    activeToggleFn()\n\n    $(window).on('resize', debounce(options.debounceTime, function() {\n\n        if( !$menuButton.is(':visible') ) {\n            //close mobile menu\n            if ( _menuIsOpen() ) {\n                //closeNav() - we dont want to run the function cause we dont want all transitions with the dropdown\n                $menuButton.removeClass( options.activeClass );\n                $wrapper.removeClass( options.menuOpenWrapperClass );\n                $this.removeAttr('style');\n            }\n            //remove any inline styles from subnavigation\n            $this.find( 'ul' ).removeAttr( 'style' )\n            $this.find('.menu-item-has-children').removeClass('toggle')\n            $this.removeAttr('style')\n        }\n        else{\n            activeToggleFn()\n        }\n\n    }));\n\n    return this;\n}\n\n})(jQuery)\n","/**\n * ## jQueryAccordion module Usage\n *\n * ### Markup:\n * <dl class=\"accordion\">\n *   <dt data-id=\"tab1\"><h3><a href=\"#tab1\">Tab Title</a></h3></dt>\n *   <dd>Panel Content</dd>\n *   <dt data-id=\"tab1\"><h3><a href=\"#tab2\">Tab Title</a></h3></dt>\n *   <dd>Panel Content</dd>\n * </dl>\n *\n * ### JS:\n * $.fn.accordion = require('./jquery.accordion.js');\n * $('dl.accordion').accordion();\n */\nexport default (($) => {\n\n  return function() {\n\n    //VARIABLES\n    const $tabs = $('dl.accordion dt'),\n        hashtag = window.location.hash,\n        panelId = window.location.hash.replace('#','');\n\n    //FUNCTIONS\n    const toggleAccPanelFn = function( $this_hash, $this_tab, $this_panel ){\n      if( $this_tab.hasClass('active') && $this_panel.is(':visible') ){\n        $this_panel.slideUp();\n        $this_tab.removeClass('active').addClass('inactive');\n      }\n      else{\n        $this_panel.slideDown();\n        $this_tab.addClass('active').removeClass('inactive');\n        window.location.hash = $this_hash;\n      }\n\n    }\n\n    //TAB ANCHOR CLICKS\n    $tabs.find('a').on('click', function(e){\n      e.preventDefault()\n      const this_hash = $(this).attr('href');\n      const this_tab = $(this).closest('dt');\n      const this_panel = this_tab.next();\n\n      toggleAccPanelFn(this_hash, this_tab, this_panel);\n    });\n\n    //PRESELECTED OPEN PANEL (USE OF HASHTAGS)\n    if( hashtag && $('dl.accordion dt[data-id=\"'+panelId+'\"]').length>0 ){\n      \n      const selected_tab = $('dl.accordion dt[data-id=\"'+panelId+'\"]');\n      const selected_panel = selected_tab.next();\n      const accordionPos = selected_tab.offset().top;\n      \n      //open panel\n      toggleAccPanelFn(hashtag, selected_tab, selected_panel)\n\n      //set scroll position to the open accordion panel\n      $(document).scrollTop(accordionPos);\n      //$('html, body').animate({ scrollTop: accordionPos }, 500);\n\n    }\n  }\n\n})(jQuery)\n","/* globals jQuery */\nimport 'fitvids.1.1.0'\nimport 'magnific-popup'\n\nimport './slideshows.js'\nimport responsiveNav from './responsive-nav.jquery.js'\nimport accordion from './jquery.accordion.js'\n\n/* code for events single view autocomplete */\n    /* Adapted from https://www.youtube.com/watch?v=c3MjU9E9buQ */\nlet autocomplete;\nlet place;\nlet autocompleteID;\nlet ticketsBodyView;\nlet locationBasedPricingEnabled;\n\nwindow.initAutocomplete = () => {\n    ticketsBodyView = document.getElementById('tribe-tickets__tickets-form');\n    autocompleteID = document.getElementById('autocompleteEventAddressBar');\n    if ( autocompleteID ) {  \n        //show or hide tickets div\n        showOrHideTicketsDiv();  \n        //google functions            \n        autocomplete = new google.maps.places.Autocomplete(\n            autocompleteID,            {\n            types: [],\n            componentRestrictions: {'country': ['US']},\n            fields: ['place_id', 'geometry', 'name', 'formatted_address']\n        });\n        //event listeners\n        autocomplete.addListener('place_changed', onPlaceChanged);\n        autocompleteID.addEventListener('keypress', function (e) {\n            if (e.key === 'Enter') {\n                alert('Please select home address from provided suggestions.');\n            }\n        });\n    }\n}// end initAutocomplete\n\nfunction showOrHideTicketsDiv(){\n    locationBasedPricingEnabled = document.querySelectorAll('[data-post-location-based-pricing=\"1\"]');\n    ticketsBodyView = document.getElementById('tribe-tickets__tickets-form');\n    if ( !locationBasedPricingEnabled ) {\n        ticketsBodyView.style.display = \"block\";\n        $('#tribe-tickets__tickets-form-headline').show(); //get tickets headline\n    }\n\n}// end showOrHideTicketsDiv\n\nwindow.onPlaceChanged = () => {\n    place = autocomplete.getPlace();\n    if (!place.geometry) {\n        document.getElementById('autocompleteEventAddressBar').placeholder = 'Enter your home address';\n    } else {\n        //show the loading animation\n        let loadImage = document.getElementById('autocompleteEventLoadingImg');\n        loadImage.style.display = \"block\";\n        fetch(COMMON_PARAMS.ajaxUrl+'?action=in_district_check&lat='+\n            place.geometry.location.lat()+'&lng='+\n            place.geometry.location.lng())\n        .then( response => response.json() )\n        .then( data => {\n            localStorage.setItem('inOrOutOfDistrictBool', data['in_district']);\n            showOrHideTicketsBasedOnLocale(); \n        } )\n        .finally( () => {\n            loadImage.style.display = \"none\";\n        } );\n\n        //show formatted address to user after selection\n        document.getElementById('autocompleteEventAddressResults').innerHTML = place.formatted_address;\n        \n    }\n}//end onPlaceChanged\n/* end code for events single view autocomplete */\n\n/* code for showing or hiding events based on in/out of district */\nfunction showOrHideTicketsBasedOnLocale() {\n    //declare vars\n    let inOrOutOfDistrictBoolFromLocalStorage = localStorage.getItem('inOrOutOfDistrictBool');\n    let inDistrictTicketDivs = document.querySelectorAll('[data-ticket-is-in-district=\"1\"]');\n    let outOfDistrictTicketDivs = document.querySelectorAll('[data-ticket-is-in-district=\"0\"]');\n    let districtTicketDivsToShow;\n    let districtTicketDivsToHide;\n\n    if ( ticketsBodyView && inOrOutOfDistrictBoolFromLocalStorage ) {\n        ticketsBodyView.style.display = \"block\";\n        $('#tribe-tickets__tickets-form-headline').show(); //get tickets headline\n        //sort based on locale boolean\n        if ( inOrOutOfDistrictBoolFromLocalStorage === 'true' ) {\n            districtTicketDivsToShow = inDistrictTicketDivs;\n            districtTicketDivsToHide = outOfDistrictTicketDivs;\n        } else {\n            districtTicketDivsToHide = inDistrictTicketDivs;\n            districtTicketDivsToShow = outOfDistrictTicketDivs;\n        }\n        //show and hide calls\n        districtTicketDivsToShow.forEach(function(ticketDiv) {\n            ticketDiv.style.display = \"\";\n        });\n        districtTicketDivsToHide.forEach(function(ticketDiv) {\n            ticketDiv.style.display = \"none\";\n        });\n    }\n}\n/* end code for showing or hiding events based on in/out of district */\n\n\n(($) => {\n\n    $.fn.responsiveNav = responsiveNav\n    $.fn.accordion = accordion\n\n    // Make nav menu nice & responsive\n    $('nav.main-nav').responsiveNav({\n        navType: 'offCanvas', //default option for dropdown type use 'dropdown'\n        closeOnOutsideClick: true, //set to false if using dropdown type\n        showTabsOnFocus: true,\n    });\n\t$('nav.subnav').responsiveNav({\n\t\tnavType: 'dropdown',\n\t\tcloseOnOutsideClick: false,\n\t\tshowTabsOnFocus: false,\n\t\tmenuButtonSelector: '.subnav__mobile-toggle',\n\t\tdropdownSelector: '.subnav__menu'\n\t});\n\n    // Responsive Videos\n    $('.rtecontent').fitVids();\n\n    // Accordions\n    $('dl.accordion').accordion();\n\n\t// ALERT BAR\n\tif( $('.alert-bar') ){\n        var alertbar = $('.alert-bar');\n        var closealertbar = $('.close-alertbar');\n\n        $(closealertbar).on('click', function(e){\n            e.preventDefault();\n            //close the alertbar\n            alertbar.slideUp();\n            // persist the dismissal in a cookie\n            document.cookie = closealertbar.data('alert-cookie');\n        });\n    }\n\n\t/* LOCATION MAP */\n\tvar map = document.getElementById('location-map');\n\tif( map ){\n\t\tvar LocationMapClass = require('./location-map.js');\n\t\tvar LocationMap = new LocationMapClass(map);\n\t\tLocationMap.initMap(true, true);\n\t}\n\n    if( $('#tribe-tickets__tickets-form').is(':visible') ){\n        $('#tribe-tickets__tickets-form-headline').show(); //get tickets headline\n    }\n\n\n})(jQuery)\n"],"names":["$","LocationMap","module","exports","jQuery","mapElement","this","initialCenter","google","maps","LatLng","initialZoom","maxZoom","map","locations","locationMarkers","locationInfoWindow","InfoWindow","mapContainClass","infobox","InfoBox","content","disableAutoPan","maxWidth","alignBottom","pixelOffset","Size","zIndex","pane","boxStyle","width","closeBoxMargin","closeBoxURL","theme_url","infoBoxClearance","enableEventPropagation","prototype","initMap","controls","popup","self","args","zoom","center","mapTypeId","MapTypeId","ROADMAP","mapTypeControl","rotateControl","fullscreenControl","streetViewControl","disableDefaultUI","styles","mapStyles","$markers","find","bounds","LatLngBounds","Map","each","index","element","lat","data","lng","latlng","marker","Marker","position","optimized","icon","url","size","scaledSize","origin","Point","animation","Animation","DROP","setCenter","html","extend","fitBounds","popupContent","addListener","setContent","open","fn","fitVids","options","settings","customSelector","ignore","document","getElementById","head","getElementsByTagName","div","createElement","innerHTML","appendChild","childNodes","selectors","push","ignoreList","$allVideos","join","not","$this","parents","length","tagName","toLowerCase","parent","css","isNaN","attr","aspectRatio","parseInt","height","videoName","_count","wrap","removeAttr","window","Zepto","global","factory","w","Error","noGlobal","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","text","getAttribute","setAttribute","parentNode","removeChild","toType","version","selector","context","init","isArrayLike","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","callback","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","id","getElementsByClassName","qsa","test","testContext","scope","toSelector","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","getAttributeNode","tag","tmp","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","needsContext","rsingleTag","winnow","qualifier","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","l","closest","prevAll","add","addBack","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","minWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","bool","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","trim","_jQuery","_$","noConflict","mfp","_prevStatus","_document","_prevContentType","_wrapClasses","_currPopupType","CLOSE_EVENT","BEFORE_CLOSE_EVENT","MARKUP_PARSE_EVENT","OPEN_EVENT","CHANGE_EVENT","NS","EVENT_NS","READY_CLASS","REMOVING_CLASS","PREVENT_CLOSE_CLASS","MagnificPopup","_isJQ","_window","_mfpOn","f","ev","_getEl","_mfpTrigger","st","callbacks","charAt","_getCloseBtn","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","magnificPopup","instance","appVersion","navigator","isLowIE","isIE8","all","isAndroid","isIOS","supportsTransition","supportsTransitions","probablyMobile","userAgent","popupsCache","isObj","items","isOpen","mainEl","defaults","fixedContentPos","modal","closeOnContentClick","closeOnBgClick","showCloseBtn","enableEscapeKey","bgOverlay","close","_checkIfClose","contentContainer","preloader","tLoading","modules","closeBtnInside","template","close_replaceWith","alignTop","fixedBgPos","updateSize","windowHeight","wH","windowStyles","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","classesToadd","mainClass","_addClassToMFP","updateItemHTML","_lastFocusedEl","_setFocus","_onFocusIn","removalDelay","_close","classesToRemove","_removeClassFromMFP","currItem","autoFocusLast","prevHeight","winHeight","zoomLevel","clientWidth","innerWidth","innerHeight","parseEl","markup","newContent","appendContent","preloaded","addGroup","eHandler","mfpEl","_openClick","eName","midClick","disableOn","updateStatus","closeOnContent","closeOnBg","cName","scrollHeight","_parseMarkup","scrollbarSize","scrollDiv","registerModule","jqEl","itemOpts","_hiddenClass","_inlinePlaceholder","_lastInlineElement","INLINE_NS","_putInlineElementsBack","hiddenClass","tNotFound","initInline","getInline","inlineSt","inline","inlineElement","_ajaxCur","AJAX_NS","_removeAjaxCursor","_destroyAjaxRequest","req","cursor","tError","initAjax","getAjax","textStatus","finished","loadError","_imgInterval","_getTitle","title","titleSrc","verticalFit","initImage","imgSt","ns","resizeImage","img","decr","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","counter","mfpSetInterval","setInterval","naturalWidth","getImage","guard","onLoadComplete","loaded","onLoadError","alt","img_replaceWith","loading","hasMozTransform","enabled","initZoom","zoomSt","openTimeout","animatedImg","getElToAnimate","newImg","transition","cssObj","showMainContent","_allowZoom","_getItemToZoom","_getOffset","isLarge","paddingTop","paddingBottom","MozTransform","IFRAME_NS","_fixIframeBugs","isShowing","srcAction","patterns","youtube","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","substr","lastIndexOf","dataObj","_getLoopedId","numSlides","_replaceCurrTotal","curr","total","arrowMarkup","preload","navigateByImgClick","arrows","tPrev","tNext","tCounter","initGallery","gSt","gallery","direction","arrowLeft","arrowRight","_preloadTimeout","preloadNearbyImages","goTo","newIndex","preloadBefore","min","preloadAfter","_preloadItem","RETINA_NS","replaceSrc","ratio","initRetina","devicePixelRatio","retina","throttle","atBegin","debounce","noTrailing","debounceMode","timeoutID","lastExec","elapsed","Number","clear","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","forEach","ssrDocument","querySelector","createEvent","initEvent","createElementNS","importNode","hostname","pathname","search","ssrWindow","history","replaceState","pushState","go","back","CustomEvent","Image","screen","matchMedia","cancelAnimationFrame","Dom7","super","__proto__","makeReactive","arrayFlat","res","arrayFilter","toCreate","tempParent","uniqueArray","arrayUnique","noTrigger","shortcut","Methods","c","classList","attrName","transform","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","k","handleEvent","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","outerHeight","clientTop","clientLeft","scrollY","scrollX","compareWith","child","previousSibling","returnIndex","newChild","tempDiv","nextElementSibling","nextEls","previousElementSibling","prevEls","foundElements","found","methodName","o","noExtend","nextSource","HTMLElement","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","__swiper__","varName","varValue","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","wrapperEl","scrollSnapType","cssModeFrameID","isOutOfBound","getTime","easeProgress","currentPosition","deviceCached","browser","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","supportsPassive","gestures","calcSupport","priority","eventsListeners","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","emit","$el","clientHeight","isHorizontal","isVertical","assign","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","label","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","grid","rows","slideSize","initSlides","shouldResetSlideSize","slidesPerView","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","webkitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","transitionEmit","runCallbacks","slideTo","internal","indexAsNumber","animating","preventInteractionOnTransition","initialSlide","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","setTranslate","transitionStart","isH","_immediateVirtual","_swiperImmediateVirtual","behavior","onSlideToWrapperTransitionEnd","destroyed","slideToLoop","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","slidePrev","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","loopCreate","$selector","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","getTranslate","loopDestroy","onTouchStart","touchEventsData","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","closestElement","allowClick","swipeHandler","currentX","currentY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","onTouchEnd","touchEndTime","timeDiff","pathTree","composedPath","lastClickTime","currentPos","stopIndex","groupSize","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","autoplay","running","paused","onClick","preventClicks","preventClicksPropagation","onScroll","newProgress","previousTranslate","dummyEventAttached","dummyEventListener","touchEvents","device","domMethod","swiperMethod","passiveListeners","passive","move","cancel","updateOnWindowResize","ios","android","attachEvents","detachEvents","isGridEnabled","addClasses","suffixes","entries","resultClasses","prepareClasses","fill","containerModifierClass","emitContainerClasses","removeClasses","resizeObserver","createElements","virtualTranslate","breakpointsBase","simulateTouch","uniqueNavElements","preloadImages","updateOnImagesReady","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","update","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","OTransform","MsTransform","msTransform","m41","m42","byController","x","y","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","moving","isLocked","unsetGrabCursor","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","directionChanged","needsReLoop","changeDirection","isEnabled","enable","containerEl","currentHeight","points","point","minRatio","wasLocked","lastSlideIndex","lastSlideRightEdge","images","loadImage","imageEl","srcset","sizes","checkForComplete","onReady","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","overrides","platform","ua","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getDevice","isSafari","isWebView","calcBrowser","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","getWrapper","wrapper","destroy","deleteInstance","cleanStyles","deleteProps","static","newDefaults","installModule","prototypeGroup","protoMethod","use","observer","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","checkProps","classesToSelector","effectParams","$slideEl","transformEl","swiperPagination","getEl","toggleEl","disabledClass","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","_s","targetEl","pagination","clickable","isHidden","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","paginationType","firstIndex","lastIndex","midIndex","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scaleX","scaleY","render","paginationHTML","numberOfBullets","fadeEffect","crossFade","overwriteParams","perspective","overwriteParamsResult","tx","ty","slideOpacity","allSlides","$transitionEndTarget","eventTriggered","triggerEvents","parallax","setTransform","rtlFactor","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","liveRegion","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","updateNavigation","hasPagination","hasClickablePagination","initNavEl","wrapperId","addElControls","$containerEl","repeat","getRandomNumber","live","addElLive","bulletEl","updatePagination","slider","disableOnInteraction","hideOnclick","wrapperSelector","menuButtonSelector","menuOpenWrapperClass","activeClass","dropdownSelector","navType","debounceTime","closeOnOutsideClick","showTabsOnFocus","$wrapper","$menuButton","$dropdownElem","_menuIsOpen","_closeOffCanvasNav","closeNavStrategy","dropdown","offCanvas","closeNav","_openOffCanvasNav","openNavStrategy","activeToggleFn","$tabs","hashtag","panelId","toggleAccPanelFn","$this_hash","$this_tab","$this_panel","this_hash","this_tab","this_panel","selected_tab","selected_panel","accordionPos","autocomplete","place","autocompleteID","ticketsBodyView","locationBasedPricingEnabled","initAutocomplete","places","Autocomplete","componentRestrictions","fields","onPlaceChanged","alert","getPlace","geometry","fetch","COMMON_PARAMS","ajaxUrl","districtTicketDivsToShow","districtTicketDivsToHide","inOrOutOfDistrictBoolFromLocalStorage","inDistrictTicketDivs","outOfDistrictTicketDivs","localStorage","setItem","getItem","ticketDiv","formatted_address","placeholder","responsiveNav","accordion","alertbar","closealertbar","cookie","require"],"sourceRoot":""}