PageSourceSearch

https://porrinodigital.es/wp-content/themes/newspaper-magazine/assets/js/mdb.js?ver=20151215

js porrinodigital.es collected 2026-10-02 13:23:16 UTC 98,319 bytes, 2,237 lines download raw bytes

1/* Material Design for Bootstrap 
2www.mdbootstrap.com */
3
4
5/*
61. Waves
72. Buttons
83. Velocity
94. Global
105. Dropdown
116. Jquery easing
127. Carousel
138. Collapsible
149. Tooltip (initialization)
15
16*/
17
18
19
20
21
22
23/* COLLAPSIBLE */
24
25(function ($) {
26
27  /* TOOLTIP */
28
29  $(document).ready(function(){
30      $('[data-toggle="tooltip"]').tooltip({animation: true, delay: {show: 300, hide: 300}});   
31  });
32
33
34  $.fn.collapsible = function(options) {
35    var defaults = {
36        accordion: undefined
37    };
38
39    options = $.extend(defaults, options);
40
41
42    return this.each(function() {
43
44      var $this = $(this);
45
46      var $panel_headers = $(this).find('> li > .collapsible-header');
47
48      var collapsible_type = $this.data("collapsible");
49
50      // Turn off any existing event handlers
51       $this.off('click.collapse', '.collapsible-header');
52       $panel_headers.off('click.collapse');
53
54
55       /****************
56       Helper Functions
57       ****************/
58
59      // Accordion Open
60      function accordionOpen(object) {
61        $panel_headers = $this.find('> li > .collapsible-header');
62        if (object.hasClass('active')) {
63            object.parent().addClass('active');
64        }
65        else {
66            object.parent().removeClass('active');
67        }
68        if (object.parent().hasClass('active')){
69          object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
70        }
71        else{
72          object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
73        }
74
75        $panel_headers.not(object).removeClass('active').parent().removeClass('active');
76        $panel_headers.not(object).parent().children('.collapsible-body').stop(true,false).slideUp(
77          {
78            duration: 350,
79            easing: "easeOutQuart",
80            queue: false,
81            complete:
82              function() {
83                $(this).css('height', '');
84              }
85          });
86      }
87
88      // Expandable Open
89      function expandableOpen(object) {
90        if (object.hasClass('active')) {
91            object.parent().addClass('active');
92        }
93        else {
94            object.parent().removeClass('active');
95        }
96        if (object.parent().hasClass('active')){
97          object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
98        }
99        else{
100          object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
101        }
102      }
103
104      /**
105       * Check if object is children of panel header
106       * @param  {Object}  object Jquery object
107       * @return {Boolean} true if it is children
108       */
109      function isChildrenOfPanelHeader(object) {
110
111        var panelHeader = getPanelHeader(object);
112
113        return panelHeader.length > 0;
114      }
115
116      /**
117       * Get panel header from a children element
118       * @param  {Object} object Jquery object
119       * @return {Object} panel header object
120       */
121      function getPanelHeader(object) {
122
123        return object.closest('li > .collapsible-header');
124      }
125
126      /*****  End Helper Functions  *****/
127
128
129
130      if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion
131        // Add click handler to only direct collapsible header children
132        $panel_headers = $this.find('> li > .collapsible-header');
133        $panel_headers.on('click.collapse', function (e) {
134          var element = $(e.target);
135
136          if (isChildrenOfPanelHeader(element)) {
137            element = getPanelHeader(element);
138          }
139
140          element.toggleClass('active');
141          accordionOpen(element);
142        });
143        // Open first active
144        accordionOpen($panel_headers.filter('.active').first());
145      }
146      else { // Handle Expandables
147        $panel_headers.each(function () {
148          // Add click handler to only direct collapsible header children
149          $(this).on('click.collapse', function (e) {
150            var element = $(e.target);
151            if (isChildrenOfPanelHeader(element)) {
152              element = getPanelHeader(element);
153            }
154            element.toggleClass('active');
155            expandableOpen(element);
156          });
157          // Open any bodies that have the active class
158          if ($(this).hasClass('active')) {
159            expandableOpen($(this));
160          }
161
162        });
163      }
164
165    });
166  };
167
168  $(document).ready(function(){
169    $('.collapsible').collapsible();
170  });
171}( jQuery ));
172
173
174
175(function($) {
176  /* CAROUSEL */
177
178  var $myCarousel = $('#carousel-example-generic');
179
180  // Initialize carousel
vendor: 4,735 bytes, lines 181-318
181  $myCarousel.carousel();
182
183  function doAnimations(elems) {
184    var animEndEv = 'webkitAnimationEnd animationend';
185    
186    elems.each(function () {
187      var $this = $(this),
188          $animationType = $this.data('animation');
189
190      // Add animate.css classes to
191      // the elements to be animated 
192      // Remove animate.css classes
193      // once the animation event has ended
194      $this.addClass($animationType).one(animEndEv, function () {
195        $this.removeClass($animationType);
196      });
197    });
198  }
199
200  // Select the elements to be animated
201  // in the first slide on page load
202  var $firstAnimatingElems = $myCarousel.find('.item:first')
203                             .find('[data-animation ^= "animated"]');
204
205  // Apply the animation using our function
206  doAnimations($firstAnimatingElems);
207
208  // Pause the carousel 
209  $myCarousel.carousel('pause');
210
211  // Attach our doAnimations() function to the
212  // carousel's slide.bs.carousel event 
213  $myCarousel.on('slide.bs.carousel', function (e) { 
214    // Select the elements to be animated inside the active slide 
215    var $animatingElems = $(e.relatedTarget)
216                          .find("[data-animation ^= 'animated']");
217    doAnimations($animatingElems);
218  });
219})( jQuery );
220
221
222
223/* JQUERY EASING 1.3 */
224
225/*
226 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
227 *
228 * Uses the built in easing capabilities added In jQuery 1.1
229 * to offer multiple easing options
230 *
231 * TERMS OF USE - jQuery Easing
232 *
233 * Open source under the BSD License.
234 *
235 * Copyright © 2008 George McGinley Smith
236 * All rights reserved.
237 *
238 * Redistribution and use in source and binary forms, with or without modification,
239 * are permitted provided that the following conditions are met:
240 *
241 * Redistributions of source code must retain the above copyright notice, this list of
242 * conditions and the following disclaimer.
243 * Redistributions in binary form must reproduce the above copyright notice, this list
244 * of conditions and the following disclaimer in the documentation and/or other materials
245 * provided with the distribution.
246 *
247 * Neither the name of the author nor the names of contributors may be used to endorse
248 * or promote products derived from this software without specific prior written permission.
249 *
250 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
251 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
252 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
253 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
254 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
255 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
256 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
257 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
258 * OF THE POSSIBILITY OF SUCH DAMAGE.
259 *
260*/
261
262// t: current time, b: begInnIng value, c: change In value, d: duration
263jQuery.easing['jswing'] = jQuery.easing['swing'];
264
265jQuery.extend( jQuery.easing,
266{
267	def: 'easeOutQuad',
268	swing: function (x, t, b, c, d) {
269		//alert(jQuery.easing.default);
270		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
271	},
272	easeInQuad: function (x, t, b, c, d) {
273		return c*(t/=d)*t + b;
274	},
275	easeOutQuad: function (x, t, b, c, d) {
276		return -c *(t/=d)*(t-2) + b;
277	},
278	easeInOutQuad: function (x, t, b, c, d) {
279		if ((t/=d/2) < 1) return c/2*t*t + b;
280		return -c/2 * ((--t)*(t-2) - 1) + b;
281	},
282	easeInCubic: function (x, t, b, c, d) {
283		return c*(t/=d)*t*t + b;
284	},
285	easeOutCubic: function (x, t, b, c, d) {
286		return c*((t=t/d-1)*t*t + 1) + b;
287	},
288	easeInOutCubic: function (x, t, b, c, d) {
289		if ((t/=d/2) < 1) return c/2*t*t*t + b;
290		return c/2*((t-=2)*t*t + 2) + b;
291	},
292	easeInQuart: function (x, t, b, c, d) {
293		return c*(t/=d)*t*t*t + b;
294	},
295	easeOutQuart: function (x, t, b, c, d) {
296		return -c * ((t=t/d-1)*t*t*t - 1) + b;
297	},
298	easeInOutQuart: function (x, t, b, c, d) {
299		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
300		return -c/2 * ((t-=2)*t*t*t - 2) + b;
301	},
302	easeInQuint: function (x, t, b, c, d) {
303		return c*(t/=d)*t*t*t*t + b;
304	},
305	easeOutQuint: function (x, t, b, c, d) {
306		return c*((t=t/d-1)*t*t*t*t + 1) + b;
307	},
308	easeInOutQuint: function (x, t, b, c, d) {
309		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
310		return c/2*((t-=2)*t*t*t*t + 2) + b;
311	},
312	easeInSine: function (x, t, b, c, d) {
313		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
314	},
315	easeOutSine: function (x, t, b, c, d) {
316		return c * Math.sin(t/d * (Math.PI/2)) + b;
317	},
318	easeInOutSine: function (x, t, b, c, d) {
vendor: 4,172 bytes, lines 319-422
319		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
320	},
321	easeInExpo: function (x, t, b, c, d) {
322		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
323	},
324	easeOutExpo: function (x, t, b, c, d) {
325		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
326	},
327	easeInOutExpo: function (x, t, b, c, d) {
328		if (t==0) return b;
329		if (t==d) return b+c;
330		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
331		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
332	},
333	easeInCirc: function (x, t, b, c, d) {
334		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
335	},
336	easeOutCirc: function (x, t, b, c, d) {
337		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
338	},
339	easeInOutCirc: function (x, t, b, c, d) {
340		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
341		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
342	},
343	easeInElastic: function (x, t, b, c, d) {
344		var s=1.70158;var p=0;var a=c;
345		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
346		if (a < Math.abs(c)) { a=c; var s=p/4; }
347		else var s = p/(2*Math.PI) * Math.asin (c/a);
348		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
349	},
350	easeOutElastic: function (x, t, b, c, d) {
351		var s=1.70158;var p=0;var a=c;
352		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
353		if (a < Math.abs(c)) { a=c; var s=p/4; }
354		else var s = p/(2*Math.PI) * Math.asin (c/a);
355		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
356	},
357	easeInOutElastic: function (x, t, b, c, d) {
358		var s=1.70158;var p=0;var a=c;
359		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
360		if (a < Math.abs(c)) { a=c; var s=p/4; }
361		else var s = p/(2*Math.PI) * Math.asin (c/a);
362		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
363		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
364	},
365	easeInBack: function (x, t, b, c, d, s) {
366		if (s == undefined) s = 1.70158;
367		return c*(t/=d)*t*((s+1)*t - s) + b;
368	},
369	easeOutBack: function (x, t, b, c, d, s) {
370		if (s == undefined) s = 1.70158;
371		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
372	},
373	easeInOutBack: function (x, t, b, c, d, s) {
374		if (s == undefined) s = 1.70158;
375		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
376		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
377	},
378	easeInBounce: function (x, t, b, c, d) {
379		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
380	},
381	easeOutBounce: function (x, t, b, c, d) {
382		if ((t/=d) < (1/2.75)) {
383			return c*(7.5625*t*t) + b;
384		} else if (t < (2/2.75)) {
385			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
386		} else if (t < (2.5/2.75)) {
387			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
388		} else {
389			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
390		}
391	},
392	easeInOutBounce: function (x, t, b, c, d) {
393		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
394		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
395	}
396});
397
398/*
399 *
400 * TERMS OF USE - EASING EQUATIONS
401 *
402 * Open source under the BSD License.
403 *
404 * Copyright © 2001 Robert Penner
405 * All rights reserved.
406 *
407 * Redistribution and use in source and binary forms, with or without modification,
408 * are permitted provided that the following conditions are met:
409 *
410 * Redistributions of source code must retain the above copyright notice, this list of
411 * conditions and the following disclaimer.
412 * Redistributions in binary form must reproduce the above copyright notice, this list
413 * of conditions and the following disclaimer in the documentation and/or other materials
414 * provided with the distribution.
415 *
416 * Neither the name of the author nor the names of contributors may be used to endorse
417 * or promote products derived from this software without specific prior written permission.
418 *
419 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
420 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
421 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
422 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
423 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
424 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
425 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
426 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
427 * OF THE POSSIBILITY OF SUCH DAMAGE.
428 *
429 */
430
431
432
433/* DROPDOWN */
434
435(function ($) {
436
437  // Add posibility to scroll to selected option
438  // usefull for select for example
439  $.fn.scrollTo = function(elem) {
440    $(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem).offset().top);
441    return this;
442  };
443
444  $.fn.dropdown = function (option) {
445    var defaults = {
446      inDuration: 300,
447      outDuration: 225,
448      constrain_width: true, // Constrains width of dropdown to the activator
449      hover: false,
450      gutter: 0, // Spacing from edge
451      belowOrigin: false
452    };
453
454    this.each(function(){
455    var origin = $(this);
456    var options = $.extend({}, defaults, option);
457
458    // Dropdown menu
459    var activates = $("#"+ origin.attr('data-activates'));
460
461    function updateOptions() {
462      if (origin.data('induration') !== undefined)
463        options.inDuration = origin.data('inDuration');
464      if (origin.data('outduration') !== undefined)
465        options.outDuration = origin.data('outDuration');
466      if (origin.data('constrainwidth') !== undefined)
467        options.constrain_width = origin.data('constrainwidth');
468      if (origin.data('hover') !== undefined)
469        options.hover = origin.data('hover');
470      if (origin.data('gutter') !== undefined)
471        options.gutter = origin.data('gutter');
472      if (origin.data('beloworigin') !== undefined)
473        options.belowOrigin = origin.data('beloworigin');
474    }
475
476    updateOptions();
477
478    // Attach dropdown to its activator
479    origin.after(activates);
480
481    /*
482      Helper function to position and resize dropdown.
483      Used in hover and click handler.
484    */
485    function placeDropdown() {
486      // Check html data attributes
487      updateOptions();
488
489      // Set Dropdown state
490      activates.addClass('active');
491
492      // Constrain width
493      if (options.constrain_width === true) {
494        activates.css('width', origin.outerWidth());
495      }
496      var offset = 0;
497      if (options.belowOrigin === true) {
498        offset = origin.height();
499      }
500
501      // Handle edge alignment
502      var offsetLeft = origin.offset().left;
503      var width_difference = 0;
504      var gutter_spacing = options.gutter;
505
506
507      if (offsetLeft + activates.innerWidth() > $(window).width()) {
508        width_difference = origin.innerWidth() - activates.innerWidth();
509        gutter_spacing = gutter_spacing * -1;
510      }
511
512      // Position dropdown
513      activates.css({
514        position: 'absolute',
515        top: origin.position().top + offset,
516        left: origin.position().left + width_difference + gutter_spacing
517      });
518
519
520
521      // Show dropdown
522      activates.stop(true, true).css('opacity', 0)
523        .slideDown({
524        queue: false,
525        duration: options.inDuration,
526        easing: 'easeOutCubic',
527        complete: function() {
528          $(this).css('height', '');
529        }
530      })
531        .animate( {opacity: 1}, {queue: false, duration: options.inDuration, easing: 'easeOutSine'});
532    }
533
534    function hideDropdown() {
535      activates.fadeOut(options.outDuration);
536      activates.removeClass('active');
537    }
538
539    // Hover
540    if (options.hover) {
541      var open = false;
542      origin.unbind('click.' + origin.attr('id'));
543      // Hover handler to show dropdown
544      origin.on('mouseenter', function(e){ // Mouse over
545        if (open === false) {
546          placeDropdown();
547          open = true;
548        }
549      });
550      origin.on('mouseleave', function(e){
551        // If hover on origin then to something other than dropdown content, then close
552        var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element
553        if(!$(toEl).closest('.dropdown-content').is(activates)) {
554          activates.stop(true, true);
555          hideDropdown();
556          open = false;
vendor: 63,049 bytes, lines 557-1729
557        }
558      });
559
560      activates.on('mouseleave', function(e){ // Mouse out
561        var toEl = e.toElement || e.relatedTarget;
562        if(!$(toEl).closest('.dropdown-button').is(origin)) {
563          activates.stop(true, true);
564          hideDropdown();
565          open = false;
566        }
567      });
568
569    // Click
570    } else {
571
572      // Click handler to show dropdown
573      origin.unbind('click.' + origin.attr('id'));
574      origin.bind('click.'+origin.attr('id'), function(e){
575
576        if ( origin[0] == e.currentTarget && ($(e.target).closest('.dropdown-content').length === 0) ) {
577          e.preventDefault(); // Prevents button click from moving window
578          placeDropdown();
579
580        }
581        // If origin is clicked and menu is open, close menu
582        else {
583          if (origin.hasClass('active')) {
584            hideDropdown();
585            $(document).unbind('click.' + activates.attr('id'));
586          }
587        }
588        // If menu open, add click close handler to document
589        if (activates.hasClass('active')) {
590          $(document).bind('click.'+ activates.attr('id'), function (e) {
591            if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length > 0) ) {
592              hideDropdown();
593              $(document).unbind('click.' + activates.attr('id'));
594            }
595          });
596        }
597      });
598
599    } // End else
600
601    // Listen to open and close event - useful for select component
602    origin.on('open', placeDropdown);
603    origin.on('close', hideDropdown);
604
605
606   });
607  }; // End dropdown plugin
608
609  $(document).ready(function(){
610    $('.dropdown-button').dropdown();
611  });
612}( jQuery ));
613
614
615
616/* GLOBAL */
617
618Materialize = {};
619
620// Unique ID
621Materialize.guid = (function() {
622  function s4() {
623    return Math.floor((1 + Math.random()) * 0x10000)
624      .toString(16)
625      .substring(1);
626  }
627  return function() {
628    return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
629           s4() + '-' + s4() + s4() + s4();
630  };
631})();
632
633Materialize.elementOrParentIsFixed = function(element) {
634    var $element = $(element);
635    var $checkElements = $element.add($element.parents());
636    var isFixed = false;
637    $checkElements.each(function(){
638        if ($(this).css("position") === "fixed") {
639            isFixed = true;
640            return false;
641        }
642    });
643    return isFixed;
644};
645
646// Velocity has conflicts when loaded with jQuery, this will check for it
647/*var Vel;
648if ($) {
649  Vel = $.Velocity;
650}
651else {
652  Vel = Velocity;
653}*/
654
655
656/*! VelocityJS.org (1.2.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */
657/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */
658! function (e) {
659    function t(e) {
660        var t = e.length,
661            r = $.type(e);
662        return "function" === r || $.isWindow(e) ? !1 : 1 === e.nodeType && t ? !0 : "array" === r || 0 === t || "number" == typeof t && t > 0 && t - 1 in e
663    }
664    if (!e.jQuery) {
665        var $ = function (e, t) {
666            return new $.fn.init(e, t)
667        };
668        $.isWindow = function (e) {
669            return null != e && e == e.window
670        }, $.type = function (e) {
671            return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? a[o.call(e)] || "object" : typeof e
672        }, $.isArray = Array.isArray || function (e) {
673            return "array" === $.type(e)
674        }, $.isPlainObject = function (e) {
675            var t;
676            if (!e || "object" !== $.type(e) || e.nodeType || $.isWindow(e)) return !1;
677            try {
678                if (e.constructor && !n.call(e, "constructor") && !n.call(e.constructor.prototype, "isPrototypeOf")) return !1
679            } catch (r) {
680                return !1
681            }
682            for (t in e);
683            return void 0 === t || n.call(e, t)
684        }, $.each = function (e, r, a) {
685            var n, o = 0,
686                i = e.length,
687                s = t(e);
688            if (a) {
689                if (s)
690                    for (; i > o && (n = r.apply(e[o], a), n !== !1); o++);
691                else
692                    for (o in e)
693                        if (n = r.apply(e[o], a), n === !1) break
694            } else if (s)
695                for (; i > o && (n = r.call(e[o], o, e[o]), n !== !1); o++);
696            else
697                for (o in e)
698                    if (n = r.call(e[o], o, e[o]), n === !1) break; return e
699        }, $.data = function (e, t, a) {
700            if (void 0 === a) {
701                var n = e[$.expando],
702                    o = n && r[n];
703                if (void 0 === t) return o;
704                if (o && t in o) return o[t]
705            } else if (void 0 !== t) {
706                var n = e[$.expando] || (e[$.expando] = ++$.uuid);
707                return r[n] = r[n] || {}, r[n][t] = a, a
708            }
709        }, $.removeData = function (e, t) {
710            var a = e[$.expando],
711                n = a && r[a];
712            n && $.each(t, function (e, t) {
713                delete n[t]
714            })
715        }, $.extend = function () {
716            var e, t, r, a, n, o, i = arguments[0] || {},
717                s = 1,
718                l = arguments.length,
719                u = !1;
720            for ("boolean" == typeof i && (u = i, i = arguments[s] || {}, s++), "object" != typeof i && "function" !== $.type(i) && (i = {}), s === l && (i = this, s--); l > s; s++)
721                if (null != (n = arguments[s]))
722                    for (a in n) e = i[a], r = n[a], i !== r && (u && r && ($.isPlainObject(r) || (t = $.isArray(r))) ? (t ? (t = !1, o = e && $.isArray(e) ? e : []) : o = e && $.isPlainObject(e) ? e : {}, i[a] = $.extend(u, o, r)) : void 0 !== r && (i[a] = r));
723            return i
724        }, $.queue = function (e, r, a) {
725            function n(e, r) {
726                var a = r || [];
727                return null != e && (t(Object(e)) ? ! function (e, t) {
728                    for (var r = +t.length, a = 0, n = e.length; r > a;) e[n++] = t[a++];
729                    if (r !== r)
730                        for (; void 0 !== t[a];) e[n++] = t[a++];
731                    return e.length = n, e
732                }(a, "string" == typeof e ? [e] : e) : [].push.call(a, e)), a
733            }
734            if (e) {
735                r = (r || "fx") + "queue";
736                var o = $.data(e, r);
737                return a ? (!o || $.isArray(a) ? o = $.data(e, r, n(a)) : o.push(a), o) : o || []
738            }
739        }, $.dequeue = function (e, t) {
740            $.each(e.nodeType ? [e] : e, function (e, r) {
741                t = t || "fx";
742                var a = $.queue(r, t),
743                    n = a.shift();
744                "inprogress" === n && (n = a.shift()), n && ("fx" === t && a.unshift("inprogress"), n.call(r, function () {
745                    $.dequeue(r, t)
746                }))
747            })
748        }, $.fn = $.prototype = {
749            init: function (e) {
750                if (e.nodeType) return this[0] = e, this;
751                throw new Error("Not a DOM node.")
752            },
753            offset: function () {
754                var t = this[0].getBoundingClientRect ? this[0].getBoundingClientRect() : {
755                    top: 0,
756                    left: 0
757                };
758                return {
759                    top: t.top + (e.pageYOffset || document.scrollTop || 0) - (document.clientTop || 0),
760                    left: t.left + (e.pageXOffset || document.scrollLeft || 0) - (document.clientLeft || 0)
761                }
762            },
763            position: function () {
764                function e() {
765                    for (var e = this.offsetParent || document; e && "html" === !e.nodeType.toLowerCase && "static" === e.style.position;) e = e.offsetParent;
766                    return e || document
767                }
768                var t = this[0],
769                    e = e.apply(t),
770                    r = this.offset(),
771                    a = /^(?:body|html)$/i.test(e.nodeName) ? {
772                        top: 0,
773                        left: 0
774                    } : $(e).offset();
775                return r.top -= parseFloat(t.style.marginTop) || 0, r.left -= parseFloat(t.style.marginLeft) || 0, e.style && (a.top += parseFloat(e.style.borderTopWidth) || 0, a.left += parseFloat(e.style.borderLeftWidth) || 0), {
776                    top: r.top - a.top,
777                    left: r.left - a.left
778                }
779            }
780        };
781        var r = {};
782        $.expando = "velocity" + (new Date).getTime(), $.uuid = 0;
783        for (var a = {}, n = a.hasOwnProperty, o = a.toString, i = "Boolean Number String Function Array Date RegExp Object Error".split(" "), s = 0; s < i.length; s++) a["[object " + i[s] + "]"] = i[s].toLowerCase();
784        $.fn.init.prototype = $.fn, e.Velocity = {
785            Utilities: $
786        }
787    }
788}(window),
789function (e) {
790    "object" == typeof module && "object" == typeof module.exports ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : e()
791}(function () {
792    return function (e, t, r, a) {
793        function n(e) {
794            for (var t = -1, r = e ? e.length : 0, a = []; ++t < r;) {
795                var n = e[t];
796                n && a.push(n)
797            }
798            return a
799        }
800
801        function o(e) {
802            return g.isWrapped(e) ? e = [].slice.call(e) : g.isNode(e) && (e = [e]), e
803        }
804
805        function i(e) {
806            var t = $.data(e, "velocity");
807            return null === t ? a : t
808        }
809
810        function s(e) {
811            return function (t) {
812                return Math.round(t * e) * (1 / e)
813            }
814        }
815
816        function l(e, r, a, n) {
817            function o(e, t) {
818                return 1 - 3 * t + 3 * e
819            }
820
821            function i(e, t) {
822                return 3 * t - 6 * e
823            }
824
825            function s(e) {
826                return 3 * e
827            }
828
829            function l(e, t, r) {
830                return ((o(t, r) * e + i(t, r)) * e + s(t)) * e
831            }
832
833            function u(e, t, r) {
834                return 3 * o(t, r) * e * e + 2 * i(t, r) * e + s(t)
835            }
836
837            function c(t, r) {
838                for (var n = 0; m > n; ++n) {
839                    var o = u(r, e, a);
840                    if (0 === o) return r;
841                    var i = l(r, e, a) - t;
842                    r -= i / o
843                }
844                return r
845            }
846
847            function p() {
848                for (var t = 0; b > t; ++t) w[t] = l(t * x, e, a)
849            }
850
851            function f(t, r, n) {
852                var o, i, s = 0;
853                do i = r + (n - r) / 2, o = l(i, e, a) - t, o > 0 ? n = i : r = i; while (Math.abs(o) > h && ++s < v);
854                return i
855            }
856
857            function d(t) {
858                for (var r = 0, n = 1, o = b - 1; n != o && w[n] <= t; ++n) r += x;
859                --n;
860                var i = (t - w[n]) / (w[n + 1] - w[n]),
861                    s = r + i * x,
862                    l = u(s, e, a);
863                return l >= y ? c(t, s) : 0 == l ? s : f(t, r, r + x)
864            }
865
866            function g() {
867                V = !0, (e != r || a != n) && p()
868            }
869            var m = 4,
870                y = .001,
871                h = 1e-7,
872                v = 10,
873                b = 11,
874                x = 1 / (b - 1),
875                S = "Float32Array" in t;
876            if (4 !== arguments.length) return !1;
877            for (var P = 0; 4 > P; ++P)
878                if ("number" != typeof arguments[P] || isNaN(arguments[P]) || !isFinite(arguments[P])) return !1;
879            e = Math.min(e, 1), a = Math.min(a, 1), e = Math.max(e, 0), a = Math.max(a, 0);
880            var w = S ? new Float32Array(b) : new Array(b),
881                V = !1,
882                C = function (t) {
883                    return V || g(), e === r && a === n ? t : 0 === t ? 0 : 1 === t ? 1 : l(d(t), r, n)
884                };
885            C.getControlPoints = function () {
886                return [{
887                    x: e,
888                    y: r
889                }, {
890                    x: a,
891                    y: n
892                }]
893            };
894            var T = "generateBezier(" + [e, r, a, n] + ")";
895            return C.toString = function () {
896                return T
897            }, C
898        }
899
900        function u(e, t) {
901            var r = e;
902            return g.isString(e) ? v.Easings[e] || (r = !1) : r = g.isArray(e) && 1 === e.length ? s.apply(null, e) : g.isArray(e) && 2 === e.length ? b.apply(null, e.concat([t])) : g.isArray(e) && 4 === e.length ? l.apply(null, e) : !1, r === !1 && (r = v.Easings[v.defaults.easing] ? v.defaults.easing : h), r
903        }
904
905        function c(e) {
906            if (e) {
907                var t = (new Date).getTime(),
908                    r = v.State.calls.length;
909                r > 1e4 && (v.State.calls = n(v.State.calls));
910                for (var o = 0; r > o; o++)
911                    if (v.State.calls[o]) {
912                        var s = v.State.calls[o],
913                            l = s[0],
914                            u = s[2],
915                            f = s[3],
916                            d = !!f,
917                            m = null;
918                        f || (f = v.State.calls[o][3] = t - 16);
919                        for (var y = Math.min((t - f) / u.duration, 1), h = 0, b = l.length; b > h; h++) {
920                            var S = l[h],
921                                w = S.element;
922                            if (i(w)) {
923                                var V = !1;
924                                if (u.display !== a && null !== u.display && "none" !== u.display) {
925                                    if ("flex" === u.display) {
926                                        var C = ["-webkit-box", "-moz-box", "-ms-flexbox", "-webkit-flex"];
927                                        $.each(C, function (e, t) {
928                                            x.setPropertyValue(w, "display", t)
929                                        })
930                                    }
931                                    x.setPropertyValue(w, "display", u.display)
932                                }
933                                u.visibility !== a && "hidden" !== u.visibility && x.setPropertyValue(w, "visibility", u.visibility);
934                                for (var T in S)
935                                    if ("element" !== T) {
936                                        var k = S[T],
937                                            A, F = g.isString(k.easing) ? v.Easings[k.easing] : k.easing;
938                                        if (1 === y) A = k.endValue;
939                                        else {
940                                            var E = k.endValue - k.startValue;
941                                            if (A = k.startValue + E * F(y, u, E), !d && A === k.currentValue) continue
942                                        }
943                                        if (k.currentValue = A, "tween" === T) m = A;
944                                        else {
945                                            if (x.Hooks.registered[T]) {
946                                                var j = x.Hooks.getRoot(T),
947                                                    H = i(w).rootPropertyValueCache[j];
948                                                H && (k.rootPropertyValue = H)
949                                            }
950                                            var N = x.setPropertyValue(w, T, k.currentValue + (0 === parseFloat(A) ? "" : k.unitType), k.rootPropertyValue, k.scrollData);
951                                            x.Hooks.registered[T] && (i(w).rootPropertyValueCache[j] = x.Normalizations.registered[j] ? x.Normalizations.registered[j]("extract", null, N[1]) : N[1]), "transform" === N[0] && (V = !0)
952                                        }
953                                    }
954                                u.mobileHA && i(w).transformCache.translate3d === a && (i(w).transformCache.translate3d = "(0px, 0px, 0px)", V = !0), V && x.flushTransformCache(w)
955                            }
956                        }
957                        u.display !== a && "none" !== u.display && (v.State.calls[o][2].display = !1), u.visibility !== a && "hidden" !== u.visibility && (v.State.calls[o][2].visibility = !1), u.progress && u.progress.call(s[1], s[1], y, Math.max(0, f + u.duration - t), f, m), 1 === y && p(o)
958                    }
959            }
960            v.State.isTicking && P(c)
961        }
962
963        function p(e, t) {
964            if (!v.State.calls[e]) return !1;
965            for (var r = v.State.calls[e][0], n = v.State.calls[e][1], o = v.State.calls[e][2], s = v.State.calls[e][4], l = !1, u = 0, c = r.length; c > u; u++) {
966                var p = r[u].element;
967                if (t || o.loop || ("none" === o.display && x.setPropertyValue(p, "display", o.display), "hidden" === o.visibility && x.setPropertyValue(p, "visibility", o.visibility)), o.loop !== !0 && ($.queue(p)[1] === a || !/\.velocityQueueEntryFlag/i.test($.queue(p)[1])) && i(p)) {
968                    i(p).isAnimating = !1, i(p).rootPropertyValueCache = {};
969                    var f = !1;
970                    $.each(x.Lists.transforms3D, function (e, t) {
971                        var r = /^scale/.test(t) ? 1 : 0,
972                            n = i(p).transformCache[t];
973                        i(p).transformCache[t] !== a && new RegExp("^\\(" + r + "[^.]").test(n) && (f = !0, delete i(p).transformCache[t])
974                    }), o.mobileHA && (f = !0, delete i(p).transformCache.translate3d), f && x.flushTransformCache(p), x.Values.removeClass(p, "velocity-animating")
975                }
976                if (!t && o.complete && !o.loop && u === c - 1) try {
977                    o.complete.call(n, n)
978                } catch (d) {
979                    setTimeout(function () {
980                        throw d
981                    }, 1)
982                }
983                s && o.loop !== !0 && s(n), i(p) && o.loop === !0 && !t && ($.each(i(p).tweensContainer, function (e, t) {
984                    /^rotate/.test(e) && 360 === parseFloat(t.endValue) && (t.endValue = 0, t.startValue = 360), /^backgroundPosition/.test(e) && 100 === parseFloat(t.endValue) && "%" === t.unitType && (t.endValue = 0, t.startValue = 100)
985                }), v(p, "reverse", {
986                    loop: !0,
987                    delay: o.delay
988                })), o.queue !== !1 && $.dequeue(p, o.queue)
989            }
990            v.State.calls[e] = !1;
991            for (var g = 0, m = v.State.calls.length; m > g; g++)
992                if (v.State.calls[g] !== !1) {
993                    l = !0;
994                    break
995                }
996            l === !1 && (v.State.isTicking = !1, delete v.State.calls, v.State.calls = [])
997        }
998        var f = function () {
999                if (r.documentMode) return r.documentMode;
1000                for (var e = 7; e > 4; e--) {
1001                    var t = r.createElement("div");
1002                    if (t.innerHTML = "<!--[if IE " + e + "]><span></span><![endif]-->", t.getElementsByTagName("span").length) return t = null, e
1003                }
1004                return a
1005            }(),
1006            d = function () {
1007                var e = 0;
1008                return t.webkitRequestAnimationFrame || t.mozRequestAnimationFrame || function (t) {
1009                    var r = (new Date).getTime(),
1010                        a;
1011                    return a = Math.max(0, 16 - (r - e)), e = r + a, setTimeout(function () {
1012                        t(r + a)
1013                    }, a)
1014                }
1015            }(),
1016            g = {
1017                isString: function (e) {
1018                    return "string" == typeof e
1019                },
1020                isArray: Array.isArray || function (e) {
1021                    return "[object Array]" === Object.prototype.toString.call(e)
1022                },
1023                isFunction: function (e) {
1024                    return "[object Function]" === Object.prototype.toString.call(e)
1025                },
1026                isNode: function (e) {
1027                    return e && e.nodeType
1028                },
1029                isNodeList: function (e) {
1030                    return "object" == typeof e && /^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e)) && e.length !== a && (0 === e.length || "object" == typeof e[0] && e[0].nodeType > 0)
1031                },
1032                isWrapped: function (e) {
1033                    return e && (e.jquery || t.Zepto && t.Zepto.zepto.isZ(e))
1034                },
1035                isSVG: function (e) {
1036                    return t.SVGElement && e instanceof t.SVGElement
1037                },
1038                isEmptyObject: function (e) {
1039                    for (var t in e) return !1;
1040                    return !0
1041                }
1042            },
1043            $, m = !1;
1044        if (e.fn && e.fn.jquery ? ($ = e, m = !0) : $ = t.Velocity.Utilities, 8 >= f && !m) throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");
1045        if (7 >= f) return void(jQuery.fn.velocity = jQuery.fn.animate);
1046        var y = 400,
1047            h = "swing",
1048            v = {
1049                State: {
1050                    isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
1051                    isAndroid: /Android/i.test(navigator.userAgent),
1052                    isGingerbread: /Android 2\.3\.[3-7]/i.test(navigator.userAgent),
1053                    isChrome: t.chrome,
1054                    isFirefox: /Firefox/i.test(navigator.userAgent),
1055                    prefixElement: r.createElement("div"),
1056                    prefixMatches: {},
1057                    scrollAnchor: null,
1058                    scrollPropertyLeft: null,
1059                    scrollPropertyTop: null,
1060                    isTicking: !1,
1061                    calls: []
1062                },
1063                CSS: {},
1064                Utilities: $,
1065                Redirects: {},
1066                Easings: {},
1067                Promise: t.Promise,
1068                defaults: {
1069                    queue: "",
1070                    duration: y,
1071                    easing: h,
1072                    begin: a,
1073                    complete: a,
1074                    progress: a,
1075                    display: a,
1076                    visibility: a,
1077                    loop: !1,
1078                    delay: !1,
1079                    mobileHA: !0,
1080                    _cacheValues: !0
1081                },
1082                init: function (e) {
1083                    $.data(e, "velocity", {
1084                        isSVG: g.isSVG(e),
1085                        isAnimating: !1,
1086                        computedStyle: null,
1087                        tweensContainer: null,
1088                        rootPropertyValueCache: {},
1089                        transformCache: {}
1090                    })
1091                },
1092                hook: null,
1093                mock: !1,
1094                version: {
1095                    major: 1,
1096                    minor: 2,
1097                    patch: 2
1098                },
1099                debug: !1
1100            };
1101        t.pageYOffset !== a ? (v.State.scrollAnchor = t, v.State.scrollPropertyLeft = "pageXOffset", v.State.scrollPropertyTop = "pageYOffset") : (v.State.scrollAnchor = r.documentElement || r.body.parentNode || r.body, v.State.scrollPropertyLeft = "scrollLeft", v.State.scrollPropertyTop = "scrollTop");
1102        var b = function () {
1103            function e(e) {
1104                return -e.tension * e.x - e.friction * e.v
1105            }
1106
1107            function t(t, r, a) {
1108                var n = {
1109                    x: t.x + a.dx * r,
1110                    v: t.v + a.dv * r,
1111                    tension: t.tension,
1112                    friction: t.friction
1113                };
1114                return {
1115                    dx: n.v,
1116                    dv: e(n)
1117                }
1118            }
1119
1120            function r(r, a) {
1121                var n = {
1122                        dx: r.v,
1123                        dv: e(r)
1124                    },
1125                    o = t(r, .5 * a, n),
1126                    i = t(r, .5 * a, o),
1127                    s = t(r, a, i),
1128                    l = 1 / 6 * (n.dx + 2 * (o.dx + i.dx) + s.dx),
1129                    u = 1 / 6 * (n.dv + 2 * (o.dv + i.dv) + s.dv);
1130                return r.x = r.x + l * a, r.v = r.v + u * a, r
1131            }
1132            return function a(e, t, n) {
1133                var o = {
1134                        x: -1,
1135                        v: 0,
1136                        tension: null,
1137                        friction: null
1138                    },
1139                    i = [0],
1140                    s = 0,
1141                    l = 1e-4,
1142                    u = .016,
1143                    c, p, f;
1144                for (e = parseFloat(e) || 500, t = parseFloat(t) || 20, n = n || null, o.tension = e, o.friction = t, c = null !== n, c ? (s = a(e, t), p = s / n * u) : p = u;;)
1145                    if (f = r(f || o, p), i.push(1 + f.x), s += 16, !(Math.abs(f.x) > l && Math.abs(f.v) > l)) break;
1146                return c ? function (e) {
1147                    return i[e * (i.length - 1) | 0]
1148                } : s
1149            }
1150        }();
1151        v.Easings = {
1152            linear: function (e) {
1153                return e
1154            },
1155            swing: function (e) {
1156                return .5 - Math.cos(e * Math.PI) / 2
1157            },
1158            spring: function (e) {
1159                return 1 - Math.cos(4.5 * e * Math.PI) * Math.exp(6 * -e)
1160            }
1161        }, $.each([["ease", [.25, .1, .25, 1]], ["ease-in", [.42, 0, 1, 1]], ["ease-out", [0, 0, .58, 1]], ["ease-in-out", [.42, 0, .58, 1]], ["easeInSine", [.47, 0, .745, .715]], ["easeOutSine", [.39, .575, .565, 1]], ["easeInOutSine", [.445, .05, .55, .95]], ["easeInQuad", [.55, .085, .68, .53]], ["easeOutQuad", [.25, .46, .45, .94]], ["easeInOutQuad", [.455, .03, .515, .955]], ["easeInCubic", [.55, .055, .675, .19]], ["easeOutCubic", [.215, .61, .355, 1]], ["easeInOutCubic", [.645, .045, .355, 1]], ["easeInQuart", [.895, .03, .685, .22]], ["easeOutQuart", [.165, .84, .44, 1]], ["easeInOutQuart", [.77, 0, .175, 1]], ["easeInQuint", [.755, .05, .855, .06]], ["easeOutQuint", [.23, 1, .32, 1]], ["easeInOutQuint", [.86, 0, .07, 1]], ["easeInExpo", [.95, .05, .795, .035]], ["easeOutExpo", [.19, 1, .22, 1]], ["easeInOutExpo", [1, 0, 0, 1]], ["easeInCirc", [.6, .04, .98, .335]], ["easeOutCirc", [.075, .82, .165, 1]], ["easeInOutCirc", [.785, .135, .15, .86]]], function (e, t) {
1162            v.Easings[t[0]] = l.apply(null, t[1])
1163        });
1164        var x = v.CSS = {
1165            RegEx: {
1166                isHex: /^#([A-f\d]{3}){1,2}$/i,
1167                valueUnwrap: /^[A-z]+\((.*)\)$/i,
1168                wrappedValueAlreadyExtracted: /[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,
1169                valueSplit: /([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi
1170            },
1171            Lists: {
1172                colors: ["fill", "stroke", "stopColor", "color", "backgroundColor", "borderColor", "borderTopColor", "borderRightColor", "borderBottomColor", "borderLeftColor", "outlineColor"],
1173                transformsBase: ["translateX", "translateY", "scale", "scaleX", "scaleY", "skewX", "skewY", "rotateZ"],
1174                transforms3D: ["transformPerspective", "translateZ", "scaleZ", "rotateX", "rotateY"]
1175            },
1176            Hooks: {
1177                templates: {
1178                    textShadow: ["Color X Y Blur", "black 0px 0px 0px"],
1179                    boxShadow: ["Color X Y Blur Spread", "black 0px 0px 0px 0px"],
1180                    clip: ["Top Right Bottom Left", "0px 0px 0px 0px"],
1181                    backgroundPosition: ["X Y", "0% 0%"],
1182                    transformOrigin: ["X Y Z", "50% 50% 0px"],
1183                    perspectiveOrigin: ["X Y", "50% 50%"]
1184                },
1185                registered: {},
1186                register: function () {
1187                    for (var e = 0; e < x.Lists.colors.length; e++) {
1188                        var t = "color" === x.Lists.colors[e] ? "0 0 0 1" : "255 255 255 1";
1189                        x.Hooks.templates[x.Lists.colors[e]] = ["Red Green Blue Alpha", t]
1190                    }
1191                    var r, a, n;
1192                    if (f)
1193                        for (r in x.Hooks.templates) {
1194                            a = x.Hooks.templates[r], n = a[0].split(" ");
1195                            var o = a[1].match(x.RegEx.valueSplit);
1196                            "Color" === n[0] && (n.push(n.shift()), o.push(o.shift()), x.Hooks.templates[r] = [n.join(" "), o.join(" ")])
1197                        }
1198                    for (r in x.Hooks.templates) {
1199                        a = x.Hooks.templates[r], n = a[0].split(" ");
1200                        for (var e in n) {
1201                            var i = r + n[e],
1202                                s = e;
1203                            x.Hooks.registered[i] = [r, s]
1204                        }
1205                    }
1206                },
1207                getRoot: function (e) {
1208                    var t = x.Hooks.registered[e];
1209                    return t ? t[0] : e
1210                },
1211                cleanRootPropertyValue: function (e, t) {
1212                    return x.RegEx.valueUnwrap.test(t) && (t = t.match(x.RegEx.valueUnwrap)[1]), x.Values.isCSSNullValue(t) && (t = x.Hooks.templates[e][1]), t
1213                },
1214                extractValue: function (e, t) {
1215                    var r = x.Hooks.registered[e];
1216                    if (r) {
1217                        var a = r[0],
1218                            n = r[1];
1219                        return t = x.Hooks.cleanRootPropertyValue(a, t), t.toString().match(x.RegEx.valueSplit)[n]
1220                    }
1221                    return t
1222                },
1223                injectValue: function (e, t, r) {
1224                    var a = x.Hooks.registered[e];
1225                    if (a) {
1226                        var n = a[0],
1227                            o = a[1],
1228                            i, s;
1229                        return r = x.Hooks.cleanRootPropertyValue(n, r), i = r.toString().match(x.RegEx.valueSplit), i[o] = t, s = i.join(" ")
1230                    }
1231                    return r
1232                }
1233            },
1234            Normalizations: {
1235                registered: {
1236                    clip: function (e, t, r) {
1237                        switch (e) {
1238                        case "name":
1239                            return "clip";
1240                        case "extract":
1241                            var a;
1242                            return x.RegEx.wrappedValueAlreadyExtracted.test(r) ? a = r : (a = r.toString().match(x.RegEx.valueUnwrap), a = a ? a[1].replace(/,(\s+)?/g, " ") : r), a;
1243                        case "inject":
1244                            return "rect(" + r + ")"
1245                        }
1246                    },
1247                    blur: function (e, t, r) {
1248                        switch (e) {
1249                        case "name":
1250                            return v.State.isFirefox ? "filter" : "-webkit-filter";
1251                        case "extract":
1252                            var a = parseFloat(r);
1253                            if (!a && 0 !== a) {
1254                                var n = r.toString().match(/blur\(([0-9]+[A-z]+)\)/i);
1255                                a = n ? n[1] : 0
1256                            }
1257                            return a;
1258                        case "inject":
1259                            return parseFloat(r) ? "blur(" + r + ")" : "none"
1260                        }
1261                    },
1262                    opacity: function (e, t, r) {
1263                        if (8 >= f) switch (e) {
1264                        case "name":
1265                            return "filter";
1266                        case "extract":
1267                            var a = r.toString().match(/alpha\(opacity=(.*)\)/i);
1268                            return r = a ? a[1] / 100 : 1;
1269                        case "inject":
1270                            return t.style.zoom = 1, parseFloat(r) >= 1 ? "" : "alpha(opacity=" + parseInt(100 * parseFloat(r), 10) + ")"
1271                        } else switch (e) {
1272                        case "name":
1273                            return "opacity";
1274                        case "extract":
1275                            return r;
1276                        case "inject":
1277                            return r
1278                        }
1279                    }
1280                },
1281                register: function () {
1282                    9 >= f || v.State.isGingerbread || (x.Lists.transformsBase = x.Lists.transformsBase.concat(x.Lists.transforms3D));
1283                    for (var e = 0; e < x.Lists.transformsBase.length; e++) ! function () {
1284                        var t = x.Lists.transformsBase[e];
1285                        x.Normalizations.registered[t] = function (e, r, n) {
1286                            switch (e) {
1287                            case "name":
1288                                return "transform";
1289                            case "extract":
1290                                return i(r) === a || i(r).transformCache[t] === a ? /^scale/i.test(t) ? 1 : 0 : i(r).transformCache[t].replace(/[()]/g, "");
1291                            case "inject":
1292                                var o = !1;
1293                                switch (t.substr(0, t.length - 1)) {
1294                                case "translate":
1295                                    o = !/(%|px|em|rem|vw|vh|\d)$/i.test(n);
1296                                    break;
1297                                case "scal":
1298                                case "scale":
1299                                    v.State.isAndroid && i(r).transformCache[t] === a && 1 > n && (n = 1), o = !/(\d)$/i.test(n);
1300                                    break;
1301                                case "skew":
1302                                    o = !/(deg|\d)$/i.test(n);
1303                                    break;
1304                                case "rotate":
1305                                    o = !/(deg|\d)$/i.test(n)
1306                                }
1307                                return o || (i(r).transformCache[t] = "(" + n + ")"), i(r).transformCache[t]
1308                            }
1309                        }
1310                    }();
1311                    for (var e = 0; e < x.Lists.colors.length; e++) ! function () {
1312                        var t = x.Lists.colors[e];
1313                        x.Normalizations.registered[t] = function (e, r, n) {
1314                            switch (e) {
1315                            case "name":
1316                                return t;
1317                            case "extract":
1318                                var o;
1319                                if (x.RegEx.wrappedValueAlreadyExtracted.test(n)) o = n;
1320                                else {
1321                                    var i, s = {
1322                                        black: "rgb(0, 0, 0)",
1323                                        blue: "rgb(0, 0, 255)",
1324                                        gray: "rgb(128, 128, 128)",
1325                                        green: "rgb(0, 128, 0)",
1326                                        red: "rgb(255, 0, 0)",
1327                                        white: "rgb(255, 255, 255)"
1328                                    };
1329                                    /^[A-z]+$/i.test(n) ? i = s[n] !== a ? s[n] : s.black : x.RegEx.isHex.test(n) ? i = "rgb(" + x.Values.hexToRgb(n).join(" ") + ")" : /^rgba?\(/i.test(n) || (i = s.black), o = (i || n).toString().match(x.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g, " ")
1330                                }
1331                                return 8 >= f || 3 !== o.split(" ").length || (o += " 1"), o;
1332                            case "inject":
1333                                return 8 >= f ? 4 === n.split(" ").length && (n = n.split(/\s+/).slice(0, 3).join(" ")) : 3 === n.split(" ").length && (n += " 1"), (8 >= f ? "rgb" : "rgba") + "(" + n.replace(/\s+/g, ",").replace(/\.(\d)+(?=,)/g, "") + ")"
1334                            }
1335                        }
1336                    }()
1337                }
1338            },
1339            Names: {
1340                camelCase: function (e) {
1341                    return e.replace(/-(\w)/g, function (e, t) {
1342                        return t.toUpperCase()
1343                    })
1344                },
1345                SVGAttribute: function (e) {
1346                    var t = "width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";
1347                    return (f || v.State.isAndroid && !v.State.isChrome) && (t += "|transform"), new RegExp("^(" + t + ")$", "i").test(e)
1348                },
1349                prefixCheck: function (e) {
1350                    if (v.State.prefixMatches[e]) return [v.State.prefixMatches[e], !0];
1351                    for (var t = ["", "Webkit", "Moz", "ms", "O"], r = 0, a = t.length; a > r; r++) {
1352                        var n;
1353                        if (n = 0 === r ? e : t[r] + e.replace(/^\w/, function (e) {
1354                                return e.toUpperCase()
1355                            }), g.isString(v.State.prefixElement.style[n])) return v.State.prefixMatches[e] = n, [n, !0]
1356                    }
1357                    return [e, !1]
1358                }
1359            },
1360            Values: {
1361                hexToRgb: function (e) {
1362                    var t = /^#?([a-f\d])([a-f\d])([a-f\d])$/i,
1363                        r = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,
1364                        a;
1365                    return e = e.replace(t, function (e, t, r, a) {
1366                        return t + t + r + r + a + a
1367                    }), a = r.exec(e), a ? [parseInt(a[1], 16), parseInt(a[2], 16), parseInt(a[3], 16)] : [0, 0, 0]
1368                },
1369                isCSSNullValue: function (e) {
1370                    return 0 == e || /^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)
1371                },
1372                getUnitType: function (e) {
1373                    return /^(rotate|skew)/i.test(e) ? "deg" : /(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e) ? "" : "px"
1374                },
1375                getDisplayType: function (e) {
1376                    var t = e && e.tagName.toString().toLowerCase();
1377                    return /^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t) ? "inline" : /^(li)$/i.test(t) ? "list-item" : /^(tr)$/i.test(t) ? "table-row" : /^(table)$/i.test(t) ? "table" : /^(tbody)$/i.test(t) ? "table-row-group" : "block"
1378                },
1379                addClass: function (e, t) {
1380                    e.classList ? e.classList.add(t) : e.className += (e.className.length ? " " : "") + t
1381                },
1382                removeClass: function (e, t) {
1383                    e.classList ? e.classList.remove(t) : e.className = e.className.toString().replace(new RegExp("(^|\\s)" + t.split(" ").join("|") + "(\\s|$)", "gi"), " ")
1384                }
1385            },
1386            getPropertyValue: function (e, r, n, o) {
1387                function s(e, r) {
1388                    function n() {
1389                        u && x.setPropertyValue(e, "display", "none")
1390                    }
1391                    var l = 0;
1392                    if (8 >= f) l = $.css(e, r);
1393                    else {
1394                        var u = !1;
1395                        if (/^(width|height)$/.test(r) && 0 === x.getPropertyValue(e, "display") && (u = !0, x.setPropertyValue(e, "display", x.Values.getDisplayType(e))), !o) {
1396                            if ("height" === r && "border-box" !== x.getPropertyValue(e, "boxSizing").toString().toLowerCase()) {
1397                                var c = e.offsetHeight - (parseFloat(x.getPropertyValue(e, "borderTopWidth")) || 0) - (parseFloat(x.getPropertyValue(e, "borderBottomWidth")) || 0) - (parseFloat(x.getPropertyValue(e, "paddingTop")) || 0) - (parseFloat(x.getPropertyValue(e, "paddingBottom")) || 0);
1398                                return n(), c
1399                            }
1400                            if ("width" === r && "border-box" !== x.getPropertyValue(e, "boxSizing").toString().toLowerCase()) {
1401                                var p = e.offsetWidth - (parseFloat(x.getPropertyValue(e, "borderLeftWidth")) || 0) - (parseFloat(x.getPropertyValue(e, "borderRightWidth")) || 0) - (parseFloat(x.getPropertyValue(e, "paddingLeft")) || 0) - (parseFloat(x.getPropertyValue(e, "paddingRight")) || 0);
1402                                return n(), p
1403                            }
1404                        }
1405                        var d;
1406                        d = i(e) === a ? t.getComputedStyle(e, null) : i(e).computedStyle ? i(e).computedStyle : i(e).computedStyle = t.getComputedStyle(e, null), "borderColor" === r && (r = "borderTopColor"), l = 9 === f && "filter" === r ? d.getPropertyValue(r) : d[r], ("" === l || null === l) && (l = e.style[r]), n()
1407                    }
1408                    if ("auto" === l && /^(top|right|bottom|left)$/i.test(r)) {
1409                        var g = s(e, "position");
1410                        ("fixed" === g || "absolute" === g && /top|left/i.test(r)) && (l = $(e).position()[r] + "px")
1411                    }
1412                    return l
1413                }
1414                var l;
1415                if (x.Hooks.registered[r]) {
1416                    var u = r,
1417                        c = x.Hooks.getRoot(u);
1418                    n === a && (n = x.getPropertyValue(e, x.Names.prefixCheck(c)[0])), x.Normalizations.registered[c] && (n = x.Normalizations.registered[c]("extract", e, n)), l = x.Hooks.extractValue(u, n)
1419                } else if (x.Normalizations.registered[r]) {
1420                    var p, d;
1421                    p = x.Normalizations.registered[r]("name", e), "transform" !== p && (d = s(e, x.Names.prefixCheck(p)[0]), x.Values.isCSSNullValue(d) && x.Hooks.templates[r] && (d = x.Hooks.templates[r][1])), l = x.Normalizations.registered[r]("extract", e, d)
1422                }
1423                if (!/^[\d-]/.test(l))
1424                    if (i(e) && i(e).isSVG && x.Names.SVGAttribute(r))
1425                        if (/^(height|width)$/i.test(r)) try {
1426                            l = e.getBBox()[r]
1427                        } catch (g) {
1428                            l = 0
1429                        } else l = e.getAttribute(r);
1430                        else l = s(e, x.Names.prefixCheck(r)[0]);
1431                return x.Values.isCSSNullValue(l) && (l = 0), v.debug >= 2 && console.log("Get " + r + ": " + l), l
1432            },
1433            setPropertyValue: function (e, r, a, n, o) {
1434                var s = r;
1435                if ("scroll" === r) o.container ? o.container["scroll" + o.direction] = a : "Left" === o.direction ? t.scrollTo(a, o.alternateValue) : t.scrollTo(o.alternateValue, a);
1436                else if (x.Normalizations.registered[r] && "transform" === x.Normalizations.registered[r]("name", e)) x.Normalizations.registered[r]("inject", e, a), s = "transform", a = i(e).transformCache[r];
1437                else {
1438                    if (x.Hooks.registered[r]) {
1439                        var l = r,
1440                            u = x.Hooks.getRoot(r);
1441                        n = n || x.getPropertyValue(e, u), a = x.Hooks.injectValue(l, a, n), r = u
1442                    }
1443                    if (x.Normalizations.registered[r] && (a = x.Normalizations.registered[r]("inject", e, a), r = x.Normalizations.registered[r]("name", e)), s = x.Names.prefixCheck(r)[0], 8 >= f) try {
1444                        e.style[s] = a
1445                    } catch (c) {
1446                        v.debug && console.log("Browser does not support [" + a + "] for [" + s + "]")
1447                    } else i(e) && i(e).isSVG && x.Names.SVGAttribute(r) ? e.setAttribute(r, a) : e.style[s] = a;
1448                    v.debug >= 2 && console.log("Set " + r + " (" + s + "): " + a)
1449                }
1450                return [s, a]
1451            },
1452            flushTransformCache: function (e) {
1453                function t(t) {
1454                    return parseFloat(x.getPropertyValue(e, t))
1455                }
1456                var r = "";
1457                if ((f || v.State.isAndroid && !v.State.isChrome) && i(e).isSVG) {
1458                    var a = {
1459                        translate: [t("translateX"), t("translateY")],
1460                        skewX: [t("skewX")],
1461                        skewY: [t("skewY")],
1462                        scale: 1 !== t("scale") ? [t("scale"), t("scale")] : [t("scaleX"), t("scaleY")],
1463                        rotate: [t("rotateZ"), 0, 0]
1464                    };
1465                    $.each(i(e).transformCache, function (e) {
1466                        /^translate/i.test(e) ? e = "translate" : /^scale/i.test(e) ? e = "scale" : /^rotate/i.test(e) && (e = "rotate"), a[e] && (r += e + "(" + a[e].join(" ") + ") ", delete a[e])
1467                    })
1468                } else {
1469                    var n, o;
1470                    $.each(i(e).transformCache, function (t) {
1471                        return n = i(e).transformCache[t], "transformPerspective" === t ? (o = n, !0) : (9 === f && "rotateZ" === t && (t = "rotate"), void(r += t + n + " "))
1472                    }), o && (r = "perspective" + o + " " + r)
1473                }
1474                x.setPropertyValue(e, "transform", r)
1475            }
1476        };
1477        x.Hooks.register(), x.Normalizations.register(), v.hook = function (e, t, r) {
1478            var n = a;
1479            return e = o(e), $.each(e, function (e, o) {
1480                if (i(o) === a && v.init(o), r === a) n === a && (n = v.CSS.getPropertyValue(o, t));
1481                else {
1482                    var s = v.CSS.setPropertyValue(o, t, r);
1483                    "transform" === s[0] && v.CSS.flushTransformCache(o), n = s
1484                }
1485            }), n
1486        };
1487        var S = function () {
1488            function e() {
1489                return l ? T.promise || null : f
1490            }
1491
1492            function n() {
1493                function e(e) {
1494                    function p(e, t) {
1495                        var r = a,
1496                            i = a,
1497                            s = a;
1498                        return g.isArray(e) ? (r = e[0], !g.isArray(e[1]) && /^[\d-]/.test(e[1]) || g.isFunction(e[1]) || x.RegEx.isHex.test(e[1]) ? s = e[1] : (g.isString(e[1]) && !x.RegEx.isHex.test(e[1]) || g.isArray(e[1])) && (i = t ? e[1] : u(e[1], o.duration), e[2] !== a && (s = e[2]))) : r = e, t || (i = i || o.easing), g.isFunction(r) && (r = r.call(n, w, P)), g.isFunction(s) && (s = s.call(n, w, P)), [r || 0, i, s]
1499                    }
1500
1501                    function f(e, t) {
1502                        var r, a;
1503                        return a = (t || "0").toString().toLowerCase().replace(/[%A-z]+$/, function (e) {
1504                            return r = e, ""
1505                        }), r || (r = x.Values.getUnitType(e)), [a, r]
1506                    }
1507
1508                    function d() {
1509                        var e = {
1510                                myParent: n.parentNode || r.body,
1511                                position: x.getPropertyValue(n, "position"),
1512                                fontSize: x.getPropertyValue(n, "fontSize")
1513                            },
1514                            a = e.position === N.lastPosition && e.myParent === N.lastParent,
1515                            o = e.fontSize === N.lastFontSize;
1516                        N.lastParent = e.myParent, N.lastPosition = e.position, N.lastFontSize = e.fontSize;
1517                        var s = 100,
1518                            l = {};
1519                        if (o && a) l.emToPx = N.lastEmToPx, l.percentToPxWidth = N.lastPercentToPxWidth, l.percentToPxHeight = N.lastPercentToPxHeight;
1520                        else {
1521                            var u = i(n).isSVG ? r.createElementNS("http://www.w3.org/2000/svg", "rect") : r.createElement("div");
1522                            v.init(u), e.myParent.appendChild(u), $.each(["overflow", "overflowX", "overflowY"], function (e, t) {
1523                                v.CSS.setPropertyValue(u, t, "hidden")
1524                            }), v.CSS.setPropertyValue(u, "position", e.position), v.CSS.setPropertyValue(u, "fontSize", e.fontSize), v.CSS.setPropertyValue(u, "boxSizing", "content-box"), $.each(["minWidth", "maxWidth", "width", "minHeight", "maxHeight", "height"], function (e, t) {
1525                                v.CSS.setPropertyValue(u, t, s + "%")
1526                            }), v.CSS.setPropertyValue(u, "paddingLeft", s + "em"), l.percentToPxWidth = N.lastPercentToPxWidth = (parseFloat(x.getPropertyValue(u, "width", null, !0)) || 1) / s, l.percentToPxHeight = N.lastPercentToPxHeight = (parseFloat(x.getPropertyValue(u, "height", null, !0)) || 1) / s, l.emToPx = N.lastEmToPx = (parseFloat(x.getPropertyValue(u, "paddingLeft")) || 1) / s, e.myParent.removeChild(u)
1527                        }
1528                        return null === N.remToPx && (N.remToPx = parseFloat(x.getPropertyValue(r.body, "fontSize")) || 16), null === N.vwToPx && (N.vwToPx = parseFloat(t.innerWidth) / 100, N.vhToPx = parseFloat(t.innerHeight) / 100), l.remToPx = N.remToPx, l.vwToPx = N.vwToPx, l.vhToPx = N.vhToPx, v.debug >= 1 && console.log("Unit ratios: " + JSON.stringify(l), n), l
1529                    }
1530                    if (o.begin && 0 === w) try {
1531                        o.begin.call(m, m)
1532                    } catch (y) {
1533                        setTimeout(function () {
1534                            throw y
1535                        }, 1)
1536                    }
1537                    if ("scroll" === k) {
1538                        var S = /^x$/i.test(o.axis) ? "Left" : "Top",
1539                            V = parseFloat(o.offset) || 0,
1540                            C, A, F;
1541                        o.container ? g.isWrapped(o.container) || g.isNode(o.container) ? (o.container = o.container[0] || o.container, C = o.container["scroll" + S], F = C + $(n).position()[S.toLowerCase()] + V) : o.container = null : (C = v.State.scrollAnchor[v.State["scrollProperty" + S]], A = v.State.scrollAnchor[v.State["scrollProperty" + ("Left" === S ? "Top" : "Left")]], F = $(n).offset()[S.toLowerCase()] + V), s = {
1542                            scroll: {
1543                                rootPropertyValue: !1,
1544                                startValue: C,
1545                                currentValue: C,
1546                                endValue: F,
1547                                unitType: "",
1548                                easing: o.easing,
1549                                scrollData: {
1550                                    container: o.container,
1551                                    direction: S,
1552                                    alternateValue: A
1553                                }
1554                            },
1555                            element: n
1556                        }, v.debug && console.log("tweensContainer (scroll): ", s.scroll, n)
1557                    } else if ("reverse" === k) {
1558                        if (!i(n).tweensContainer) return void $.dequeue(n, o.queue);
1559                        "none" === i(n).opts.display && (i(n).opts.display = "auto"), "hidden" === i(n).opts.visibility && (i(n).opts.visibility = "visible"), i(n).opts.loop = !1, i(n).opts.begin = null, i(n).opts.complete = null, b.easing || delete o.easing, b.duration || delete o.duration, o = $.extend({}, i(n).opts, o);
1560                        var E = $.extend(!0, {}, i(n).tweensContainer);
1561                        for (var j in E)
1562                            if ("element" !== j) {
1563                                var H = E[j].startValue;
1564                                E[j].startValue = E[j].currentValue = E[j].endValue, E[j].endValue = H, g.isEmptyObject(b) || (E[j].easing = o.easing), v.debug && console.log("reverse tweensContainer (" + j + "): " + JSON.stringify(E[j]), n)
1565                            }
1566                        s = E
1567                    } else if ("start" === k) {
1568                        var E;
1569                        i(n).tweensContainer && i(n).isAnimating === !0 && (E = i(n).tweensContainer), $.each(h, function (e, t) {
1570                            if (RegExp("^" + x.Lists.colors.join("$|^") + "$").test(e)) {
1571                                var r = p(t, !0),
1572                                    n = r[0],
1573                                    o = r[1],
1574                                    i = r[2];
1575                                if (x.RegEx.isHex.test(n)) {
1576                                    for (var s = ["Red", "Green", "Blue"], l = x.Values.hexToRgb(n), u = i ? x.Values.hexToRgb(i) : a, c = 0; c < s.length; c++) {
1577                                        var f = [l[c]];
1578                                        o && f.push(o), u !== a && f.push(u[c]), h[e + s[c]] = f
1579                                    }
1580                                    delete h[e]
1581                                }
1582                            }
1583                        });
1584                        for (var R in h) {
1585                            var O = p(h[R]),
1586                                z = O[0],
1587                                q = O[1],
1588                                M = O[2];
1589                            R = x.Names.camelCase(R);
1590                            var I = x.Hooks.getRoot(R),
1591                                B = !1;
1592                            if (i(n).isSVG || "tween" === I || x.Names.prefixCheck(I)[1] !== !1 || x.Normalizations.registered[I] !== a) {
1593                                (o.display !== a && null !== o.display && "none" !== o.display || o.visibility !== a && "hidden" !== o.visibility) && /opacity|filter/.test(R) && !M && 0 !== z && (M = 0), o._cacheValues && E && E[R] ? (M === a && (M = E[R].endValue + E[R].unitType), B = i(n).rootPropertyValueCache[I]) : x.Hooks.registered[R] ? M === a ? (B = x.getPropertyValue(n, I), M = x.getPropertyValue(n, R, B)) : B = x.Hooks.templates[I][1] : M === a && (M = x.getPropertyValue(n, R));
1594                                var W, G, D, X = !1;
1595                                if (W = f(R, M), M = W[0], D = W[1], W = f(R, z), z = W[0].replace(/^([+-\/*])=/, function (e, t) {
1596                                        return X = t, ""
1597                                    }), G = W[1], M = parseFloat(M) || 0, z = parseFloat(z) || 0, "%" === G && (/^(fontSize|lineHeight)$/.test(R) ? (z /= 100, G = "em") : /^scale/.test(R) ? (z /= 100, G = "") : /(Red|Green|Blue)$/i.test(R) && (z = z / 100 * 255, G = "")), /[\/*]/.test(X)) G = D;
1598                                else if (D !== G && 0 !== M)
1599                                    if (0 === z) G = D;
1600                                    else {
1601                                        l = l || d();
1602                                        var Y = /margin|padding|left|right|width|text|word|letter/i.test(R) || /X$/.test(R) || "x" === R ? "x" : "y";
1603                                        switch (D) {
1604                                        case "%":
1605                                            M *= "x" === Y ? l.percentToPxWidth : l.percentToPxHeight;
1606                                            break;
1607                                        case "px":
1608                                            break;
1609                                        default:
1610                                            M *= l[D + "ToPx"]
1611                                        }
1612                                        switch (G) {
1613                                        case "%":
1614                                            M *= 1 / ("x" === Y ? l.percentToPxWidth : l.percentToPxHeight);
1615                                            break;
1616                                        case "px":
1617                                            break;
1618                                        default:
1619                                            M *= 1 / l[G + "ToPx"]
1620                                        }
1621                                    }
1622                                switch (X) {
1623                                case "+":
1624                                    z = M + z;
1625                                    break;
1626                                case "-":
1627                                    z = M - z;
1628                                    break;
1629                                case "*":
1630                                    z = M * z;
1631                                    break;
1632                                case "/":
1633                                    z = M / z
1634                                }
1635                                s[R] = {
1636                                    rootPropertyValue: B,
1637                                    startValue: M,
1638                                    currentValue: M,
1639                                    endValue: z,
1640                                    unitType: G,
1641                                    easing: q
1642                                }, v.debug && console.log("tweensContainer (" + R + "): " + JSON.stringify(s[R]), n)
1643                            } else v.debug && console.log("Skipping [" + I + "] due to a lack of browser support.")
1644                        }
1645                        s.element = n
1646                    }
1647                    s.element && (x.Values.addClass(n, "velocity-animating"), L.push(s), "" === o.queue && (i(n).tweensContainer = s, i(n).opts = o), i(n).isAnimating = !0, w === P - 1 ? (v.State.calls.push([L, m, o, null, T.resolver]), v.State.isTicking === !1 && (v.State.isTicking = !0, c())) : w++)
1648                }
1649                var n = this,
1650                    o = $.extend({}, v.defaults, b),
1651                    s = {},
1652                    l;
1653                switch (i(n) === a && v.init(n), parseFloat(o.delay) && o.queue !== !1 && $.queue(n, o.queue, function (e) {
1654                    v.velocityQueueEntryFlag = !0, i(n).delayTimer = {
1655                        setTimeout: setTimeout(e, parseFloat(o.delay)),
1656                        next: e
1657                    }
1658                }), o.duration.toString().toLowerCase()) {
1659                case "fast":
1660                    o.duration = 200;
1661                    break;
1662                case "normal":
1663                    o.duration = y;
1664                    break;
1665                case "slow":
1666                    o.duration = 600;
1667                    break;
1668                default:
1669                    o.duration = parseFloat(o.duration) || 1
1670                }
1671                v.mock !== !1 && (v.mock === !0 ? o.duration = o.delay = 1 : (o.duration *= parseFloat(v.mock) || 1, o.delay *= parseFloat(v.mock) || 1)), o.easing = u(o.easing, o.duration), o.begin && !g.isFunction(o.begin) && (o.begin = null), o.progress && !g.isFunction(o.progress) && (o.progress = null), o.complete && !g.isFunction(o.complete) && (o.complete = null), o.display !== a && null !== o.display && (o.display = o.display.toString().toLowerCase(), "auto" === o.display && (o.display = v.CSS.Values.getDisplayType(n))), o.visibility !== a && null !== o.visibility && (o.visibility = o.visibility.toString().toLowerCase()), o.mobileHA = o.mobileHA && v.State.isMobile && !v.State.isGingerbread, o.queue === !1 ? o.delay ? setTimeout(e, o.delay) : e() : $.queue(n, o.queue, function (t, r) {
1672                    return r === !0 ? (T.promise && T.resolver(m), !0) : (v.velocityQueueEntryFlag = !0, void e(t))
1673                }), "" !== o.queue && "fx" !== o.queue || "inprogress" === $.queue(n)[0] || $.dequeue(n)
1674            }
1675            var s = arguments[0] && (arguments[0].p || $.isPlainObject(arguments[0].properties) && !arguments[0].properties.names || g.isString(arguments[0].properties)),
1676                l, f, d, m, h, b;
1677            if (g.isWrapped(this) ? (l = !1, d = 0, m = this, f = this) : (l = !0, d = 1, m = s ? arguments[0].elements || arguments[0].e : arguments[0]), m = o(m)) {
1678                s ? (h = arguments[0].properties || arguments[0].p, b = arguments[0].options || arguments[0].o) : (h = arguments[d], b = arguments[d + 1]);
1679                var P = m.length,
1680                    w = 0;
1681                if (!/^(stop|finish)$/i.test(h) && !$.isPlainObject(b)) {
1682                    var V = d + 1;
1683                    b = {};
1684                    for (var C = V; C < arguments.length; C++) g.isArray(arguments[C]) || !/^(fast|normal|slow)$/i.test(arguments[C]) && !/^\d/.test(arguments[C]) ? g.isString(arguments[C]) || g.isArray(arguments[C]) ? b.easing = arguments[C] : g.isFunction(arguments[C]) && (b.complete = arguments[C]) : b.duration = arguments[C]
1685                }
1686                var T = {
1687                    promise: null,
1688                    resolver: null,
1689                    rejecter: null
1690                };
1691                l && v.Promise && (T.promise = new v.Promise(function (e, t) {
1692                    T.resolver = e, T.rejecter = t
1693                }));
1694                var k;
1695                switch (h) {
1696                case "scroll":
1697                    k = "scroll";
1698                    break;
1699                case "reverse":
1700                    k = "reverse";
1701                    break;
1702                case "finish":
1703                case "stop":
1704                    $.each(m, function (e, t) {
1705                        i(t) && i(t).delayTimer && (clearTimeout(i(t).delayTimer.setTimeout), i(t).delayTimer.next && i(t).delayTimer.next(), delete i(t).delayTimer)
1706                    });
1707                    var A = [];
1708                    return $.each(v.State.calls, function (e, t) {
1709                        t && $.each(t[1], function (r, n) {
1710                            var o = b === a ? "" : b;
1711                            return o === !0 || t[2].queue === o || b === a && t[2].queue === !1 ? void $.each(m, function (r, a) {
1712                                a === n && ((b === !0 || g.isString(b)) && ($.each($.queue(a, g.isString(b) ? b : ""), function (e, t) {
1713                                    g.isFunction(t) && t(null, !0)
1714                                }), $.queue(a, g.isString(b) ? b : "", [])), "stop" === h ? (i(a) && i(a).tweensContainer && o !== !1 && $.each(i(a).tweensContainer, function (e, t) {
1715                                    t.endValue = t.currentValue
1716                                }), A.push(e)) : "finish" === h && (t[2].duration = 1))
1717                            }) : !0
1718                        })
1719                    }), "stop" === h && ($.each(A, function (e, t) {
1720                        p(t, !0)
1721                    }), T.promise && T.resolver(m)), e();
1722                default:
1723                    if (!$.isPlainObject(h) || g.isEmptyObject(h)) {
1724                        if (g.isString(h) && v.Redirects[h]) {
1725                            var F = $.extend({}, b),
1726                                E = F.duration,
1727                                j = F.delay || 0;
1728                            return F.backwards === !0 && (m = $.extend(!0, [], m).reverse()), $.each(m, function (e, t) {
1729                                parseFloat(F.stagger) ? F.delay = j + parseFloat(F.stagger) * e : g.isFunction(F.stagger) && (F.delay 
1729= j + F.stagger.call(t, e, P)), F.drag && (F.duration = parseFloat(E) || (/^(callout|transition)/.test(h) ? 1e3 : y), F.duration = Math.max(F.duration * (F.backwards ? 1 - e / P : (e + 1) / P), .75 * F.duration, 200)), v.Redirects[h].call(t, t, F || {}, e, P, m, T.promise ? T : a)
1730                            }), e()
1731                        }
1732                        var H = "Velocity: First argument (" + h + ") was not a property map, a known action, or a registered redirect. Aborting.";
1733                        return T.promise ? T.rejecter(new Error(H)) : console.log(H), e()
1734                    }
1735                    k = "start"
1736                }
1737                var N = {
1738                        lastParent: null,
1739                        lastPosition: null,
1740                        lastFontSize: null,
1741                        lastPercentToPxWidth: null,
1742                        lastPercentToPxHeight: null,
1743                        lastEmToPx: null,
1744                        remToPx: null,
1745                        vwToPx: null,
1746                        vhToPx: null
1747                    },
1748                    L = [];
1749                $.each(m, function (e, t) {
1750                    g.isNode(t) && n.call(t)
1751                });
1752                var F = $.extend({}, v.defaults, b),
1753                    R;
1754                if (F.loop = parseInt(F.loop), R = 2 * F.loop - 1, F.loop)
1755                    for (var O = 0; R > O; O++) {
1756                        var z = {
1757                            delay: F.delay,
1758                            progress: F.progress
1759                        };
1760                        O === R - 1 && (z.display = F.display, z.visibility = F.visibility, z.complete = F.complete), S(m, "reverse", z)
1761                    }
1762                return e()
1763            }
1764        };
1765        v = $.extend(S, v), v.animate = S;
1766        var P = t.requestAnimationFrame || d;
1767        return v.State.isMobile || r.hidden === a || r.addEventListener("visibilitychange", function () {
1768            r.hidden ? (P = function (e) {
1769                return setTimeout(function () {
1770                    e(!0)
1771                }, 16)
1772            }, c()) : P = t.requestAnimationFrame || d
1773        }), e.Velocity = v, e !== t && (e.fn.velocity = S, e.fn.velocity.defaults = v.defaults), $.each(["Down", "Up"], function (e, t) {
1774            v.Redirects["slide" + t] = function (e, r, n, o, i, s) {
1775                var l = $.extend({}, r),
1776                    u = l.begin,
1777                    c = l.complete,
1778                    p = {
1779                        height: "",
1780                        marginTop: "",
1781                        marginBottom: "",
1782                        paddingTop: "",
1783                        paddingBottom: ""
1784                    },
1785                    f = {};
1786                l.display === a && (l.display = "Down" === t ? "inline" === v.CSS.Values.getDisplayType(e) ? "inline-block" : "block" : "none"), l.begin = function () {
1787                    u && u.call(i, i);
1788                    for (var r in p) {
1789                        f[r] = e.style[r];
1790                        var a = v.CSS.getPropertyValue(e, r);
1791                        p[r] = "Down" === t ? [a, 0] : [0, a]
1792                    }
1793                    f.overflow = e.style.overflow, e.style.overflow = "hidden"
1794                }, l.complete = function () {
1795                    for (var t in f) e.style[t] = f[t];
1796                    c && c.call(i, i), s && s.resolver(i)
1797                }, v(e, p, l)
1798            }
1799        }), $.each(["In", "Out"], function (e, t) {
1800            v.Redirects["fade" + t] = function (e, r, n, o, i, s) {
1801                var l = $.extend({}, r),
1802                    u = {
1803                        opacity: "In" === t ? 1 : 0
1804                    },
1805                    c = l.complete;
1806                l.complete = n !== o - 1 ? l.begin = null : function () {
1807                    c && c.call(i, i), s && s.resolver(i)
1808                }, l.display === a && (l.display = "In" === t ? "auto" : "none"), v(this, u, l)
1809            }
1810        }), v
1811    }(window.jQuery || window.Zepto || window, window, document)
1812});
1813
1814
1815
1816/* Buttons */
1817
1818(function ($) {
1819    $(document).ready(function () {
1820
1821        // jQuery reverse
1822        $.fn.reverse = [].reverse;
1823
1824        $(document).on('mouseenter.fixedActionBtn', '.fixed-action-btn', function (e) {
1825            var $this = $(this);
1826            openFABMenu($this);
1827
1828        });
1829
1830        $(document).on('mouseleave.fixedActionBtn', '.fixed-action-btn', function (e) {
1831            var $this = $(this);
1832            closeFABMenu($this);
1833        });
1834
1835    });
1836
1837    $.fn.extend({
1838        openFAB: function () {
1839            var $this = $(this);
1840            openFABMenu($this);
1841        },
1842        closeFAB: function () {
1843            closeFABMenu($this);
1844        }
1845    });
1846
1847
1848    var openFABMenu = function (btn) {
1849        $this = btn;
1850        if ($this.hasClass('active') === false) {
1851            $this.addClass('active');
1852            $this.find('ul .btn-floating').velocity({
1853                scaleY: ".4",
1854                scaleX: ".4",
1855                translateY: "40px"
1856            }, {
1857                duration: 0
1858            });
1859
1860            var time = 0;
1861            $this.find('ul .btn-floating').reverse().each(function () {
1862                $(this).velocity({
1863                    opacity: "1",
1864                    scaleX: "1",
1865                    scaleY: "1",
1866                    translateY: "0"
1867                }, {
1868                    duration: 80,
1869                    delay: time
1870                });
1871                time += 40;
1872            });
1873        }
1874    };
1875
1876    var closeFABMenu = function (btn) {
1877        $this = btn;
1878        $this.removeClass('active');
1879        var time = 0;
1880        $this.find('ul .btn-floating').velocity("stop", true);
1881        $this.find('ul .btn-floating').velocity({
1882            opacity: "0",
1883            scaleX: ".4",
1884            scaleY: ".4",
1885            translateY: "40px"
1886        }, {
1887            duration: 80
1888        });
1889    };
1890
1891
1892}(jQuery));
1893
1894
1895
1896/*!
1897 * Waves v0.6.4
1898 * http://fian.my.id/Waves
1899 *
1900 * Copyright 2014 Alfiana E. Sibuea and other contributors
1901 * Released under the MIT license
1902 * https://github.com/fians/Waves/blob/master/LICENSE
1903 */
1904
1905;
1906(function (window) {
1907    'use strict';
1908
1909    var Waves = Waves || {};
1910    var $$ = document.querySelectorAll.bind(document);
1911
1912    // Find exact position of element
1913    function isWindow(obj) {
1914        return obj !== null && obj === obj.window;
1915    }
1916
1917    function getWindow(elem) {
1918        return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
1919    }
1920
1921    function offset(elem) {
1922        var docElem, win,
1923            box = {
1924                top: 0,
1925                left: 0
1926            },
1927            doc = elem && elem.ownerDocument;
1928
1929        docElem = doc.documentElement;
1930
1931        if (typeof elem.getBoundingClientRect !== typeof undefined) {
1932            box = elem.getBoundingClientRect();
1933        }
1934        win = getWindow(doc);
1935        return {
1936            top: box.top + win.pageYOffset - docElem.clientTop,
1937            left: box.left + win.pageXOffset - docElem.clientLeft
1938        };
1939    }
1940
1941    function convertStyle(obj) {
1942        var style = '';
1943
1944        for (var a in obj) {
1945            if (obj.hasOwnProperty(a)) {
1946                style += (a + ':' + obj[a] + ';');
1947            }
1948        }
1949
1950        return style;
1951    }
1952
1953    var Effect = {
1954
1955        // Effect delay
1956        duration: 750,
1957
1958        show: function (e, element) {
1959
1960            // Disable right click
1961            if (e.button === 2) {
1962                return false;
1963            }
1964
1965            var el = element || this;
1966
1967            // Create ripple
1968            var ripple = document.createElement('div');
1969            ripple.className = 'waves-ripple';
1970            el.appendChild(ripple);
1971
1972            // Get click coordinate and element witdh
1973            var pos = offset(el);
1974            var relativeY = (e.pageY - pos.top);
1975            var relativeX = (e.pageX - pos.left);
1976            var scale = 'scale(' + ((el.clientWidth / 100) * 10) + ')';
1977
1978            // Support for touch devices
1979            if ('touches' in e) {
1980                relativeY = (e.touches[0].pageY - pos.top);
1981                relativeX = (e.touches[0].pageX - pos.left);
1982            }
1983
1984            // Attach data to element
1985            ripple.setAttribute('data-hold', Date.now());
1986            ripple.setAttribute('data-scale', scale);
1987            ripple.setAttribute('data-x', relativeX);
1988            ripple.setAttribute('data-y', relativeY);
1989
1990            // Set ripple position
1991            var rippleStyle = {
1992                'top': relativeY + 'px',
1993                'left': relativeX + 'px'
1994            };
1995
1996            ripple.className = ripple.className + ' waves-notransition';
1997            ripple.setAttribute('style', convertStyle(rippleStyle));
1998            ripple.className = ripple.className.replace('waves-notransition', '');
1999
2000            // Scale the ripple
2001            rippleStyle['-webkit-transform'] = scale;
2002            rippleStyle['-moz-transform'] = scale;
2003            rippleStyle['-ms-transform'] = scale;
vendor: 5,186 bytes, lines 2004-2137
2004            rippleStyle['-o-transform'] = scale;
2005            rippleStyle.transform = scale;
2006            rippleStyle.opacity = '1';
2007
2008            rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms';
2009            rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms';
2010            rippleStyle['-o-transition-duration'] = Effect.duration + 'ms';
2011            rippleStyle['transition-duration'] = Effect.duration + 'ms';
2012
2013            rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
2014            rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
2015            rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
2016            rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
2017
2018            ripple.setAttribute('style', convertStyle(rippleStyle));
2019        },
2020
2021        hide: function (e) {
2022            TouchHandler.touchup(e);
2023
2024            var el = this;
2025            var width = el.clientWidth * 1.4;
2026
2027            // Get first ripple
2028            var ripple = null;
2029            var ripples = el.getElementsByClassName('waves-ripple');
2030            if (ripples.length > 0) {
2031                ripple = ripples[ripples.length - 1];
2032            } else {
2033                return false;
2034            }
2035
2036            var relativeX = ripple.getAttribute('data-x');
2037            var relativeY = ripple.getAttribute('data-y');
2038            var scale = ripple.getAttribute('data-scale');
2039
2040            // Get delay beetween mousedown and mouse leave
2041            var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
2042            var delay = 350 - diff;
2043
2044            if (delay < 0) {
2045                delay = 0;
2046            }
2047
2048            // Fade out ripple after delay
2049            setTimeout(function () {
2050                var style = {
2051                    'top': relativeY + 'px',
2052                    'left': relativeX + 'px',
2053                    'opacity': '0',
2054
2055                    // Duration
2056                    '-webkit-transition-duration': Effect.duration + 'ms',
2057                    '-moz-transition-duration': Effect.duration + 'ms',
2058                    '-o-transition-duration': Effect.duration + 'ms',
2059                    'transition-duration': Effect.duration + 'ms',
2060                    '-webkit-transform': scale,
2061                    '-moz-transform': scale,
2062                    '-ms-transform': scale,
2063                    '-o-transform': scale,
2064                    'transform': scale,
2065                };
2066
2067                ripple.setAttribute('style', convertStyle(style));
2068
2069                setTimeout(function () {
2070                    try {
2071                        el.removeChild(ripple);
2072                    } catch (e) {
2073                        return false;
2074                    }
2075                }, Effect.duration);
2076            }, delay);
2077        },
2078
2079        // Little hack to make <input> can perform waves effect
2080        wrapInput: function (elements) {
2081            for (var a = 0; a < elements.length; a++) {
2082                var el = elements[a];
2083
2084                if (el.tagName.toLowerCase() === 'input') {
2085                    var parent = el.parentNode;
2086
2087                    // If input already have parent just pass through
2088                    if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) {
2089                        continue;
2090                    }
2091
2092                    // Put element class and style to the specified parent
2093                    var wrapper = document.createElement('i');
2094                    wrapper.className = el.className + ' waves-input-wrapper';
2095
2096                    var elementStyle = el.getAttribute('style');
2097
2098                    if (!elementStyle) {
2099                        elementStyle = '';
2100                    }
2101
2102                    wrapper.setAttribute('style', elementStyle);
2103
2104                    el.className = 'waves-button-input';
2105                    el.removeAttribute('style');
2106
2107                    // Put element as child
2108                    parent.replaceChild(wrapper, el);
2109                    wrapper.appendChild(el);
2110                }
2111            }
2112        }
2113    };
2114
2115
2116    /**
2117     * Disable mousedown event for 500ms during and after touch
2118     */
2119    var TouchHandler = {
2120        /* uses an integer rather than bool so there's no issues with
2121         * needing to clear timeouts if another touch event occurred
2122         * within the 500ms. Cannot mouseup between touchstart and
2123         * touchend, nor in the 500ms after touchend. */
2124        touches: 0,
2125        allowEvent: function (e) {
2126            var allow = true;
2127
2128            if (e.type === 'touchstart') {
2129                TouchHandler.touches += 1; //push
2130            } else if (e.type === 'touchend' || e.type === 'touchcancel') {
2131                setTimeout(function () {
2132                    if (TouchHandler.touches > 0) {
2133                        TouchHandler.touches -= 1; //pop after 500ms
2134                    }
2135                }, 500);
2136            } else if (e.type === 'mousedown' && TouchHandler.touches > 0) {
2137                allow = false;
2138            }
2139
2140            return allow;
2141        },
2142        touchup: function (e) {
2143            TouchHandler.allowEvent(e);
2144        }
2145    };
2146
2147
2148    /**
2149     * Delegated click handler for .waves-effect element.
2150     * returns null when .waves-effect element not in "click tree"
2151     */
2152    function getWavesEffectElement(e) {
2153        if (TouchHandler.allowEvent(e) === false) {
2154            return null;
2155        }
2156
2157        var element = null;
2158        var target = e.target || e.srcElement;
2159
2160        while (target.parentElement !== null) {
2161            if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) {
2162                element = target;
2163                break;
2164            } else if (target.classList.contains('waves-effect')) {
2165                element = target;
2166                break;
2167            }
2168            target = target.parentElement;
2169        }
2170
2171        return element;
2172    }
2173
2174    /**
2175     * Bubble the click and show effect if .waves-effect elem was found
2176     */
2177    function showEffect(e) {
2178        var element = getWavesEffectElement(e);
2179
2180        if (element !== null) {
vendor: 1,372 bytes, lines 2181-2219
2181            Effect.show(e, element);
2182
2183            if ('ontouchstart' in window) {
2184                element.addEventListener('touchend', Effect.hide, false);
2185                element.addEventListener('touchcancel', Effect.hide, false);
2186            }
2187
2188            element.addEventListener('mouseup', Effect.hide, false);
2189            element.addEventListener('mouseleave', Effect.hide, false);
2190        }
2191    }
2192
2193    Waves.displayEffect = function (options) {
2194        options = options || {};
2195
2196        if ('duration' in options) {
2197            Effect.duration = options.duration;
2198        }
2199
2200        //Wrap input inside <i> tag
2201        Effect.wrapInput($$('.waves-effect'));
2202
2203        if ('ontouchstart' in window) {
2204            document.body.addEventListener('touchstart', showEffect, false);
2205        }
2206
2207        document.body.addEventListener('mousedown', showEffect, false);
2208    };
2209
2210    /**
2211     * Attach Waves to an input element (or any element which doesn't
2212     * bubble mouseup/mousedown events).
2213     *   Intended to be used with dynamically loaded forms/inputs, or
2214     * where the user doesn't want a delegated click handler.
2215     */
2216    Waves.attach = function (element) {
2217        //FUTURE: automatically add waves classes and allow users
2218        // to specify them with an options param? Eg. light/classic/button
2219        if (element.tagName.toLowerCase() === 'input') {
2220            Effect.wrapInput([element]);
2221            element = element.parentElement;
2222        }
2223
2224        if ('ontouchstart' in window) {
2225            element.addEventListener('touchstart', showEffect, false);
2226        }
2227
2228        element.addEventListener('mousedown', showEffect, false);
2229    };
2230
2231    window.Waves = Waves;
2232
2233    document.addEventListener('DOMContentLoaded', function () {
2234        Waves.displayEffect();
2235    }, false);
2236
2237})(window);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.