mirror of https://github.com/lxndrblz/anatole.git

Alexander Bilz
15.25.2020 d7e4796722a26582ca28c59f4fc58f2c355548d3
assets/js/jquery-migrate.js
@@ -2,837 +2,836 @@
 * jQuery Migrate - v3.3.0 - 2020-05-05T01:57Z
 * Copyright OpenJS Foundation and other contributors
 */
( function( factory ) {
   "use strict";
(function (factory) {
    "use strict";
   if ( typeof define === "function" && define.amd ) {
    if (typeof define === "function" && define.amd) {
      // AMD. Register as an anonymous module.
      define( [ "jquery" ], function( jQuery ) {
         return factory( jQuery, window );
      } );
   } else if ( typeof module === "object" && module.exports ) {
        // AMD. Register as an anonymous module.
        define(["jquery"], function (jQuery) {
            return factory(jQuery, window);
        });
    } else if (typeof module === "object" && module.exports) {
      // Node/CommonJS
      // eslint-disable-next-line no-undef
      module.exports = factory( require( "jquery" ), window );
   } else {
        // Node/CommonJS
        // eslint-disable-next-line no-undef
        module.exports = factory(require("jquery"), window);
    } else {
      // Browser globals
      factory( jQuery, window );
   }
} )( function( jQuery, window ) {
"use strict";
        // Browser globals
        factory(jQuery, window);
    }
})(function (jQuery, window) {
    "use strict";
jQuery.migrateVersion = "3.3.0";
    jQuery.migrateVersion = "3.3.0";
// Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2
function compareVersions( v1, v2 ) {
   var i,
      rVersionParts = /^(\d+)\.(\d+)\.(\d+)/,
      v1p = rVersionParts.exec( v1 ) || [ ],
      v2p = rVersionParts.exec( v2 ) || [ ];
    function compareVersions(v1, v2) {
        var i,
            rVersionParts = /^(\d+)\.(\d+)\.(\d+)/,
            v1p = rVersionParts.exec(v1) || [],
            v2p = rVersionParts.exec(v2) || [];
   for ( i = 1; i <= 3; i++ ) {
      if ( +v1p[ i ] > +v2p[ i ] ) {
         return 1;
      }
      if ( +v1p[ i ] < +v2p[ i ] ) {
         return -1;
      }
   }
   return 0;
}
        for (i = 1; i <= 3; i++) {
            if (+v1p[i] > +v2p[i]) {
                return 1;
            }
            if (+v1p[i] < +v2p[i]) {
                return -1;
            }
        }
        return 0;
    }
function jQueryVersionSince( version ) {
   return compareVersions( jQuery.fn.jquery, version ) >= 0;
}
    function jQueryVersionSince(version) {
        return compareVersions(jQuery.fn.jquery, version) >= 0;
    }
( function() {
    (function () {
   // Support: IE9 only
   // IE9 only creates console object when dev tools are first opened
   // IE9 console is a host object, callable but doesn't have .apply()
   if ( !window.console || !window.console.log ) {
      return;
   }
        // Support: IE9 only
        // IE9 only creates console object when dev tools are first opened
        // IE9 console is a host object, callable but doesn't have .apply()
        if (!window.console || !window.console.log) {
            return;
        }
   // Need jQuery 3.0.0+ and no older Migrate loaded
   if ( !jQuery || !jQueryVersionSince( "3.0.0" ) ) {
      window.console.log( "JQMIGRATE: jQuery 3.0.0+ REQUIRED" );
   }
   if ( jQuery.migrateWarnings ) {
      window.console.log( "JQMIGRATE: Migrate plugin loaded multiple times" );
   }
        // Need jQuery 3.0.0+ and no older Migrate loaded
        if (!jQuery || !jQueryVersionSince("3.0.0")) {
            window.console.log("JQMIGRATE: jQuery 3.0.0+ REQUIRED");
        }
        if (jQuery.migrateWarnings) {
            window.console.log("JQMIGRATE: Migrate plugin loaded multiple times");
        }
   // Show a message on the console so devs know we're active
   window.console.log( "JQMIGRATE: Migrate is installed" +
      ( jQuery.migrateMute ? "" : " with logging active" ) +
      ", version " + jQuery.migrateVersion );
        // Show a message on the console so devs know we're active
        window.console.log("JQMIGRATE: Migrate is installed" +
            (jQuery.migrateMute ? "" : " with logging active") +
            ", version " + jQuery.migrateVersion);
} )();
    })();
var warnedAbout = {};
    var warnedAbout = {};
// By default each warning is only reported once.
jQuery.migrateDeduplicateWarnings = true;
    jQuery.migrateDeduplicateWarnings = true;
// List of warnings already given; public read only
jQuery.migrateWarnings = [];
    jQuery.migrateWarnings = [];
// Set to false to disable traces that appear with warnings
if ( jQuery.migrateTrace === undefined ) {
   jQuery.migrateTrace = true;
}
    if (jQuery.migrateTrace === undefined) {
        jQuery.migrateTrace = true;
    }
// Forget any warnings we've already given; public
jQuery.migrateReset = function() {
   warnedAbout = {};
   jQuery.migrateWarnings.length = 0;
};
    jQuery.migrateReset = function () {
        warnedAbout = {};
        jQuery.migrateWarnings.length = 0;
    };
function migrateWarn( msg ) {
   var console = window.console;
   if ( !jQuery.migrateDeduplicateWarnings || !warnedAbout[ msg ] ) {
      warnedAbout[ msg ] = true;
      jQuery.migrateWarnings.push( msg );
      if ( console && console.warn && !jQuery.migrateMute ) {
         console.warn( "JQMIGRATE: " + msg );
         if ( jQuery.migrateTrace && console.trace ) {
            console.trace();
         }
      }
   }
}
    function migrateWarn(msg) {
        var console = window.console;
        if (!jQuery.migrateDeduplicateWarnings || !warnedAbout[msg]) {
            warnedAbout[msg] = true;
            jQuery.migrateWarnings.push(msg);
            if (console && console.warn && !jQuery.migrateMute) {
                console.warn("JQMIGRATE: " + msg);
                if (jQuery.migrateTrace && console.trace) {
                    console.trace();
                }
            }
        }
    }
function migrateWarnProp( obj, prop, value, msg ) {
   Object.defineProperty( obj, prop, {
      configurable: true,
      enumerable: true,
      get: function() {
         migrateWarn( msg );
         return value;
      },
      set: function( newValue ) {
         migrateWarn( msg );
         value = newValue;
      }
   } );
}
    function migrateWarnProp(obj, prop, value, msg) {
        Object.defineProperty(obj, prop, {
            configurable: true,
            enumerable: true,
            get: function () {
                migrateWarn(msg);
                return value;
            },
            set: function (newValue) {
                migrateWarn(msg);
                value = newValue;
            }
        });
    }
function migrateWarnFunc( obj, prop, newFunc, msg ) {
   obj[ prop ] = function() {
      migrateWarn( msg );
      return newFunc.apply( this, arguments );
   };
}
    function migrateWarnFunc(obj, prop, newFunc, msg) {
        obj[prop] = function () {
            migrateWarn(msg);
            return newFunc.apply(this, arguments);
        };
    }
if ( window.document.compatMode === "BackCompat" ) {
    if (window.document.compatMode === "BackCompat") {
   // JQuery has never supported or tested Quirks Mode
   migrateWarn( "jQuery is not compatible with Quirks Mode" );
}
        // JQuery has never supported or tested Quirks Mode
        migrateWarn("jQuery is not compatible with Quirks Mode");
    }
var findProp,
   class2type = {},
   oldInit = jQuery.fn.init,
   oldFind = jQuery.find,
    var findProp,
        class2type = {},
        oldInit = jQuery.fn.init,
        oldFind = jQuery.find,
   rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
   rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,
        rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
        rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,
   // Support: Android <=4.0 only
   // Make sure we trim BOM and NBSP
   rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
        // Support: Android <=4.0 only
        // Make sure we trim BOM and NBSP
        rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
jQuery.fn.init = function( arg1 ) {
   var args = Array.prototype.slice.call( arguments );
    jQuery.fn.init = function (arg1) {
        var args = Array.prototype.slice.call(arguments);
   if ( typeof arg1 === "string" && arg1 === "#" ) {
        if (typeof arg1 === "string" && arg1 === "#") {
      // JQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0
      migrateWarn( "jQuery( '#' ) is not a valid selector" );
      args[ 0 ] = [];
   }
            // JQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0
            migrateWarn("jQuery( '#' ) is not a valid selector");
            args[0] = [];
        }
   return oldInit.apply( this, args );
};
jQuery.fn.init.prototype = jQuery.fn;
        return oldInit.apply(this, args);
    };
    jQuery.fn.init.prototype = jQuery.fn;
jQuery.find = function( selector ) {
   var args = Array.prototype.slice.call( arguments );
    jQuery.find = function (selector) {
        var args = Array.prototype.slice.call(arguments);
   // Support: PhantomJS 1.x
   // String#match fails to match when used with a //g RegExp, only on some strings
   if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {
        // Support: PhantomJS 1.x
        // String#match fails to match when used with a //g RegExp, only on some strings
        if (typeof selector === "string" && rattrHashTest.test(selector)) {
      // The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
      // First see if qS thinks it's a valid selector, if so avoid a false positive
      try {
         window.document.querySelector( selector );
      } catch ( err1 ) {
            // The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
            // First see if qS thinks it's a valid selector, if so avoid a false positive
            try {
                window.document.querySelector(selector);
            } catch (err1) {
         // Didn't *look* valid to qSA, warn and try quoting what we think is the value
         selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {
            return "[" + attr + op + "\"" + value + "\"]";
         } );
                // Didn't *look* valid to qSA, warn and try quoting what we think is the value
                selector = selector.replace(rattrHashGlob, function (_, attr, op, value) {
                    return "[" + attr + op + "\"" + value + "\"]";
                });
         // If the regexp *may* have created an invalid selector, don't update it
         // Note that there may be false alarms if selector uses jQuery extensions
         try {
            window.document.querySelector( selector );
            migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] );
            args[ 0 ] = selector;
         } catch ( err2 ) {
            migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] );
         }
      }
   }
                // If the regexp *may* have created an invalid selector, don't update it
                // Note that there may be false alarms if selector uses jQuery extensions
                try {
                    window.document.querySelector(selector);
                    migrateWarn("Attribute selector with '#' must be quoted: " + args[0]);
                    args[0] = selector;
                } catch (err2) {
                    migrateWarn("Attribute selector with '#' was not fixed: " + args[0]);
                }
            }
        }
   return oldFind.apply( this, args );
};
        return oldFind.apply(this, args);
    };
// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)
for ( findProp in oldFind ) {
   if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {
      jQuery.find[ findProp ] = oldFind[ findProp ];
   }
}
    for (findProp in oldFind) {
        if (Object.prototype.hasOwnProperty.call(oldFind, findProp)) {
            jQuery.find[findProp] = oldFind[findProp];
        }
    }
// The number of elements contained in the matched element set
migrateWarnFunc( jQuery.fn, "size", function() {
   return this.length;
},
"jQuery.fn.size() is deprecated and removed; use the .length property" );
    migrateWarnFunc(jQuery.fn, "size", function () {
            return this.length;
        },
        "jQuery.fn.size() is deprecated and removed; use the .length property");
migrateWarnFunc( jQuery, "parseJSON", function() {
   return JSON.parse.apply( null, arguments );
},
"jQuery.parseJSON is deprecated; use JSON.parse" );
    migrateWarnFunc(jQuery, "parseJSON", function () {
            return JSON.parse.apply(null, arguments);
        },
        "jQuery.parseJSON is deprecated; use JSON.parse");
migrateWarnFunc( jQuery, "holdReady", jQuery.holdReady,
   "jQuery.holdReady is deprecated" );
    migrateWarnFunc(jQuery, "holdReady", jQuery.holdReady,
        "jQuery.holdReady is deprecated");
migrateWarnFunc( jQuery, "unique", jQuery.uniqueSort,
   "jQuery.unique is deprecated; use jQuery.uniqueSort" );
    migrateWarnFunc(jQuery, "unique", jQuery.uniqueSort,
        "jQuery.unique is deprecated; use jQuery.uniqueSort");
// Now jQuery.expr.pseudos is the standard incantation
migrateWarnProp( jQuery.expr, "filters", jQuery.expr.pseudos,
   "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos" );
migrateWarnProp( jQuery.expr, ":", jQuery.expr.pseudos,
   "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos" );
    migrateWarnProp(jQuery.expr, "filters", jQuery.expr.pseudos,
        "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos");
    migrateWarnProp(jQuery.expr, ":", jQuery.expr.pseudos,
        "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos");
// Prior to jQuery 3.1.1 there were internal refs so we don't warn there
if ( jQueryVersionSince( "3.1.1" ) ) {
   migrateWarnFunc( jQuery, "trim", function( text ) {
      return text == null ?
         "" :
         ( text + "" ).replace( rtrim, "" );
   },
   "jQuery.trim is deprecated; use String.prototype.trim" );
}
    if (jQueryVersionSince("3.1.1")) {
        migrateWarnFunc(jQuery, "trim", function (text) {
                return text == null ?
                    "" :
                    (text + "").replace(rtrim, "");
            },
            "jQuery.trim is deprecated; use String.prototype.trim");
    }
// Prior to jQuery 3.2 there were internal refs so we don't warn there
if ( jQueryVersionSince( "3.2.0" ) ) {
   migrateWarnFunc( jQuery, "nodeName", function( elem, name ) {
      return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
   },
   "jQuery.nodeName is deprecated" );
}
    if (jQueryVersionSince("3.2.0")) {
        migrateWarnFunc(jQuery, "nodeName", function (elem, name) {
                return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
            },
            "jQuery.nodeName is deprecated");
    }
if ( jQueryVersionSince( "3.3.0" ) ) {
    if (jQueryVersionSince("3.3.0")) {
   migrateWarnFunc( jQuery, "isNumeric", function( obj ) {
        migrateWarnFunc(jQuery, "isNumeric", function (obj) {
         // As of jQuery 3.0, isNumeric is limited to
         // strings and numbers (primitives or objects)
         // that can be coerced to finite numbers (gh-2662)
         var type = typeof obj;
         return ( type === "number" || type === "string" ) &&
                // As of jQuery 3.0, isNumeric is limited to
                // strings and numbers (primitives or objects)
                // that can be coerced to finite numbers (gh-2662)
                var type = typeof obj;
                return (type === "number" || type === "string") &&
            // parseFloat NaNs numeric-cast false positives ("")
            // ...but misinterprets leading-number strings, e.g. hex literals ("0x...")
            // subtraction forces infinities to NaN
            !isNaN( obj - parseFloat( obj ) );
      },
      "jQuery.isNumeric() is deprecated"
   );
                    // parseFloat NaNs numeric-cast false positives ("")
                    // ...but misinterprets leading-number strings, e.g. hex literals ("0x...")
                    // subtraction forces infinities to NaN
                    !isNaN(obj - parseFloat(obj));
            },
            "jQuery.isNumeric() is deprecated"
        );
   // Populate the class2type map
   jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".
      split( " " ),
   function( _, name ) {
      class2type[ "[object " + name + "]" ] = name.toLowerCase();
   } );
        // Populate the class2type map
        jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),
            function (_, name) {
                class2type["[object " + name + "]"] = name.toLowerCase();
            });
   migrateWarnFunc( jQuery, "type", function( obj ) {
      if ( obj == null ) {
         return obj + "";
      }
        migrateWarnFunc(jQuery, "type", function (obj) {
                if (obj == null) {
                    return obj + "";
                }
      // Support: Android <=2.3 only (functionish RegExp)
      return typeof obj === "object" || typeof obj === "function" ?
         class2type[ Object.prototype.toString.call( obj ) ] || "object" :
         typeof obj;
   },
   "jQuery.type is deprecated" );
                // Support: Android <=2.3 only (functionish RegExp)
                return typeof obj === "object" || typeof obj === "function" ?
                    class2type[Object.prototype.toString.call(obj)] || "object" :
                    typeof obj;
            },
            "jQuery.type is deprecated");
   migrateWarnFunc( jQuery, "isFunction",
      function( obj ) {
         return typeof obj === "function";
      },
      "jQuery.isFunction() is deprecated" );
        migrateWarnFunc(jQuery, "isFunction",
            function (obj) {
                return typeof obj === "function";
            },
            "jQuery.isFunction() is deprecated");
   migrateWarnFunc( jQuery, "isWindow",
      function( obj ) {
         return obj != null && obj === obj.window;
      },
      "jQuery.isWindow() is deprecated"
   );
        migrateWarnFunc(jQuery, "isWindow",
            function (obj) {
                return obj != null && obj === obj.window;
            },
            "jQuery.isWindow() is deprecated"
        );
   migrateWarnFunc( jQuery, "isArray", Array.isArray,
      "jQuery.isArray is deprecated; use Array.isArray"
   );
}
        migrateWarnFunc(jQuery, "isArray", Array.isArray,
            "jQuery.isArray is deprecated; use Array.isArray"
        );
    }
// Support jQuery slim which excludes the ajax module
if ( jQuery.ajax ) {
    if (jQuery.ajax) {
var oldAjax = jQuery.ajax;
        var oldAjax = jQuery.ajax;
jQuery.ajax = function( ) {
   var jQXHR = oldAjax.apply( this, arguments );
        jQuery.ajax = function () {
            var jQXHR = oldAjax.apply(this, arguments);
   // Be sure we got a jQXHR (e.g., not sync)
   if ( jQXHR.promise ) {
      migrateWarnFunc( jQXHR, "success", jQXHR.done,
         "jQXHR.success is deprecated and removed" );
      migrateWarnFunc( jQXHR, "error", jQXHR.fail,
         "jQXHR.error is deprecated and removed" );
      migrateWarnFunc( jQXHR, "complete", jQXHR.always,
         "jQXHR.complete is deprecated and removed" );
   }
            // Be sure we got a jQXHR (e.g., not sync)
            if (jQXHR.promise) {
                migrateWarnFunc(jQXHR, "success", jQXHR.done,
                    "jQXHR.success is deprecated and removed");
                migrateWarnFunc(jQXHR, "error", jQXHR.fail,
                    "jQXHR.error is deprecated and removed");
                migrateWarnFunc(jQXHR, "complete", jQXHR.always,
                    "jQXHR.complete is deprecated and removed");
            }
   return jQXHR;
};
            return jQXHR;
        };
}
    }
var oldRemoveAttr = jQuery.fn.removeAttr,
   oldToggleClass = jQuery.fn.toggleClass,
   rmatchNonSpace = /\S+/g;
    var oldRemoveAttr = jQuery.fn.removeAttr,
        oldToggleClass = jQuery.fn.toggleClass,
        rmatchNonSpace = /\S+/g;
jQuery.fn.removeAttr = function( name ) {
   var self = this;
    jQuery.fn.removeAttr = function (name) {
        var self = this;
   jQuery.each( name.match( rmatchNonSpace ), function( _i, attr ) {
      if ( jQuery.expr.match.bool.test( attr ) ) {
         migrateWarn( "jQuery.fn.removeAttr no longer sets boolean properties: " + attr );
         self.prop( attr, false );
      }
   } );
        jQuery.each(name.match(rmatchNonSpace), function (_i, attr) {
            if (jQuery.expr.match.bool.test(attr)) {
                migrateWarn("jQuery.fn.removeAttr no longer sets boolean properties: " + attr);
                self.prop(attr, false);
            }
        });
   return oldRemoveAttr.apply( this, arguments );
};
        return oldRemoveAttr.apply(this, arguments);
    };
jQuery.fn.toggleClass = function( state ) {
    jQuery.fn.toggleClass = function (state) {
   // Only deprecating no-args or single boolean arg
   if ( state !== undefined && typeof state !== "boolean" ) {
      return oldToggleClass.apply( this, arguments );
   }
        // Only deprecating no-args or single boolean arg
        if (state !== undefined && typeof state !== "boolean") {
            return oldToggleClass.apply(this, arguments);
        }
   migrateWarn( "jQuery.fn.toggleClass( boolean ) is deprecated" );
        migrateWarn("jQuery.fn.toggleClass( boolean ) is deprecated");
   // Toggle entire class name of each element
   return this.each( function() {
      var className = this.getAttribute && this.getAttribute( "class" ) || "";
        // Toggle entire class name of each element
        return this.each(function () {
            var className = this.getAttribute && this.getAttribute("class") || "";
      if ( className ) {
         jQuery.data( this, "__className__", className );
      }
            if (className) {
                jQuery.data(this, "__className__", className);
            }
      // If the element has a class name or if we're passed `false`,
      // then remove the whole classname (if there was one, the above saved it).
      // Otherwise bring back whatever was previously saved (if anything),
      // falling back to the empty string if nothing was stored.
      if ( this.setAttribute ) {
         this.setAttribute( "class",
            className || state === false ?
            "" :
            jQuery.data( this, "__className__" ) || ""
         );
      }
   } );
};
            // If the element has a class name or if we're passed `false`,
            // then remove the whole classname (if there was one, the above saved it).
            // Otherwise bring back whatever was previously saved (if anything),
            // falling back to the empty string if nothing was stored.
            if (this.setAttribute) {
                this.setAttribute("class",
                    className || state === false ?
                        "" :
                        jQuery.data(this, "__className__") || ""
                );
            }
        });
    };
function camelCase( string ) {
   return string.replace( /-([a-z])/g, function( _, letter ) {
      return letter.toUpperCase();
   } );
}
    function camelCase(string) {
        return string.replace(/-([a-z])/g, function (_, letter) {
            return letter.toUpperCase();
        });
    }
var oldFnCss,
   internalSwapCall = false,
   ralphaStart = /^[a-z]/,
    var oldFnCss,
        internalSwapCall = false,
        ralphaStart = /^[a-z]/,
   // The regex visualized:
   //
   //                         /----------\
   //                        |            |    /-------\
   //                        |  / Top  \  |   |         |
   //         /--- Border ---+-| Right  |-+---+- Width -+---\
   //        |                 | Bottom |                    |
   //        |                  \ Left /                     |
   //        |                                               |
   //        |                              /----------\     |
   //        |          /-------------\    |            |    |- END
   //        |         |               |   |  / Top  \  |    |
   //        |         |  / Margin  \  |   | | Right  | |    |
   //        |---------+-|           |-+---+-| Bottom |-+----|
   //        |            \ Padding /         \ Left /       |
   // BEGIN -|                                               |
   //        |                /---------\                    |
   //        |               |           |                   |
   //        |               |  / Min \  |    / Width  \     |
   //         \--------------+-|       |-+---|          |---/
   //                           \ Max /       \ Height /
   rautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;
        // The regex visualized:
        //
        //                         /----------\
        //                        |            |    /-------\
        //                        |  / Top  \  |   |         |
        //         /--- Border ---+-| Right  |-+---+- Width -+---\
        //        |                 | Bottom |                    |
        //        |                  \ Left /                     |
        //        |                                               |
        //        |                              /----------\     |
        //        |          /-------------\    |            |    |- END
        //        |         |               |   |  / Top  \  |    |
        //        |         |  / Margin  \  |   | | Right  | |    |
        //        |---------+-|           |-+---+-| Bottom |-+----|
        //        |            \ Padding /         \ Left /       |
        // BEGIN -|                                               |
        //        |                /---------\                    |
        //        |               |           |                   |
        //        |               |  / Min \  |    / Width  \     |
        //         \--------------+-|       |-+---|          |---/
        //                           \ Max /       \ Height /
        rautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;
// If this version of jQuery has .swap(), don't false-alarm on internal uses
if ( jQuery.swap ) {
   jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {
      var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;
    if (jQuery.swap) {
        jQuery.each(["height", "width", "reliableMarginRight"], function (_, name) {
            var oldHook = jQuery.cssHooks[name] && jQuery.cssHooks[name].get;
      if ( oldHook ) {
         jQuery.cssHooks[ name ].get = function() {
            var ret;
            if (oldHook) {
                jQuery.cssHooks[name].get = function () {
                    var ret;
            internalSwapCall = true;
            ret = oldHook.apply( this, arguments );
            internalSwapCall = false;
            return ret;
         };
      }
   } );
}
                    internalSwapCall = true;
                    ret = oldHook.apply(this, arguments);
                    internalSwapCall = false;
                    return ret;
                };
            }
        });
    }
jQuery.swap = function( elem, options, callback, args ) {
   var ret, name,
      old = {};
    jQuery.swap = function (elem, options, callback, args) {
        var ret, name,
            old = {};
   if ( !internalSwapCall ) {
      migrateWarn( "jQuery.swap() is undocumented and deprecated" );
   }
        if (!internalSwapCall) {
            migrateWarn("jQuery.swap() is undocumented and deprecated");
        }
   // Remember the old values, and insert the new ones
   for ( name in options ) {
      old[ name ] = elem.style[ name ];
      elem.style[ name ] = options[ name ];
   }
        // Remember the old values, and insert the new ones
        for (name in options) {
            old[name] = elem.style[name];
            elem.style[name] = options[name];
        }
   ret = callback.apply( elem, args || [] );
        ret = callback.apply(elem, args || []);
   // Revert the old values
   for ( name in options ) {
      elem.style[ name ] = old[ name ];
   }
        // Revert the old values
        for (name in options) {
            elem.style[name] = old[name];
        }
   return ret;
};
        return ret;
    };
if ( jQueryVersionSince( "3.4.0" ) && typeof Proxy !== "undefined" ) {
    if (jQueryVersionSince("3.4.0") && typeof Proxy !== "undefined") {
   jQuery.cssProps = new Proxy( jQuery.cssProps || {}, {
      set: function() {
         migrateWarn( "JQMIGRATE: jQuery.cssProps is deprecated" );
         return Reflect.set.apply( this, arguments );
      }
   } );
}
        jQuery.cssProps = new Proxy(jQuery.cssProps || {}, {
            set: function () {
                migrateWarn("JQMIGRATE: jQuery.cssProps is deprecated");
                return Reflect.set.apply(this, arguments);
            }
        });
    }
// Create a dummy jQuery.cssNumber if missing. It won't be used by jQuery but
// it will prevent code adding new keys to it unconditionally from crashing.
if ( !jQuery.cssNumber ) {
   jQuery.cssNumber = {};
}
    if (!jQuery.cssNumber) {
        jQuery.cssNumber = {};
    }
function isAutoPx( prop ) {
    function isAutoPx(prop) {
   // The first test is used to ensure that:
   // 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).
   // 2. The prop is not empty.
   return ralphaStart.test( prop ) &&
      rautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );
}
        // The first test is used to ensure that:
        // 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).
        // 2. The prop is not empty.
        return ralphaStart.test(prop) &&
            rautoPx.test(prop[0].toUpperCase() + prop.slice(1));
    }
oldFnCss = jQuery.fn.css;
    oldFnCss = jQuery.fn.css;
jQuery.fn.css = function( name, value ) {
   var origThis = this;
   if ( typeof name !== "string" ) {
      jQuery.each( name, function( n, v ) {
         jQuery.fn.css.call( origThis, n, v );
      } );
   }
   if ( typeof value === "number" && !isAutoPx( camelCase( name ) ) ) {
      migrateWarn( "Use of number-typed values is deprecated in jQuery.fn.css" );
   }
    jQuery.fn.css = function (name, value) {
        var origThis = this;
        if (typeof name !== "string") {
            jQuery.each(name, function (n, v) {
                jQuery.fn.css.call(origThis, n, v);
            });
        }
        if (typeof value === "number" && !isAutoPx(camelCase(name))) {
            migrateWarn("Use of number-typed values is deprecated in jQuery.fn.css");
        }
   return oldFnCss.apply( this, arguments );
};
        return oldFnCss.apply(this, arguments);
    };
var oldData = jQuery.data;
    var oldData = jQuery.data;
jQuery.data = function( elem, name, value ) {
   var curData, sameKeys, key;
    jQuery.data = function (elem, name, value) {
        var curData, sameKeys, key;
   // Name can be an object, and each entry in the object is meant to be set as data
   if ( name && typeof name === "object" && arguments.length === 2 ) {
      curData = jQuery.hasData( elem ) && oldData.call( this, elem );
      sameKeys = {};
      for ( key in name ) {
         if ( key !== camelCase( key ) ) {
            migrateWarn( "jQuery.data() always sets/gets camelCased names: " + key );
            curData[ key ] = name[ key ];
         } else {
            sameKeys[ key ] = name[ key ];
         }
      }
        // Name can be an object, and each entry in the object is meant to be set as data
        if (name && typeof name === "object" && arguments.length === 2) {
            curData = jQuery.hasData(elem) && oldData.call(this, elem);
            sameKeys = {};
            for (key in name) {
                if (key !== camelCase(key)) {
                    migrateWarn("jQuery.data() always sets/gets camelCased names: " + key);
                    curData[key] = name[key];
                } else {
                    sameKeys[key] = name[key];
                }
            }
      oldData.call( this, elem, sameKeys );
            oldData.call(this, elem, sameKeys);
      return name;
   }
            return name;
        }
   // If the name is transformed, look for the un-transformed name in the data object
   if ( name && typeof name === "string" && name !== camelCase( name ) ) {
      curData = jQuery.hasData( elem ) && oldData.call( this, elem );
      if ( curData && name in curData ) {
         migrateWarn( "jQuery.data() always sets/gets camelCased names: " + name );
         if ( arguments.length > 2 ) {
            curData[ name ] = value;
         }
         return curData[ name ];
      }
   }
        // If the name is transformed, look for the un-transformed name in the data object
        if (name && typeof name === "string" && name !== camelCase(name)) {
            curData = jQuery.hasData(elem) && oldData.call(this, elem);
            if (curData && name in curData) {
                migrateWarn("jQuery.data() always sets/gets camelCased names: " + name);
                if (arguments.length > 2) {
                    curData[name] = value;
                }
                return curData[name];
            }
        }
   return oldData.apply( this, arguments );
};
        return oldData.apply(this, arguments);
    };
// Support jQuery slim which excludes the effects module
if ( jQuery.fx ) {
    if (jQuery.fx) {
var intervalValue, intervalMsg,
   oldTweenRun = jQuery.Tween.prototype.run,
   linearEasing = function( pct ) {
      return pct;
   };
        var intervalValue, intervalMsg,
            oldTweenRun = jQuery.Tween.prototype.run,
            linearEasing = function (pct) {
                return pct;
            };
jQuery.Tween.prototype.run = function( ) {
   if ( jQuery.easing[ this.easing ].length > 1 ) {
      migrateWarn(
         "'jQuery.easing." + this.easing.toString() + "' should use only one argument"
      );
        jQuery.Tween.prototype.run = function () {
            if (jQuery.easing[this.easing].length > 1) {
                migrateWarn(
                    "'jQuery.easing." + this.easing.toString() + "' should use only one argument"
                );
      jQuery.easing[ this.easing ] = linearEasing;
   }
                jQuery.easing[this.easing] = linearEasing;
            }
   oldTweenRun.apply( this, arguments );
};
            oldTweenRun.apply(this, arguments);
        };
intervalValue = jQuery.fx.interval || 13;
intervalMsg = "jQuery.fx.interval is deprecated";
        intervalValue = jQuery.fx.interval || 13;
        intervalMsg = "jQuery.fx.interval is deprecated";
// Support: IE9, Android <=4.4
// Avoid false positives on browsers that lack rAF
// Don't warn if document is hidden, jQuery uses setTimeout (#292)
if ( window.requestAnimationFrame ) {
   Object.defineProperty( jQuery.fx, "interval", {
      configurable: true,
      enumerable: true,
      get: function() {
         if ( !window.document.hidden ) {
            migrateWarn( intervalMsg );
         }
         return intervalValue;
      },
      set: function( newValue ) {
         migrateWarn( intervalMsg );
         intervalValue = newValue;
      }
   } );
}
        if (window.requestAnimationFrame) {
            Object.defineProperty(jQuery.fx, "interval", {
                configurable: true,
                enumerable: true,
                get: function () {
                    if (!window.document.hidden) {
                        migrateWarn(intervalMsg);
                    }
                    return intervalValue;
                },
                set: function (newValue) {
                    migrateWarn(intervalMsg);
                    intervalValue = newValue;
                }
            });
        }
}
    }
var oldLoad = jQuery.fn.load,
   oldEventAdd = jQuery.event.add,
   originalFix = jQuery.event.fix;
    var oldLoad = jQuery.fn.load,
        oldEventAdd = jQuery.event.add,
        originalFix = jQuery.event.fix;
jQuery.event.props = [];
jQuery.event.fixHooks = {};
    jQuery.event.props = [];
    jQuery.event.fixHooks = {};
migrateWarnProp( jQuery.event.props, "concat", jQuery.event.props.concat,
   "jQuery.event.props.concat() is deprecated and removed" );
    migrateWarnProp(jQuery.event.props, "concat", jQuery.event.props.concat,
        "jQuery.event.props.concat() is deprecated and removed");
jQuery.event.fix = function( originalEvent ) {
   var event,
      type = originalEvent.type,
      fixHook = this.fixHooks[ type ],
      props = jQuery.event.props;
    jQuery.event.fix = function (originalEvent) {
        var event,
            type = originalEvent.type,
            fixHook = this.fixHooks[type],
            props = jQuery.event.props;
   if ( props.length ) {
      migrateWarn( "jQuery.event.props are deprecated and removed: " + props.join() );
      while ( props.length ) {
         jQuery.event.addProp( props.pop() );
      }
   }
        if (props.length) {
            migrateWarn("jQuery.event.props are deprecated and removed: " + props.join());
            while (props.length) {
                jQuery.event.addProp(props.pop());
            }
        }
   if ( fixHook && !fixHook._migrated_ ) {
      fixHook._migrated_ = true;
      migrateWarn( "jQuery.event.fixHooks are deprecated and removed: " + type );
      if ( ( props = fixHook.props ) && props.length ) {
         while ( props.length ) {
            jQuery.event.addProp( props.pop() );
         }
      }
   }
        if (fixHook && !fixHook._migrated_) {
            fixHook._migrated_ = true;
            migrateWarn("jQuery.event.fixHooks are deprecated and removed: " + type);
            if ((props = fixHook.props) && props.length) {
                while (props.length) {
                    jQuery.event.addProp(props.pop());
                }
            }
        }
   event = originalFix.call( this, originalEvent );
        event = originalFix.call(this, originalEvent);
   return fixHook && fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
};
        return fixHook && fixHook.filter ? fixHook.filter(event, originalEvent) : event;
    };
jQuery.event.add = function( elem, types ) {
    jQuery.event.add = function (elem, types) {
   // This misses the multiple-types case but that seems awfully rare
   if ( elem === window && types === "load" && window.document.readyState === "complete" ) {
      migrateWarn( "jQuery(window).on('load'...) called after load event occurred" );
   }
   return oldEventAdd.apply( this, arguments );
};
        // This misses the multiple-types case but that seems awfully rare
        if (elem === window && types === "load" && window.document.readyState === "complete") {
            migrateWarn("jQuery(window).on('load'...) called after load event occurred");
        }
        return oldEventAdd.apply(this, arguments);
    };
jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
    jQuery.each(["load", "unload", "error"], function (_, name) {
   jQuery.fn[ name ] = function() {
      var args = Array.prototype.slice.call( arguments, 0 );
        jQuery.fn[name] = function () {
            var args = Array.prototype.slice.call(arguments, 0);
      // If this is an ajax load() the first arg should be the string URL;
      // technically this could also be the "Anything" arg of the event .load()
      // which just goes to show why this dumb signature has been deprecated!
      // jQuery custom builds that exclude the Ajax module justifiably die here.
      if ( name === "load" && typeof args[ 0 ] === "string" ) {
         return oldLoad.apply( this, args );
      }
            // If this is an ajax load() the first arg should be the string URL;
            // technically this could also be the "Anything" arg of the event .load()
            // which just goes to show why this dumb signature has been deprecated!
            // jQuery custom builds that exclude the Ajax module justifiably die here.
            if (name === "load" && typeof args[0] === "string") {
                return oldLoad.apply(this, args);
            }
      migrateWarn( "jQuery.fn." + name + "() is deprecated" );
            migrateWarn("jQuery.fn." + name + "() is deprecated");
      args.splice( 0, 0, name );
      if ( arguments.length ) {
         return this.on.apply( this, args );
      }
            args.splice(0, 0, name);
            if (arguments.length) {
                return this.on.apply(this, args);
            }
      // Use .triggerHandler here because:
      // - load and unload events don't need to bubble, only applied to window or image
      // - error event should not bubble to window, although it does pre-1.7
      // See http://bugs.jquery.com/ticket/11820
      this.triggerHandler.apply( this, args );
      return this;
   };
            // Use .triggerHandler here because:
            // - load and unload events don't need to bubble, only applied to window or image
            // - error event should not bubble to window, although it does pre-1.7
            // See http://bugs.jquery.com/ticket/11820
            this.triggerHandler.apply(this, args);
            return this;
        };
} );
    });
jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
   "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
   "change select submit keydown keypress keyup contextmenu" ).split( " " ),
   function( _i, name ) {
    jQuery.each(("blur focus focusin focusout resize scroll click dblclick " +
        "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
        "change select submit keydown keypress keyup contextmenu").split(" "),
        function (_i, name) {
   // Handle event binding
   jQuery.fn[ name ] = function( data, fn ) {
      migrateWarn( "jQuery.fn." + name + "() event shorthand is deprecated" );
      return arguments.length > 0 ?
         this.on( name, null, data, fn ) :
         this.trigger( name );
   };
} );
            // Handle event binding
            jQuery.fn[name] = function (data, fn) {
                migrateWarn("jQuery.fn." + name + "() event shorthand is deprecated");
                return arguments.length > 0 ?
                    this.on(name, null, data, fn) :
                    this.trigger(name);
            };
        });
// Trigger "ready" event only once, on document ready
jQuery( function() {
   jQuery( window.document ).triggerHandler( "ready" );
} );
    jQuery(function () {
        jQuery(window.document).triggerHandler("ready");
    });
jQuery.event.special.ready = {
   setup: function() {
      if ( this === window.document ) {
         migrateWarn( "'ready' event is deprecated" );
      }
   }
};
    jQuery.event.special.ready = {
        setup: function () {
            if (this === window.document) {
                migrateWarn("'ready' event is deprecated");
            }
        }
    };
jQuery.fn.extend( {
    jQuery.fn.extend({
   bind: function( types, data, fn ) {
      migrateWarn( "jQuery.fn.bind() is deprecated" );
      return this.on( types, null, data, fn );
   },
   unbind: function( types, fn ) {
      migrateWarn( "jQuery.fn.unbind() is deprecated" );
      return this.off( types, null, fn );
   },
   delegate: function( selector, types, data, fn ) {
      migrateWarn( "jQuery.fn.delegate() is deprecated" );
      return this.on( types, selector, data, fn );
   },
   undelegate: function( selector, types, fn ) {
      migrateWarn( "jQuery.fn.undelegate() is deprecated" );
      return arguments.length === 1 ?
         this.off( selector, "**" ) :
         this.off( types, selector || "**", fn );
   },
   hover: function( fnOver, fnOut ) {
      migrateWarn( "jQuery.fn.hover() is deprecated" );
      return this.on( "mouseenter", fnOver ).on( "mouseleave", fnOut || fnOver );
   }
} );
        bind: function (types, data, fn) {
            migrateWarn("jQuery.fn.bind() is deprecated");
            return this.on(types, null, data, fn);
        },
        unbind: function (types, fn) {
            migrateWarn("jQuery.fn.unbind() is deprecated");
            return this.off(types, null, fn);
        },
        delegate: function (selector, types, data, fn) {
            migrateWarn("jQuery.fn.delegate() is deprecated");
            return this.on(types, selector, data, fn);
        },
        undelegate: function (selector, types, fn) {
            migrateWarn("jQuery.fn.undelegate() is deprecated");
            return arguments.length === 1 ?
                this.off(selector, "**") :
                this.off(types, selector || "**", fn);
        },
        hover: function (fnOver, fnOut) {
            migrateWarn("jQuery.fn.hover() is deprecated");
            return this.on("mouseenter", fnOver).on("mouseleave", fnOut || fnOver);
        }
    });
var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
   origHtmlPrefilter = jQuery.htmlPrefilter,
   makeMarkup = function( html ) {
      var doc = window.document.implementation.createHTMLDocument( "" );
      doc.body.innerHTML = html;
      return doc.body && doc.body.innerHTML;
   },
   warnIfChanged = function( html ) {
      var changed = html.replace( rxhtmlTag, "<$1></$2>" );
      if ( changed !== html && makeMarkup( html ) !== makeMarkup( changed ) ) {
         migrateWarn( "HTML tags must be properly nested and closed: " + html );
      }
   };
    var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
        origHtmlPrefilter = jQuery.htmlPrefilter,
        makeMarkup = function (html) {
            var doc = window.document.implementation.createHTMLDocument("");
            doc.body.innerHTML = html;
            return doc.body && doc.body.innerHTML;
        },
        warnIfChanged = function (html) {
            var changed = html.replace(rxhtmlTag, "<$1></$2>");
            if (changed !== html && makeMarkup(html) !== makeMarkup(changed)) {
                migrateWarn("HTML tags must be properly nested and closed: " + html);
            }
        };
jQuery.UNSAFE_restoreLegacyHtmlPrefilter = function() {
   jQuery.htmlPrefilter = function( html ) {
      warnIfChanged( html );
      return html.replace( rxhtmlTag, "<$1></$2>" );
   };
};
    jQuery.UNSAFE_restoreLegacyHtmlPrefilter = function () {
        jQuery.htmlPrefilter = function (html) {
            warnIfChanged(html);
            return html.replace(rxhtmlTag, "<$1></$2>");
        };
    };
jQuery.htmlPrefilter = function( html ) {
   warnIfChanged( html );
   return origHtmlPrefilter( html );
};
    jQuery.htmlPrefilter = function (html) {
        warnIfChanged(html);
        return origHtmlPrefilter(html);
    };
var oldOffset = jQuery.fn.offset;
    var oldOffset = jQuery.fn.offset;
jQuery.fn.offset = function() {
   var docElem,
      elem = this[ 0 ],
      bogus = { top: 0, left: 0 };
    jQuery.fn.offset = function () {
        var docElem,
            elem = this[0],
            bogus = {top: 0, left: 0};
   if ( !elem || !elem.nodeType ) {
      migrateWarn( "jQuery.fn.offset() requires a valid DOM element" );
      return undefined;
   }
        if (!elem || !elem.nodeType) {
            migrateWarn("jQuery.fn.offset() requires a valid DOM element");
            return undefined;
        }
   docElem = ( elem.ownerDocument || window.document ).documentElement;
   if ( !jQuery.contains( docElem, elem ) ) {
      migrateWarn( "jQuery.fn.offset() requires an element connected to a document" );
      return bogus;
   }
        docElem = (elem.ownerDocument || window.document).documentElement;
        if (!jQuery.contains(docElem, elem)) {
            migrateWarn("jQuery.fn.offset() requires an element connected to a document");
            return bogus;
        }
   return oldOffset.apply( this, arguments );
};
        return oldOffset.apply(this, arguments);
    };
// Support jQuery slim which excludes the ajax module
// The jQuery.param patch is about respecting `jQuery.ajaxSettings.traditional`
// so it doesn't make sense for the slim build.
if ( jQuery.ajax ) {
    if (jQuery.ajax) {
var oldParam = jQuery.param;
        var oldParam = jQuery.param;
jQuery.param = function( data, traditional ) {
   var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
        jQuery.param = function (data, traditional) {
            var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
   if ( traditional === undefined && ajaxTraditional ) {
            if (traditional === undefined && ajaxTraditional) {
      migrateWarn( "jQuery.param() no longer uses jQuery.ajaxSettings.traditional" );
      traditional = ajaxTraditional;
   }
                migrateWarn("jQuery.param() no longer uses jQuery.ajaxSettings.traditional");
                traditional = ajaxTraditional;
            }
   return oldParam.call( this, data, traditional );
};
            return oldParam.call(this, data, traditional);
        };
}
    }
var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
    var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
jQuery.fn.andSelf = function() {
   migrateWarn( "jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()" );
   return oldSelf.apply( this, arguments );
};
    jQuery.fn.andSelf = function () {
        migrateWarn("jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()");
        return oldSelf.apply(this, arguments);
    };
// Support jQuery slim which excludes the deferred module in jQuery 4.0+
if ( jQuery.Deferred ) {
    if (jQuery.Deferred) {
var oldDeferred = jQuery.Deferred,
   tuples = [
        var oldDeferred = jQuery.Deferred,
            tuples = [
      // Action, add listener, callbacks, .then handlers, final state
      [ "resolve", "done", jQuery.Callbacks( "once memory" ),
         jQuery.Callbacks( "once memory" ), "resolved" ],
      [ "reject", "fail", jQuery.Callbacks( "once memory" ),
         jQuery.Callbacks( "once memory" ), "rejected" ],
      [ "notify", "progress", jQuery.Callbacks( "memory" ),
         jQuery.Callbacks( "memory" ) ]
   ];
                // Action, add listener, callbacks, .then handlers, final state
                ["resolve", "done", jQuery.Callbacks("once memory"),
                    jQuery.Callbacks("once memory"), "resolved"],
                ["reject", "fail", jQuery.Callbacks("once memory"),
                    jQuery.Callbacks("once memory"), "rejected"],
                ["notify", "progress", jQuery.Callbacks("memory"),
                    jQuery.Callbacks("memory")]
            ];
jQuery.Deferred = function( func ) {
   var deferred = oldDeferred(),
      promise = deferred.promise();
        jQuery.Deferred = function (func) {
            var deferred = oldDeferred(),
                promise = deferred.promise();
   deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {
      var fns = arguments;
            deferred.pipe = promise.pipe = function ( /* fnDone, fnFail, fnProgress */) {
                var fns = arguments;
      migrateWarn( "deferred.pipe() is deprecated" );
                migrateWarn("deferred.pipe() is deprecated");
      return jQuery.Deferred( function( newDefer ) {
         jQuery.each( tuples, function( i, tuple ) {
            var fn = typeof fns[ i ] === "function" && fns[ i ];
                return jQuery.Deferred(function (newDefer) {
                    jQuery.each(tuples, function (i, tuple) {
                        var fn = typeof fns[i] === "function" && fns[i];
            // Deferred.done(function() { bind to newDefer or newDefer.resolve })
            // deferred.fail(function() { bind to newDefer or newDefer.reject })
            // deferred.progress(function() { bind to newDefer or newDefer.notify })
            deferred[ tuple[ 1 ] ]( function() {
               var returned = fn && fn.apply( this, arguments );
               if ( returned && typeof returned.promise === "function" ) {
                  returned.promise()
                     .done( newDefer.resolve )
                     .fail( newDefer.reject )
                     .progress( newDefer.notify );
               } else {
                  newDefer[ tuple[ 0 ] + "With" ](
                     this === promise ? newDefer.promise() : this,
                     fn ? [ returned ] : arguments
                  );
               }
            } );
         } );
         fns = null;
      } ).promise();
                        // Deferred.done(function() { bind to newDefer or newDefer.resolve })
                        // deferred.fail(function() { bind to newDefer or newDefer.reject })
                        // deferred.progress(function() { bind to newDefer or newDefer.notify })
                        deferred[tuple[1]](function () {
                            var returned = fn && fn.apply(this, arguments);
                            if (returned && typeof returned.promise === "function") {
                                returned.promise()
                                    .done(newDefer.resolve)
                                    .fail(newDefer.reject)
                                    .progress(newDefer.notify);
                            } else {
                                newDefer[tuple[0] + "With"](
                                    this === promise ? newDefer.promise() : this,
                                    fn ? [returned] : arguments
                                );
                            }
                        });
                    });
                    fns = null;
                }).promise();
   };
            };
   if ( func ) {
      func.call( deferred, deferred );
   }
            if (func) {
                func.call(deferred, deferred);
            }
   return deferred;
};
            return deferred;
        };
// Preserve handler of uncaught exceptions in promise chains
jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook;
        jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook;
}
    }
return jQuery;
} );
    return jQuery;
});