BigBadGoat

Reddit Trading Flair Linker Enhanced 1.14.328.3

Dec 5th, 2014
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name Reddit Trading Flair Linker Enhanced
  3. // @author blueshiftlabs
  4. // @namespace http://blueshiftlabs.net/FlairLinker
  5. // @description Adds additional functionality to flair on trade subreddits (SteamGameSwap, tf2trade, and Dota2Trade)
  6. // @version 1.14.328.3
  7. // @updateURL http://userscripts.org/scripts/source/145990.meta.js
  8. // @updateURL https://userscripts.org/scripts/source/145990.meta.js
  9. // @downloadURL http://userscripts.org/scripts/source/145990.user.js
  10. // @include *://*.reddit.com/r/*
  11. // @compatible Chrome, Greasemonkey
  12. // ==/UserScript==
  13. /*
  14.  * This script is available under the terms of the MIT License:
  15.  *
  16.  * Copyright (c) 2012-2014 Blueshift Labs
  17.  *
  18.  * Permission is hereby granted, free of charge, to any person obtaining a copy of
  19.  * this software and associated documentation files (the "Software"), to deal in
  20.  * the Software without restriction, including without limitation the rights to
  21.  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  22.  * the Software, and to permit persons to whom the Software is furnished to do so,
  23.  * subject to the following conditions:
  24.  *
  25.  * The above copyright notice and this permission notice shall be included in all
  26.  * copies or substantial portions of the Software.
  27.  *
  28.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  30.  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  31.  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  32.  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  33.  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  34.  */
  35. (function () {
  36.   ////////////////////////
  37.   // JQUERY STARTS HERE //
  38.   ////////////////////////
  39.   (function () {
  40.     /*! jQuery v1.7.2 jquery.com | jquery.org/license */
  41.     (function (a, b) {
  42.       function cy(a) {
  43.         return f.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1
  44.       }
  45.       function cu(a) {
  46.         if (!cj[a]) {
  47.           var b = c.body,
  48.           d = f('<' + a + '>').appendTo(b),
  49.           e = d.css('display');
  50.           d.remove();
  51.           if (e === 'none' || e === '') {
  52.             ck || (ck = c.createElement('iframe'), ck.frameBorder = ck.width = ck.height = 0),
  53.             b.appendChild(ck);
  54.             if (!cl || !ck.createElement) cl = (ck.contentWindow || ck.contentDocument).document,
  55.             cl.write((f.support.boxModel ? '<!doctype html>' : '') + '<html><body>'),
  56.             cl.close();
  57.             d = cl.createElement(a),
  58.             cl.body.appendChild(d),
  59.             e = f.css(d, 'display'),
  60.             b.removeChild(ck)
  61.           }
  62.           cj[a] = e
  63.         }
  64.         return cj[a]
  65.       }
  66.       function ct(a, b) {
  67.         var c = {
  68.         };
  69.         f.each(cp.concat.apply([], cp.slice(0, b)), function () {
  70.           c[this] = a
  71.         });
  72.         return c
  73.       }
  74.       function cs() {
  75.         cq = b
  76.       }
  77.       function cr() {
  78.         setTimeout(cs, 0);
  79.         return cq = f.now()
  80.       }
  81.       function ci() {
  82.         try {
  83.           return new a.ActiveXObject('Microsoft.XMLHTTP')
  84.         } catch (b) {
  85.         }
  86.       }
  87.       function ch() {
  88.         try {
  89.           return new a.XMLHttpRequest
  90.         } catch (b) {
  91.         }
  92.       }
  93.       function cb(a, c) {
  94.         a.dataFilter && (c = a.dataFilter(c, a.dataType));
  95.         var d = a.dataTypes,
  96.         e = {
  97.         },
  98.         g,
  99.         h,
  100.         i = d.length,
  101.         j,
  102.         k = d[0],
  103.         l,
  104.         m,
  105.         n,
  106.         o,
  107.         p;
  108.         for (g = 1; g < i; g++) {
  109.           if (g === 1) for (h in a.converters) typeof h == 'string' && (e[h.toLowerCase()] = a.converters[h]);
  110.           l = k,
  111.           k = d[g];
  112.           if (k === '*') k = l;
  113.            else if (l !== '*' && l !== k) {
  114.             m = l + ' ' + k,
  115.             n = e[m] || e['* ' + k];
  116.             if (!n) {
  117.               p = b;
  118.               for (o in e) {
  119.                 j = o.split(' ');
  120.                 if (j[0] === l || j[0] === '*') {
  121.                   p = e[j[1] + ' ' + k];
  122.                   if (p) {
  123.                     o = e[o],
  124.                     o === !0 ? n = p : p === !0 && (n = o);
  125.                     break
  126.                   }
  127.                 }
  128.               }
  129.             }
  130.             !n && !p && f.error('No conversion from ' + m.replace(' ', ' to ')),
  131.             n !== !0 && (c = n ? n(c)  : p(o(c)))
  132.           }
  133.         }
  134.         return c
  135.       }
  136.       function ca(a, c, d) {
  137.         var e = a.contents,
  138.         f = a.dataTypes,
  139.         g = a.responseFields,
  140.         h,
  141.         i,
  142.         j,
  143.         k;
  144.         for (i in g) i in d && (c[g[i]] = d[i]);
  145.         while (f[0] === '*') f.shift(),
  146.         h === b && (h = a.mimeType || c.getResponseHeader('content-type'));
  147.         if (h) for (i in e) if (e[i] && e[i].test(h)) {
  148.           f.unshift(i);
  149.           break
  150.         }
  151.         if (f[0] in d) j = f[0];
  152.          else {
  153.           for (i in d) {
  154.             if (!f[0] || a.converters[i + ' ' + f[0]]) {
  155.               j = i;
  156.               break
  157.             }
  158.             k || (k = i)
  159.           }
  160.           j = j || k
  161.         }
  162.         if (j) {
  163.           j !== f[0] && f.unshift(j);
  164.           return d[j]
  165.         }
  166.       }
  167.       function b_(a, b, c, d) {
  168.         if (f.isArray(b)) f.each(b, function (b, e) {
  169.           c || bD.test(a) ? d(a, e)  : b_(a + '[' + (typeof e == 'object' ? b : '') + ']', e, c, d)
  170.         });
  171.          else if (!c && f.type(b) === 'object') for (var e in b) b_(a + '[' + e + ']', b[e], c, d);
  172.          else d(a, b)
  173.       }
  174.       function b$(a, c) {
  175.         var d,
  176.         e,
  177.         g = f.ajaxSettings.flatOptions || {
  178.         };
  179.         for (d in c) c[d] !== b && ((g[d] ? a : e || (e = {
  180.         })) [d] = c[d]);
  181.         e && f.extend(!0, a, e)
  182.       }
  183.       function bZ(a, c, d, e, f, g) {
  184.         f = f || c.dataTypes[0],
  185.         g = g || {
  186.         },
  187.         g[f] = !0;
  188.         var h = a[f],
  189.         i = 0,
  190.         j = h ? h.length : 0,
  191.         k = a === bS,
  192.         l;
  193.         for (; i < j && (k || !l); i++) l = h[i](c, d, e),
  194.         typeof l == 'string' && (!k || g[l] ? l = b : (c.dataTypes.unshift(l), l = bZ(a, c, d, e, l, g)));
  195.         (k || !l) && !g['*'] && (l = bZ(a, c, d, e, '*', g));
  196.         return l
  197.       }
  198.       function bY(a) {
  199.         return function (b, c) {
  200.           typeof b != 'string' && (c = b, b = '*');
  201.           if (f.isFunction(c)) {
  202.             var d = b.toLowerCase().split(bO),
  203.             e = 0,
  204.             g = d.length,
  205.             h,
  206.             i,
  207.             j;
  208.             for (; e < g; e++) h = d[e],
  209.             j = /^\+/.test(h),
  210.             j && (h = h.substr(1) || '*'),
  211.             i = a[h] = a[h] || [],
  212.             i[j ? 'unshift' : 'push'](c)
  213.           }
  214.         }
  215.       }
  216.       function bB(a, b, c) {
  217.         var d = b === 'width' ? a.offsetWidth : a.offsetHeight,
  218.         e = b === 'width' ? 1 : 0,
  219.         g = 4;
  220.         if (d > 0) {
  221.           if (c !== 'border') for (; e < g; e += 2) c || (d -= parseFloat(f.css(a, 'padding' + bx[e])) || 0),
  222.           c === 'margin' ? d += parseFloat(f.css(a, c + bx[e])) || 0 : d -= parseFloat(f.css(a, 'border' + bx[e] + 'Width')) || 0;
  223.           return d + 'px'
  224.         }
  225.         d = by(a, b);
  226.         if (d < 0 || d == null) d = a.style[b];
  227.         if (bt.test(d)) return d;
  228.         d = parseFloat(d) || 0;
  229.         if (c) for (; e < g; e += 2) d += parseFloat(f.css(a, 'padding' + bx[e])) || 0,
  230.         c !== 'padding' && (d += parseFloat(f.css(a, 'border' + bx[e] + 'Width')) || 0),
  231.         c === 'margin' && (d += parseFloat(f.css(a, c + bx[e])) || 0);
  232.         return d + 'px'
  233.       }
  234.       function bo(a) {
  235.         var b = c.createElement('div');
  236.         bh.appendChild(b),
  237.         b.innerHTML = a.outerHTML;
  238.         return b.firstChild
  239.       }
  240.       function bn(a) {
  241.         var b = (a.nodeName || '').toLowerCase();
  242.         b === 'input' ? bm(a)  : b !== 'script' && typeof a.getElementsByTagName != 'undefined' && f.grep(a.getElementsByTagName('input'), bm)
  243.       }
  244.       function bm(a) {
  245.         if (a.type === 'checkbox' || a.type === 'radio') a.defaultChecked = a.checked
  246.       }
  247.       function bl(a) {
  248.         return typeof a.getElementsByTagName != 'undefined' ? a.getElementsByTagName('*')  : typeof a.querySelectorAll != 'undefined' ? a.querySelectorAll('*')  : [
  249.         ]
  250.       }
  251.       function bk(a, b) {
  252.         var c;
  253.         b.nodeType === 1 && (b.clearAttributes && b.clearAttributes(), b.mergeAttributes && b.mergeAttributes(a), c = b.nodeName.toLowerCase(), c === 'object' ? b.outerHTML = a.outerHTML : c !== 'input' || a.type !== 'checkbox' && a.type !== 'radio' ? c === 'option' ? b.selected = a.defaultSelected : c === 'input' || c === 'textarea' ? b.defaultValue = a.defaultValue : c === 'script' && b.text !== a.text && (b.text = a.text)  : (a.checked && (b.defaultChecked = b.checked = a.checked), b.value !== a.value && (b.value = a.value)), b.removeAttribute(f.expando), b.removeAttribute('_submit_attached'), b.removeAttribute('_change_attached'))
  254.       }
  255.       function bj(a, b) {
  256.         if (b.nodeType === 1 && !!f.hasData(a)) {
  257.           var c,
  258.           d,
  259.           e,
  260.           g = f._data(a),
  261.           h = f._data(b, g),
  262.           i = g.events;
  263.           if (i) {
  264.             delete h.handle,
  265.             h.events = {
  266.             };
  267.             for (c in i) for (d = 0, e = i[c].length; d < e; d++) f.event.add(b, c, i[c][d])
  268.           }
  269.           h.data && (h.data = f.extend({
  270.           }, h.data))
  271.         }
  272.       }
  273.       function bi(a, b) {
  274.         return f.nodeName(a, 'table') ? a.getElementsByTagName('tbody') [0] || a.appendChild(a.ownerDocument.createElement('tbody'))  : a
  275.       }
  276.       function U(a) {
  277.         var b = V.split('|'),
  278.         c = a.createDocumentFragment();
  279.         if (c.createElement) while (b.length) c.createElement(b.pop());
  280.         return c
  281.       }
  282.       function T(a, b, c) {
  283.         b = b || 0;
  284.         if (f.isFunction(b)) return f.grep(a, function (a, d) {
  285.           var e = !!b.call(a, d, a);
  286.           return e === c
  287.         });
  288.         if (b.nodeType) return f.grep(a, function (a, d) {
  289.           return a === b === c
  290.         });
  291.         if (typeof b == 'string') {
  292.           var d = f.grep(a, function (a) {
  293.             return a.nodeType === 1
  294.           });
  295.           if (O.test(b)) return f.filter(b, d, !c);
  296.           b = f.filter(b, d)
  297.         }
  298.         return f.grep(a, function (a, d) {
  299.           return f.inArray(a, b) >= 0 === c
  300.         })
  301.       }
  302.       function S(a) {
  303.         return !a || !a.parentNode || a.parentNode.nodeType === 11
  304.       }
  305.       function K() {
  306.         return !0
  307.       }
  308.       function J() {
  309.         return !1
  310.       }
  311.       function n(a, b, c) {
  312.         var d = b + 'defer',
  313.         e = b + 'queue',
  314.         g = b + 'mark',
  315.         h = f._data(a, d);
  316.         h && (c === 'queue' || !f._data(a, e)) && (c === 'mark' || !f._data(a, g)) && setTimeout(function () {
  317.           !f._data(a, e) && !f._data(a, g) && (f.removeData(a, d, !0), h.fire())
  318.         }, 0)
  319.       }
  320.       function m(a) {
  321.         for (var b in a) {
  322.           if (b === 'data' && f.isEmptyObject(a[b])) continue;
  323.           if (b !== 'toJSON') return !1
  324.         }
  325.         return !0
  326.       }
  327.       function l(a, c, d) {
  328.         if (d === b && a.nodeType === 1) {
  329.           var e = 'data-' + c.replace(k, '-$1').toLowerCase();
  330.           d = a.getAttribute(e);
  331.           if (typeof d == 'string') {
  332.             try {
  333.               d = d === 'true' ? !0 : d === 'false' ? !1 : d === 'null' ? null : f.isNumeric(d) ? + d : j.test(d) ? f.parseJSON(d)  : d
  334.             } catch (g) {
  335.             }
  336.             f.data(a, c, d)
  337.           } else d = b
  338.         }
  339.         return d
  340.       }
  341.       function h(a) {
  342.         var b = g[a] = {
  343.         },
  344.         c,
  345.         d;
  346.         a = a.split(/\s+/);
  347.         for (c = 0, d = a.length; c < d; c++) b[a[c]] = !0;
  348.         return b
  349.       }
  350.       var c = a.document,
  351.       d = a.navigator,
  352.       e = a.location,
  353.       f = function () {
  354.         function J() {
  355.           if (!e.isReady) {
  356.             try {
  357.               c.documentElement.doScroll('left')
  358.             } catch (a) {
  359.               setTimeout(J, 1);
  360.               return
  361.             }
  362.             e.ready()
  363.           }
  364.         }
  365.         var e = function (a, b) {
  366.           return new e.fn.init(a, b, h)
  367.         },
  368.         f = a.jQuery,
  369.         g = a.$,
  370.         h,
  371.         i = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
  372.         j = /\S/,
  373.         k = /^\s+/,
  374.         l = /\s+$/,
  375.         m = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
  376.         n = /^[\],:{}\s]*$/,
  377.         o = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
  378.         p = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
  379.         q = /(?:^|:|,)(?:\s*\[)+/g,
  380.         r = /(webkit)[ \/]([\w.]+)/,
  381.         s = /(opera)(?:.*version)?[ \/]([\w.]+)/,
  382.         t = /(msie) ([\w.]+)/,
  383.         u = /(mozilla)(?:.*? rv:([\w.]+))?/,
  384.         v = /-([a-z]|[0-9])/gi,
  385.         w = /^-ms-/,
  386.         x = function (a, b) {
  387.           return (b + '').toUpperCase()
  388.         },
  389.         y = d.userAgent,
  390.         z,
  391.         A,
  392.         B,
  393.         C = Object.prototype.toString,
  394.         D = Object.prototype.hasOwnProperty,
  395.         E = Array.prototype.push,
  396.         F = Array.prototype.slice,
  397.         G = String.prototype.trim,
  398.         H = Array.prototype.indexOf,
  399.         I = {
  400.         };
  401.         e.fn = e.prototype = {
  402.           constructor: e,
  403.           init: function (a, d, f) {
  404.             var g,
  405.             h,
  406.             j,
  407.             k;
  408.             if (!a) return this;
  409.             if (a.nodeType) {
  410.               this.context = this[0] = a,
  411.               this.length = 1;
  412.               return this
  413.             }
  414.             if (a === 'body' && !d && c.body) {
  415.               this.context = c,
  416.               this[0] = c.body,
  417.               this.selector = a,
  418.               this.length = 1;
  419.               return this
  420.             }
  421.             if (typeof a == 'string') {
  422.               a.charAt(0) !== '<' || a.charAt(a.length - 1) !== '>' || a.length < 3 ? g = i.exec(a)  : g = [
  423.                 null,
  424.                 a,
  425.                 null
  426.               ];
  427.               if (g && (g[1] || !d)) {
  428.                 if (g[1]) {
  429.                   d = d instanceof e ? d[0] : d,
  430.                   k = d ? d.ownerDocument || d : c,
  431.                   j = m.exec(a),
  432.                   j ? e.isPlainObject(d) ? (a = [
  433.                     c.createElement(j[1])
  434.                   ], e.fn.attr.call(a, d, !0))  : a = [
  435.                     k.createElement(j[1])
  436.                   ] : (j = e.buildFragment([g[1]], [
  437.                     k
  438.                   ]), a = (j.cacheable ? e.clone(j.fragment)  : j.fragment).childNodes);
  439.                   return e.merge(this, a)
  440.                 }
  441.                 h = c.getElementById(g[2]);
  442.                 if (h && h.parentNode) {
  443.                   if (h.id !== g[2]) return f.find(a);
  444.                   this.length = 1,
  445.                   this[0] = h
  446.                 }
  447.                 this.context = c,
  448.                 this.selector = a;
  449.                 return this
  450.               }
  451.               return !d || d.jquery ? (d || f).find(a)  : this.constructor(d).find(a)
  452.             }
  453.             if (e.isFunction(a)) return f.ready(a);
  454.             a.selector !== b && (this.selector = a.selector, this.context = a.context);
  455.             return e.makeArray(a, this)
  456.           },
  457.           selector: '',
  458.           jquery: '1.7.2',
  459.           length: 0,
  460.           size: function () {
  461.             return this.length
  462.           },
  463.           toArray: function () {
  464.             return F.call(this, 0)
  465.           },
  466.           get: function (a) {
  467.             return a == null ? this.toArray()  : a < 0 ? this[this.length + a] : this[a]
  468.           },
  469.           pushStack: function (a, b, c) {
  470.             var d = this.constructor();
  471.             e.isArray(a) ? E.apply(d, a)  : e.merge(d, a),
  472.             d.prevObject = this,
  473.             d.context = this.context,
  474.             b === 'find' ? d.selector = this.selector + (this.selector ? ' ' : '') + c : b && (d.selector = this.selector + '.' + b + '(' + c + ')');
  475.             return d
  476.           },
  477.           each: function (a, b) {
  478.             return e.each(this, a, b)
  479.           },
  480.           ready: function (a) {
  481.             e.bindReady(),
  482.             A.add(a);
  483.             return this
  484.           },
  485.           eq: function (a) {
  486.             a = + a;
  487.             return a === - 1 ? this.slice(a)  : this.slice(a, a + 1)
  488.           },
  489.           first: function () {
  490.             return this.eq(0)
  491.           },
  492.           last: function () {
  493.             return this.eq( - 1)
  494.           },
  495.           slice: function () {
  496.             return this.pushStack(F.apply(this, arguments), 'slice', F.call(arguments).join(','))
  497.           },
  498.           map: function (a) {
  499.             return this.pushStack(e.map(this, function (b, c) {
  500.               return a.call(b, c, b)
  501.             }))
  502.           },
  503.           end: function () {
  504.             return this.prevObject || this.constructor(null)
  505.           },
  506.           push: E,
  507.           sort: [
  508.           ].sort,
  509.           splice: [
  510.           ].splice
  511.         },
  512.         e.fn.init.prototype = e.fn,
  513.         e.extend = e.fn.extend = function () {
  514.           var a,
  515.           c,
  516.           d,
  517.           f,
  518.           g,
  519.           h,
  520.           i = arguments[0] || {
  521.           },
  522.           j = 1,
  523.           k = arguments.length,
  524.           l = !1;
  525.           typeof i == 'boolean' && (l = i, i = arguments[1] || {
  526.           }, j = 2),
  527.           typeof i != 'object' && !e.isFunction(i) && (i = {
  528.           }),
  529.           k === j && (i = this, --j);
  530.           for (; j < k; j++) if ((a = arguments[j]) != null) for (c in a) {
  531.             d = i[c],
  532.             f = a[c];
  533.             if (i === f) continue;
  534.             l && f && (e.isPlainObject(f) || (g = e.isArray(f))) ? (g ? (g = !1, h = d && e.isArray(d) ? d : [
  535.             ])  : h = d && e.isPlainObject(d) ? d : {
  536.             }, i[c] = e.extend(l, h, f))  : f !== b && (i[c] = f)
  537.           }
  538.           return i
  539.         },
  540.         e.extend({
  541.           noConflict: function (b) {
  542.             a.$ === e && (a.$ = g),
  543.             b && a.jQuery === e && (a.jQuery = f);
  544.             return e
  545.           },
  546.           isReady: !1,
  547.           readyWait: 1,
  548.           holdReady: function (a) {
  549.             a ? e.readyWait++ : e.ready(!0)
  550.           },
  551.           ready: function (a) {
  552.             if (a === !0 && !--e.readyWait || a !== !0 && !e.isReady) {
  553.               if (!c.body) return setTimeout(e.ready, 1);
  554.               e.isReady = !0;
  555.               if (a !== !0 && --e.readyWait > 0) return;
  556.               A.fireWith(c, [
  557.                 e
  558.               ]),
  559.               e.fn.trigger && e(c).trigger('ready').off('ready')
  560.             }
  561.           },
  562.           bindReady: function () {
  563.             if (!A) {
  564.               A = e.Callbacks('once memory');
  565.               if (c.readyState === 'complete') return setTimeout(e.ready, 1);
  566.               if (c.addEventListener) c.addEventListener('DOMContentLoaded', B, !1),
  567.               a.addEventListener('load', e.ready, !1);
  568.                else if (c.attachEvent) {
  569.                 c.attachEvent('onreadystatechange', B),
  570.                 a.attachEvent('onload', e.ready);
  571.                 var b = !1;
  572.                 try {
  573.                   b = a.frameElement == null
  574.                 } catch (d) {
  575.                 }
  576.                 c.documentElement.doScroll && b && J()
  577.               }
  578.             }
  579.           },
  580.           isFunction: function (a) {
  581.             return e.type(a) === 'function'
  582.           },
  583.           isArray: Array.isArray || function (a) {
  584.             return e.type(a) === 'array'
  585.           },
  586.           isWindow: function (a) {
  587.             return a != null && a == a.window
  588.           },
  589.           isNumeric: function (a) {
  590.             return !isNaN(parseFloat(a)) && isFinite(a)
  591.           },
  592.           type: function (a) {
  593.             return a == null ? String(a)  : I[C.call(a)] || 'object'
  594.           },
  595.           isPlainObject: function (a) {
  596.             if (!a || e.type(a) !== 'object' || a.nodeType || e.isWindow(a)) return !1;
  597.             try {
  598.               if (a.constructor && !D.call(a, 'constructor') && !D.call(a.constructor.prototype, 'isPrototypeOf')) return !1
  599.             } catch (c) {
  600.               return !1
  601.             }
  602.             var d;
  603.             for (d in a);
  604.             return d === b || D.call(a, d)
  605.           },
  606.           isEmptyObject: function (a) {
  607.             for (var b in a) return !1;
  608.             return !0
  609.           },
  610.           error: function (a) {
  611.             throw new Error(a)
  612.           },
  613.           parseJSON: function (b) {
  614.             if (typeof b != 'string' || !b) return null;
  615.             b = e.trim(b);
  616.             if (a.JSON && a.JSON.parse) return a.JSON.parse(b);
  617.             if (n.test(b.replace(o, '@').replace(p, ']').replace(q, ''))) return (new Function('return ' + b)) ();
  618.             e.error('Invalid JSON: ' + b)
  619.           },
  620.           parseXML: function (c) {
  621.             if (typeof c != 'string' || !c) return null;
  622.             var d,
  623.             f;
  624.             try {
  625.               a.DOMParser ? (f = new DOMParser, d = f.parseFromString(c, 'text/xml'))  : (d = new ActiveXObject('Microsoft.XMLDOM'), d.async = 'false', d.loadXML(c))
  626.             } catch (g) {
  627.               d = b
  628.             }(!d || !d.documentElement || d.getElementsByTagName('parsererror').length) && e.error('Invalid XML: ' + c);
  629.             return d
  630.           },
  631.           noop: function () {
  632.           },
  633.           globalEval: function (b) {
  634.             b && j.test(b) && (a.execScript || function (b) {
  635.               a.eval.call(a, b)
  636.             }) (b)
  637.           },
  638.           camelCase: function (a) {
  639.             return a.replace(w, 'ms-').replace(v, x)
  640.           },
  641.           nodeName: function (a, b) {
  642.             return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase()
  643.           },
  644.           each: function (a, c, d) {
  645.             var f,
  646.             g = 0,
  647.             h = a.length,
  648.             i = h === b || e.isFunction(a);
  649.             if (d) {
  650.               if (i) {
  651.                 for (f in a) if (c.apply(a[f], d) === !1) break
  652.               } else for (; g < h; ) if (c.apply(a[g++], d) === !1) break
  653.             } else if (i) {
  654.               for (f in a) if (c.call(a[f], f, a[f]) === !1) break
  655.             } else for (; g < h; ) if (c.call(a[g], g, a[g++]) === !1) break;
  656.             return a
  657.           },
  658.           trim: G ? function (a) {
  659.             return a == null ? '' : G.call(a)
  660.           }
  661.            : function (a) {
  662.             return a == null ? '' : (a + '').replace(k, '').replace(l, '')
  663.           },
  664.           makeArray: function (a, b) {
  665.             var c = b || [];
  666.             if (a != null) {
  667.               var d = e.type(a);
  668.               a.length == null || d === 'string' || d === 'function' || d === 'regexp' || e.isWindow(a) ? E.call(c, a)  : e.merge(c, a)
  669.             }
  670.             return c
  671.           },
  672.           inArray: function (a, b, c) {
  673.             var d;
  674.             if (b) {
  675.               if (H) return H.call(b, a, c);
  676.               d = b.length,
  677.               c = c ? c < 0 ? Math.max(0, d + c)  : c : 0;
  678.               for (; c < d; c++) if (c in b && b[c] === a) return c
  679.             }
  680.             return - 1
  681.           },
  682.           merge: function (a, c) {
  683.             var d = a.length,
  684.             e = 0;
  685.             if (typeof c.length == 'number') for (var f = c.length; e < f; e++) a[d++] = c[e];
  686.              else while (c[e] !== b) a[d++] = c[e++];
  687.             a.length = d;
  688.             return a
  689.           },
  690.           grep: function (a, b, c) {
  691.             var d = [
  692.             ],
  693.             e;
  694.             c = !!c;
  695.             for (var f = 0, g = a.length; f < g; f++) e = !!b(a[f], f),
  696.             c !== e && d.push(a[f]);
  697.             return d
  698.           },
  699.           map: function (a, c, d) {
  700.             var f,
  701.             g,
  702.             h = [
  703.             ],
  704.             i = 0,
  705.             j = a.length,
  706.             k = a instanceof e || j !== b && typeof j == 'number' && (j > 0 && a[0] && a[j - 1] || j === 0 || e.isArray(a));
  707.             if (k) for (; i < j; i++) f = c(a[i], i, d),
  708.             f != null && (h[h.length] = f);
  709.              else for (g in a) f = c(a[g], g, d),
  710.             f != null && (h[h.length] = f);
  711.             return h.concat.apply([], h)
  712.           },
  713.           guid: 1,
  714.           proxy: function (a, c) {
  715.             if (typeof c == 'string') {
  716.               var d = a[c];
  717.               c = a,
  718.               a = d
  719.             }
  720.             if (!e.isFunction(a)) return b;
  721.             var f = F.call(arguments, 2),
  722.             g = function () {
  723.               return a.apply(c, f.concat(F.call(arguments)))
  724.             };
  725.             g.guid = a.guid = a.guid || g.guid || e.guid++;
  726.             return g
  727.           },
  728.           access: function (a, c, d, f, g, h, i) {
  729.             var j,
  730.             k = d == null,
  731.             l = 0,
  732.             m = a.length;
  733.             if (d && typeof d == 'object') {
  734.               for (l in d) e.access(a, c, l, d[l], 1, h, f);
  735.               g = 1
  736.             } else if (f !== b) {
  737.               j = i === b && e.isFunction(f),
  738.               k && (j ? (j = c, c = function (a, b, c) {
  739.                 return j.call(e(a), c)
  740.               })  : (c.call(a, f), c = null));
  741.               if (c) for (; l < m; l++) c(a[l], d, j ? f.call(a[l], l, c(a[l], d))  : f, i);
  742.               g = 1
  743.             }
  744.             return g ? a : k ? c.call(a)  : m ? c(a[0], d)  : h
  745.           },
  746.           now: function () {
  747.             return (new Date).getTime()
  748.           },
  749.           uaMatch: function (a) {
  750.             a = a.toLowerCase();
  751.             var b = r.exec(a) || s.exec(a) || t.exec(a) || a.indexOf('compatible') < 0 && u.exec(a) || [];
  752.             return {
  753.               browser: b[1] || '',
  754.               version: b[2] || '0'
  755.             }
  756.           },
  757.           sub: function () {
  758.             function a(b, c) {
  759.               return new a.fn.init(b, c)
  760.             }
  761.             e.extend(!0, a, this),
  762.             a.superclass = this,
  763.             a.fn = a.prototype = this(),
  764.             a.fn.constructor = a,
  765.             a.sub = this.sub,
  766.             a.fn.init = function (d, f) {
  767.               f && f instanceof e && !(f instanceof a) && (f = a(f));
  768.               return e.fn.init.call(this, d, f, b)
  769.             },
  770.             a.fn.init.prototype = a.fn;
  771.             var b = a(c);
  772.             return a
  773.           },
  774.           browser: {
  775.           }
  776.         }),
  777.         e.each('Boolean Number String Function Array Date RegExp Object'.split(' '), function (a, b) {
  778.           I['[object ' + b + ']'] = b.toLowerCase()
  779.         }),
  780.         z = e.uaMatch(y),
  781.         z.browser && (e.browser[z.browser] = !0, e.browser.version = z.version),
  782.         e.browser.webkit && (e.browser.safari = !0),
  783.         j.test(' ') && (k = /^[\s\xA0]+/, l = /[\s\xA0]+$/),
  784.         h = e(c),
  785.         c.addEventListener ? B = function () {
  786.           c.removeEventListener('DOMContentLoaded', B, !1),
  787.           e.ready()
  788.         }
  789.          : c.attachEvent && (B = function () {
  790.           c.readyState === 'complete' && (c.detachEvent('onreadystatechange', B), e.ready())
  791.         });
  792.         return e
  793.       }(),
  794.       g = {
  795.       };
  796.       f.Callbacks = function (a) {
  797.         a = a ? g[a] || h(a)  : {
  798.         };
  799.         var c = [
  800.         ],
  801.         d = [
  802.         ],
  803.         e,
  804.         i,
  805.         j,
  806.         k,
  807.         l,
  808.         m,
  809.         n = function (b) {
  810.           var d,
  811.           e,
  812.           g,
  813.           h,
  814.           i;
  815.           for (d = 0, e = b.length; d < e; d++) g = b[d],
  816.           h = f.type(g),
  817.           h === 'array' ? n(g)  : h === 'function' && (!a.unique || !p.has(g)) && c.push(g)
  818.         },
  819.         o = function (b, f) {
  820.           f = f || [],
  821.           e = !a.memory || [b,
  822.           f],
  823.           i = !0,
  824.           j = !0,
  825.           m = k || 0,
  826.           k = 0,
  827.           l = c.length;
  828.           for (; c && m < l; m++) if (c[m].apply(b, f) === !1 && a.stopOnFalse) {
  829.             e = !0;
  830.             break
  831.           }
  832.           j = !1,
  833.           c && (a.once ? e === !0 ? p.disable()  : c = [
  834.           ] : d && d.length && (e = d.shift(), p.fireWith(e[0], e[1])))
  835.         },
  836.         p = {
  837.           add: function () {
  838.             if (c) {
  839.               var a = c.length;
  840.               n(arguments),
  841.               j ? l = c.length : e && e !== !0 && (k = a, o(e[0], e[1]))
  842.             }
  843.             return this
  844.           },
  845.           remove: function () {
  846.             if (c) {
  847.               var b = arguments,
  848.               d = 0,
  849.               e = b.length;
  850.               for (; d < e; d++) for (var f = 0; f < c.length; f++) if (b[d] === c[f]) {
  851.                 j && f <= l && (l--, f <= m && m--),
  852.                 c.splice(f--, 1);
  853.                 if (a.unique) break
  854.               }
  855.             }
  856.             return this
  857.           },
  858.           has: function (a) {
  859.             if (c) {
  860.               var b = 0,
  861.               d = c.length;
  862.               for (; b < d; b++) if (a === c[b]) return !0
  863.             }
  864.             return !1
  865.           },
  866.           empty: function () {
  867.             c = [
  868.             ];
  869.             return this
  870.           },
  871.           disable: function () {
  872.             c = d = e = b;
  873.             return this
  874.           },
  875.           disabled: function () {
  876.             return !c
  877.           },
  878.           lock: function () {
  879.             d = b,
  880.             (!e || e === !0) && p.disable();
  881.             return this
  882.           },
  883.           locked: function () {
  884.             return !d
  885.           },
  886.           fireWith: function (b, c) {
  887.             d && (j ? a.once || d.push([b,
  888.             c])  : (!a.once || !e) && o(b, c));
  889.             return this
  890.           },
  891.           fire: function () {
  892.             p.fireWith(this, arguments);
  893.             return this
  894.           },
  895.           fired: function () {
  896.             return !!i
  897.           }
  898.         };
  899.         return p
  900.       };
  901.       var i = [
  902.       ].slice;
  903.       f.extend({
  904.         Deferred: function (a) {
  905.           var b = f.Callbacks('once memory'),
  906.           c = f.Callbacks('once memory'),
  907.           d = f.Callbacks('memory'),
  908.           e = 'pending',
  909.           g = {
  910.             resolve: b,
  911.             reject: c,
  912.             notify: d
  913.           },
  914.           h = {
  915.             done: b.add,
  916.             fail: c.add,
  917.             progress: d.add,
  918.             state: function () {
  919.               return e
  920.             },
  921.             isResolved: b.fired,
  922.             isRejected: c.fired,
  923.             then: function (a, b, c) {
  924.               i.done(a).fail(b).progress(c);
  925.               return this
  926.             },
  927.             always: function () {
  928.               i.done.apply(i, arguments).fail.apply(i, arguments);
  929.               return this
  930.             },
  931.             pipe: function (a, b, c) {
  932.               return f.Deferred(function (d) {
  933.                 f.each({
  934.                   done: [
  935.                     a,
  936.                     'resolve'
  937.                   ],
  938.                   fail: [
  939.                     b,
  940.                     'reject'
  941.                   ],
  942.                   progress: [
  943.                     c,
  944.                     'notify'
  945.                   ]
  946.                 }, function (a, b) {
  947.                   var c = b[0],
  948.                   e = b[1],
  949.                   g;
  950.                   f.isFunction(c) ? i[a](function () {
  951.                     g = c.apply(this, arguments),
  952.                     g && f.isFunction(g.promise) ? g.promise().then(d.resolve, d.reject, d.notify)  : d[e + 'With'](this === i ? d : this, [
  953.                       g
  954.                     ])
  955.                   })  : i[a](d[e])
  956.                 })
  957.               }).promise()
  958.             },
  959.             promise: function (a) {
  960.               if (a == null) a = h;
  961.                else for (var b in h) a[b] = h[b];
  962.               return a
  963.             }
  964.           },
  965.           i = h.promise({
  966.           }),
  967.           j;
  968.           for (j in g) i[j] = g[j].fire,
  969.           i[j + 'With'] = g[j].fireWith;
  970.           i.done(function () {
  971.             e = 'resolved'
  972.           }, c.disable, d.lock).fail(function () {
  973.             e = 'rejected'
  974.           }, b.disable, d.lock),
  975.           a && a.call(i, i);
  976.           return i
  977.         },
  978.         when: function (a) {
  979.           function m(a) {
  980.             return function (b) {
  981.               e[a] = arguments.length > 1 ? i.call(arguments, 0)  : b,
  982.               j.notifyWith(k, e)
  983.             }
  984.           }
  985.           function l(a) {
  986.             return function (c) {
  987.               b[a] = arguments.length > 1 ? i.call(arguments, 0)  : c,
  988.               --g || j.resolveWith(j, b)
  989.             }
  990.           }
  991.           var b = i.call(arguments, 0),
  992.           c = 0,
  993.           d = b.length,
  994.           e = Array(d),
  995.           g = d,
  996.           h = d,
  997.           j = d <= 1 && a && f.isFunction(a.promise) ? a : f.Deferred(),
  998.           k = j.promise();
  999.           if (d > 1) {
  1000.             for (; c < d; c++) b[c] && b[c].promise && f.isFunction(b[c].promise) ? b[c].promise().then(l(c), j.reject, m(c))  : --g;
  1001.             g || j.resolveWith(j, b)
  1002.           } else j !== a && j.resolveWith(j, d ? [
  1003.             a
  1004.           ] : [
  1005.           ]);
  1006.           return k
  1007.         }
  1008.       }),
  1009.       f.support = function () {
  1010.         var b,
  1011.         d,
  1012.         e,
  1013.         g,
  1014.         h,
  1015.         i,
  1016.         j,
  1017.         k,
  1018.         l,
  1019.         m,
  1020.         n,
  1021.         o,
  1022.         p = c.createElement('div'),
  1023.         q = c.documentElement;
  1024.         p.setAttribute('className', 't'),
  1025.         p.innerHTML = '   <link/><table></table><a href=\'/a\' style=\'top:1px;float:left;opacity:.55;\'>a</a><input type=\'checkbox\'/>',
  1026.         d = p.getElementsByTagName('*'),
  1027.         e = p.getElementsByTagName('a') [0];
  1028.         if (!d || !d.length || !e) return {
  1029.         };
  1030.         g = c.createElement('select'),
  1031.         h = g.appendChild(c.createElement('option')),
  1032.         i = p.getElementsByTagName('input') [0],
  1033.         b = {
  1034.           leadingWhitespace: p.firstChild.nodeType === 3,
  1035.           tbody: !p.getElementsByTagName('tbody').length,
  1036.           htmlSerialize: !!p.getElementsByTagName('link').length,
  1037.           style: /top/.test(e.getAttribute('style')),
  1038.           hrefNormalized: e.getAttribute('href') === '/a',
  1039.           opacity: /^0.55/.test(e.style.opacity),
  1040.           cssFloat: !!e.style.cssFloat,
  1041.           checkOn: i.value === 'on',
  1042.           optSelected: h.selected,
  1043.           getSetAttribute: p.className !== 't',
  1044.           enctype: !!c.createElement('form').enctype,
  1045.           html5Clone: c.createElement('nav').cloneNode(!0).outerHTML !== '<:nav></:nav>',
  1046.           submitBubbles: !0,
  1047.           changeBubbles: !0,
  1048.           focusinBubbles: !1,
  1049.           deleteExpando: !0,
  1050.           noCloneEvent: !0,
  1051.           inlineBlockNeedsLayout: !1,
  1052.           shrinkWrapBlocks: !1,
  1053.           reliableMarginRight: !0,
  1054.           pixelMargin: !0
  1055.         },
  1056.         f.boxModel = b.boxModel = c.compatMode === 'CSS1Compat',
  1057.         i.checked = !0,
  1058.         b.noCloneChecked = i.cloneNode(!0).checked,
  1059.         g.disabled = !0,
  1060.         b.optDisabled = !h.disabled;
  1061.         try {
  1062.           delete p.test
  1063.         } catch (r) {
  1064.           b.deleteExpando = !1
  1065.         }
  1066.         !p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent('onclick', function () {
  1067.           b.noCloneEvent = !1
  1068.         }), p.cloneNode(!0).fireEvent('onclick')),
  1069.         i = c.createElement('input'),
  1070.         i.value = 't',
  1071.         i.setAttribute('type', 'radio'),
  1072.         b.radioValue = i.value === 't',
  1073.         i.setAttribute('checked', 'checked'),
  1074.         i.setAttribute('name', 't'),
  1075.         p.appendChild(i),
  1076.         j = c.createDocumentFragment(),
  1077.         j.appendChild(p.lastChild),
  1078.         b.checkClone = j.cloneNode(!0).cloneNode(!0).lastChild.checked,
  1079.         b.appendChecked = i.checked,
  1080.         j.removeChild(i),
  1081.         j.appendChild(p);
  1082.         if (p.attachEvent) for (n in {
  1083.           submit: 1,
  1084.           change: 1,
  1085.           focusin: 1
  1086.         }) m = 'on' + n,
  1087.         o = m in p,
  1088.         o || (p.setAttribute(m, 'return;'), o = typeof p[m] == 'function'),
  1089.         b[n + 'Bubbles'] = o;
  1090.         j.removeChild(p),
  1091.         j = g = h = p = i = null,
  1092.         f(function () {
  1093.           var d,
  1094.           e,
  1095.           g,
  1096.           h,
  1097.           i,
  1098.           j,
  1099.           l,
  1100.           m,
  1101.           n,
  1102.           q,
  1103.           r,
  1104.           s,
  1105.           t,
  1106.           u = c.getElementsByTagName('body') [0];
  1107.           !u || (m = 1, t = 'padding:0;margin:0;border:', r = 'position:absolute;top:0;left:0;width:1px;height:1px;', s = t + '0;visibility:hidden;', n = 'style=\'' + r + t + '5px solid #000;', q = '<div ' + n + 'display:block;\'><div style=\'' + t + '0;display:block;overflow:hidden;\'></div></div>' + '<table ' + n + '\' cellpadding=\'0\' cellspacing=\'0\'>' + '<tr><td></td></tr></table>', d = c.createElement('div'), d.style.cssText = s + 'width:0;height:0;position:static;top:0;margin-top:' + m + 'px', u.insertBefore(d, u.firstChild), p = c.createElement('div'), d.appendChild(p), p.innerHTML = '<table><tr><td style=\'' + t + '0;display:none\'></td><td>t</td></tr></table>', k = p.getElementsByTagName('td'), o = k[0].offsetHeight === 0, k[0].style.display = '', k[1].style.display = 'none', b.reliableHiddenOffsets = o && k[0].offsetHeight === 0, a.getComputedStyle && (p.innerHTML = '', l = c.createElement('div'), l.style.width = '0', l.style.marginRight = '0', p.style.width = '2px', p.appendChild(l), b.reliableMarginRight = (parseInt((a.getComputedStyle(l, null) || {
  1108.             marginRight: 0
  1109.           }).marginRight, 10) || 0) === 0), typeof p.style.zoom != 'undefined' && (p.innerHTML = '', p.style.width = p.style.padding = '1px', p.style.border = 0, p.style.overflow = 'hidden', p.style.display = 'inline', p.style.zoom = 1, b.inlineBlockNeedsLayout = p.offsetWidth === 3, p.style.display = 'block', p.style.overflow = 'visible', p.innerHTML = '<div style=\'width:5px;\'></div>', b.shrinkWrapBlocks = p.offsetWidth !== 3), p.style.cssText = r + s, p.innerHTML = q, e = p.firstChild, g = e.firstChild, i = e.nextSibling.firstChild.firstChild, j = {
  1110.             doesNotAddBorder: g.offsetTop !== 5,
  1111.             doesAddBorderForTableAndCells: i.offsetTop === 5
  1112.           }, g.style.position = 'fixed', g.style.top = '20px', j.fixedPosition = g.offsetTop === 20 || g.offsetTop === 15, g.style.position = g.style.top = '', e.style.overflow = 'hidden', e.style.position = 'relative', j.subtractsBorderForOverflowNotVisible = g.offsetTop === - 5, j.doesNotIncludeMarginInBodyOffset = u.offsetTop !== m, a.getComputedStyle && (p.style.marginTop = '1%', b.pixelMargin = (a.getComputedStyle(p, null) || {
  1113.             marginTop: 0
  1114.           }).marginTop !== '1%'), typeof d.style.zoom != 'undefined' && (d.style.zoom = 1), u.removeChild(d), l = p = d = null, f.extend(b, j))
  1115.         });
  1116.         return b
  1117.       }();
  1118.       var j = /^(?:\{.*\}|\[.*\])$/,
  1119.       k = /([A-Z])/g;
  1120.       f.extend({
  1121.         cache: {
  1122.         },
  1123.         uuid: 0,
  1124.         expando: 'jQuery' + (f.fn.jquery + Math.random()).replace(/\D/g, ''),
  1125.         noData: {
  1126.           embed: !0,
  1127.           object: 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
  1128.           applet: !0
  1129.         },
  1130.         hasData: function (a) {
  1131.           a = a.nodeType ? f.cache[a[f.expando]] : a[f.expando];
  1132.           return !!a && !m(a)
  1133.         },
  1134.         data: function (a, c, d, e) {
  1135.           if (!!f.acceptData(a)) {
  1136.             var g,
  1137.             h,
  1138.             i,
  1139.             j = f.expando,
  1140.             k = typeof c == 'string',
  1141.             l = a.nodeType,
  1142.             m = l ? f.cache : a,
  1143.             n = l ? a[j] : a[j] && j,
  1144.             o = c === 'events';
  1145.             if ((!n || !m[n] || !o && !e && !m[n].data) && k && d === b) return;
  1146.             n || (l ? a[j] = n = ++f.uuid : n = j),
  1147.             m[n] || (m[n] = {
  1148.             }, l || (m[n].toJSON = f.noop));
  1149.             if (typeof c == 'object' || typeof c == 'function') e ? m[n] = f.extend(m[n], c)  : m[n].data = f.extend(m[n].data, c);
  1150.             g = h = m[n],
  1151.             e || (h.data || (h.data = {
  1152.             }), h = h.data),
  1153.             d !== b && (h[f.camelCase(c)] = d);
  1154.             if (o && !h[c]) return g.events;
  1155.             k ? (i = h[c], i == null && (i = h[f.camelCase(c)]))  : i = h;
  1156.             return i
  1157.           }
  1158.         },
  1159.         removeData: function (a, b, c) {
  1160.           if (!!f.acceptData(a)) {
  1161.             var d,
  1162.             e,
  1163.             g,
  1164.             h = f.expando,
  1165.             i = a.nodeType,
  1166.             j = i ? f.cache : a,
  1167.             k = i ? a[h] : h;
  1168.             if (!j[k]) return;
  1169.             if (b) {
  1170.               d = c ? j[k] : j[k].data;
  1171.               if (d) {
  1172.                 f.isArray(b) || (b in d ? b = [
  1173.                   b
  1174.                 ] : (b = f.camelCase(b), b in d ? b = [
  1175.                   b
  1176.                 ] : b = b.split(' ')));
  1177.                 for (e = 0, g = b.length; e < g; e++) delete d[b[e]];
  1178.                 if (!(c ? m : f.isEmptyObject) (d)) return
  1179.               }
  1180.             }
  1181.             if (!c) {
  1182.               delete j[k].data;
  1183.               if (!m(j[k])) return
  1184.             }
  1185.             f.support.deleteExpando || !j.setInterval ? delete j[k] : j[k] = null,
  1186.             i && (f.support.deleteExpando ? delete a[h] : a.removeAttribute ? a.removeAttribute(h)  : a[h] = null)
  1187.           }
  1188.         },
  1189.         _data: function (a, b, c) {
  1190.           return f.data(a, b, c, !0)
  1191.         },
  1192.         acceptData: function (a) {
  1193.           if (a.nodeName) {
  1194.             var b = f.noData[a.nodeName.toLowerCase()];
  1195.             if (b) return b !== !0 && a.getAttribute('classid') === b
  1196.           }
  1197.           return !0
  1198.         }
  1199.       }),
  1200.       f.fn.extend({
  1201.         data: function (a, c) {
  1202.           var d,
  1203.           e,
  1204.           g,
  1205.           h,
  1206.           i,
  1207.           j = this[0],
  1208.           k = 0,
  1209.           m = null;
  1210.           if (a === b) {
  1211.             if (this.length) {
  1212.               m = f.data(j);
  1213.               if (j.nodeType === 1 && !f._data(j, 'parsedAttrs')) {
  1214.                 g = j.attributes;
  1215.                 for (i = g.length; k < i; k++) h = g[k].name,
  1216.                 h.indexOf('data-') === 0 && (h = f.camelCase(h.substring(5)), l(j, h, m[h]));
  1217.                 f._data(j, 'parsedAttrs', !0)
  1218.               }
  1219.             }
  1220.             return m
  1221.           }
  1222.           if (typeof a == 'object') return this.each(function () {
  1223.             f.data(this, a)
  1224.           });
  1225.           d = a.split('.', 2),
  1226.           d[1] = d[1] ? '.' + d[1] : '',
  1227.           e = d[1] + '!';
  1228.           return f.access(this, function (c) {
  1229.             if (c === b) {
  1230.               m = this.triggerHandler('getData' + e, [
  1231.                 d[0]
  1232.               ]),
  1233.               m === b && j && (m = f.data(j, a), m = l(j, a, m));
  1234.               return m === b && d[1] ? this.data(d[0])  : m
  1235.             }
  1236.             d[1] = c,
  1237.             this.each(function () {
  1238.               var b = f(this);
  1239.               b.triggerHandler('setData' + e, d),
  1240.               f.data(this, a, c),
  1241.               b.triggerHandler('changeData' + e, d)
  1242.             })
  1243.           }, null, c, arguments.length > 1, null, !1)
  1244.         },
  1245.         removeData: function (a) {
  1246.           return this.each(function () {
  1247.             f.removeData(this, a)
  1248.           })
  1249.         }
  1250.       }),
  1251.       f.extend({
  1252.         _mark: function (a, b) {
  1253.           a && (b = (b || 'fx') + 'mark', f._data(a, b, (f._data(a, b) || 0) + 1))
  1254.         },
  1255.         _unmark: function (a, b, c) {
  1256.           a !== !0 && (c = b, b = a, a = !1);
  1257.           if (b) {
  1258.             c = c || 'fx';
  1259.             var d = c + 'mark',
  1260.             e = a ? 0 : (f._data(b, d) || 1) - 1;
  1261.             e ? f._data(b, d, e)  : (f.removeData(b, d, !0), n(b, c, 'mark'))
  1262.           }
  1263.         },
  1264.         queue: function (a, b, c) {
  1265.           var d;
  1266.           if (a) {
  1267.             b = (b || 'fx') + 'queue',
  1268.             d = f._data(a, b),
  1269.             c && (!d || f.isArray(c) ? d = f._data(a, b, f.makeArray(c))  : d.push(c));
  1270.             return d || []
  1271.           }
  1272.         },
  1273.         dequeue: function (a, b) {
  1274.           b = b || 'fx';
  1275.           var c = f.queue(a, b),
  1276.           d = c.shift(),
  1277.           e = {
  1278.           };
  1279.           d === 'inprogress' && (d = c.shift()),
  1280.           d && (b === 'fx' && c.unshift('inprogress'), f._data(a, b + '.run', e), d.call(a, function () {
  1281.             f.dequeue(a, b)
  1282.           }, e)),
  1283.           c.length || (f.removeData(a, b + 'queue ' + b + '.run', !0), n(a, b, 'queue'))
  1284.         }
  1285.       }),
  1286.       f.fn.extend({
  1287.         queue: function (a, c) {
  1288.           var d = 2;
  1289.           typeof a != 'string' && (c = a, a = 'fx', d--);
  1290.           if (arguments.length < d) return f.queue(this[0], a);
  1291.           return c === b ? this : this.each(function () {
  1292.             var b = f.queue(this, a, c);
  1293.             a === 'fx' && b[0] !== 'inprogress' && f.dequeue(this, a)
  1294.           })
  1295.         },
  1296.         dequeue: function (a) {
  1297.           return this.each(function () {
  1298.             f.dequeue(this, a)
  1299.           })
  1300.         },
  1301.         delay: function (a, b) {
  1302.           a = f.fx ? f.fx.speeds[a] || a : a,
  1303.           b = b || 'fx';
  1304.           return this.queue(b, function (b, c) {
  1305.             var d = setTimeout(b, a);
  1306.             c.stop = function () {
  1307.               clearTimeout(d)
  1308.             }
  1309.           })
  1310.         },
  1311.         clearQueue: function (a) {
  1312.           return this.queue(a || 'fx', [
  1313.           ])
  1314.         },
  1315.         promise: function (a, c) {
  1316.           function m() {
  1317.             --h || d.resolveWith(e, [
  1318.               e
  1319.             ])
  1320.           }
  1321.           typeof a != 'string' && (c = a, a = b),
  1322.           a = a || 'fx';
  1323.           var d = f.Deferred(),
  1324.           e = this,
  1325.           g = e.length,
  1326.           h = 1,
  1327.           i = a + 'defer',
  1328.           j = a + 'queue',
  1329.           k = a + 'mark',
  1330.           l;
  1331.           while (g--) if (l = f.data(e[g], i, b, !0) || (f.data(e[g], j, b, !0) || f.data(e[g], k, b, !0)) && f.data(e[g], i, f.Callbacks('once memory'), !0)) h++,
  1332.           l.add(m);
  1333.           m();
  1334.           return d.promise(c)
  1335.         }
  1336.       });
  1337.       var o = /[\n\t\r]/g,
  1338.       p = /\s+/,
  1339.       q = /\r/g,
  1340.       r = /^(?:button|input)$/i,
  1341.       s = /^(?:button|input|object|select|textarea)$/i,
  1342.       t = /^a(?:rea)?$/i,
  1343.       u = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
  1344.       v = f.support.getSetAttribute,
  1345.       w,
  1346.       x,
  1347.       y;
  1348.       f.fn.extend({
  1349.         attr: function (a, b) {
  1350.           return f.access(this, f.attr, a, b, arguments.length > 1)
  1351.         },
  1352.         removeAttr: function (a) {
  1353.           return this.each(function () {
  1354.             f.removeAttr(this, a)
  1355.           })
  1356.         },
  1357.         prop: function (a, b) {
  1358.           return f.access(this, f.prop, a, b, arguments.length > 1)
  1359.         },
  1360.         removeProp: function (a) {
  1361.           a = f.propFix[a] || a;
  1362.           return this.each(function () {
  1363.             try {
  1364.               this[a] = b,
  1365.               delete this[a]
  1366.             } catch (c) {
  1367.             }
  1368.           })
  1369.         },
  1370.         addClass: function (a) {
  1371.           var b,
  1372.           c,
  1373.           d,
  1374.           e,
  1375.           g,
  1376.           h,
  1377.           i;
  1378.           if (f.isFunction(a)) return this.each(function (b) {
  1379.             f(this).addClass(a.call(this, b, this.className))
  1380.           });
  1381.           if (a && typeof a == 'string') {
  1382.             b = a.split(p);
  1383.             for (c = 0, d = this.length; c < d; c++) {
  1384.               e = this[c];
  1385.               if (e.nodeType === 1) if (!e.className && b.length === 1) e.className = a;
  1386.                else {
  1387.                 g = ' ' + e.className + ' ';
  1388.                 for (h = 0, i = b.length; h < i; h++) ~g.indexOf(' ' + b[h] + ' ') || (g += b[h] + ' ');
  1389.                 e.className = f.trim(g)
  1390.               }
  1391.             }
  1392.           }
  1393.           return this
  1394.         },
  1395.         removeClass: function (a) {
  1396.           var c,
  1397.           d,
  1398.           e,
  1399.           g,
  1400.           h,
  1401.           i,
  1402.           j;
  1403.           if (f.isFunction(a)) return this.each(function (b) {
  1404.             f(this).removeClass(a.call(this, b, this.className))
  1405.           });
  1406.           if (a && typeof a == 'string' || a === b) {
  1407.             c = (a || '').split(p);
  1408.             for (d = 0, e = this.length; d < e; d++) {
  1409.               g = this[d];
  1410.               if (g.nodeType === 1 && g.className) if (a) {
  1411.                 h = (' ' + g.className + ' ').replace(o, ' ');
  1412.                 for (i = 0, j = c.length; i < j; i++) h = h.replace(' ' + c[i] + ' ', ' ');
  1413.                 g.className = f.trim(h)
  1414.               } else g.className = ''
  1415.             }
  1416.           }
  1417.           return this
  1418.         },
  1419.         toggleClass: function (a, b) {
  1420.           var c = typeof a,
  1421.           d = typeof b == 'boolean';
  1422.           if (f.isFunction(a)) return this.each(function (c) {
  1423.             f(this).toggleClass(a.call(this, c, this.className, b), b)
  1424.           });
  1425.           return this.each(function () {
  1426.             if (c === 'string') {
  1427.               var e,
  1428.               g = 0,
  1429.               h = f(this),
  1430.               i = b,
  1431.               j = a.split(p);
  1432.               while (e = j[g++]) i = d ? i : !h.hasClass(e),
  1433.               h[i ? 'addClass' : 'removeClass'](e)
  1434.             } else if (c === 'undefined' || c === 'boolean') this.className && f._data(this, '__className__', this.className),
  1435.             this.className = this.className || a === !1 ? '' : f._data(this, '__className__') || ''
  1436.           })
  1437.         },
  1438.         hasClass: function (a) {
  1439.           var b = ' ' + a + ' ',
  1440.           c = 0,
  1441.           d = this.length;
  1442.           for (; c < d; c++) if (this[c].nodeType === 1 && (' ' + this[c].className + ' ').replace(o, ' ').indexOf(b) > - 1) return !0;
  1443.           return !1
  1444.         },
  1445.         val: function (a) {
  1446.           var c,
  1447.           d,
  1448.           e,
  1449.           g = this[0];
  1450.           {
  1451.             if (!!arguments.length) {
  1452.               e = f.isFunction(a);
  1453.               return this.each(function (d) {
  1454.                 var g = f(this),
  1455.                 h;
  1456.                 if (this.nodeType === 1) {
  1457.                   e ? h = a.call(this, d, g.val())  : h = a,
  1458.                   h == null ? h = '' : typeof h == 'number' ? h += '' : f.isArray(h) && (h = f.map(h, function (a) {
  1459.                     return a == null ? '' : a + ''
  1460.                   })),
  1461.                   c = f.valHooks[this.type] || f.valHooks[this.nodeName.toLowerCase()];
  1462.                   if (!c || !('set' in c) || c.set(this, h, 'value') === b) this.value = h
  1463.                 }
  1464.               })
  1465.             }
  1466.             if (g) {
  1467.               c = f.valHooks[g.type] || f.valHooks[g.nodeName.toLowerCase()];
  1468.               if (c && 'get' in c && (d = c.get(g, 'value')) !== b) return d;
  1469.               d = g.value;
  1470.               return typeof d == 'string' ? d.replace(q, '')  : d == null ? '' : d
  1471.             }
  1472.           }
  1473.         }
  1474.       }),
  1475.       f.extend({
  1476.         valHooks: {
  1477.           option: {
  1478.             get: function (a) {
  1479.               var b = a.attributes.value;
  1480.               return !b || b.specified ? a.value : a.text
  1481.             }
  1482.           },
  1483.           select: {
  1484.             get: function (a) {
  1485.               var b,
  1486.               c,
  1487.               d,
  1488.               e,
  1489.               g = a.selectedIndex,
  1490.               h = [
  1491.               ],
  1492.               i = a.options,
  1493.               j = a.type === 'select-one';
  1494.               if (g < 0) return null;
  1495.               c = j ? g : 0,
  1496.               d = j ? g + 1 : i.length;
  1497.               for (; c < d; c++) {
  1498.                 e = i[c];
  1499.                 if (e.selected && (f.support.optDisabled ? !e.disabled : e.getAttribute('disabled') === null) && (!e.parentNode.disabled || !f.nodeName(e.parentNode, 'optgroup'))) {
  1500.                   b = f(e).val();
  1501.                   if (j) return b;
  1502.                   h.push(b)
  1503.                 }
  1504.               }
  1505.               if (j && !h.length && i.length) return f(i[g]).val();
  1506.               return h
  1507.             },
  1508.             set: function (a, b) {
  1509.               var c = f.makeArray(b);
  1510.               f(a).find('option').each(function () {
  1511.                 this.selected = f.inArray(f(this).val(), c) >= 0
  1512.               }),
  1513.               c.length || (a.selectedIndex = - 1);
  1514.               return c
  1515.             }
  1516.           }
  1517.         },
  1518.         attrFn: {
  1519.           val: !0,
  1520.           css: !0,
  1521.           html: !0,
  1522.           text: !0,
  1523.           data: !0,
  1524.           width: !0,
  1525.           height: !0,
  1526.           offset: !0
  1527.         },
  1528.         attr: function (a, c, d, e) {
  1529.           var g,
  1530.           h,
  1531.           i,
  1532.           j = a.nodeType;
  1533.           if (!!a && j !== 3 && j !== 8 && j !== 2) {
  1534.             if (e && c in f.attrFn) return f(a) [c](d);
  1535.             if (typeof a.getAttribute == 'undefined') return f.prop(a, c, d);
  1536.             i = j !== 1 || !f.isXMLDoc(a),
  1537.             i && (c = c.toLowerCase(), h = f.attrHooks[c] || (u.test(c) ? x : w));
  1538.             if (d !== b) {
  1539.               if (d === null) {
  1540.                 f.removeAttr(a, c);
  1541.                 return
  1542.               }
  1543.               if (h && 'set' in h && i && (g = h.set(a, d, c)) !== b) return g;
  1544.               a.setAttribute(c, '' + d);
  1545.               return d
  1546.             }
  1547.             if (h && 'get' in h && i && (g = h.get(a, c)) !== null) return g;
  1548.             g = a.getAttribute(c);
  1549.             return g === null ? b : g
  1550.           }
  1551.         },
  1552.         removeAttr: function (a, b) {
  1553.           var c,
  1554.           d,
  1555.           e,
  1556.           g,
  1557.           h,
  1558.           i = 0;
  1559.           if (b && a.nodeType === 1) {
  1560.             d = b.toLowerCase().split(p),
  1561.             g = d.length;
  1562.             for (; i < g; i++) e = d[i],
  1563.             e && (c = f.propFix[e] || e, h = u.test(e), h || f.attr(a, e, ''), a.removeAttribute(v ? e : c), h && c in a && (a[c] = !1))
  1564.           }
  1565.         },
  1566.         attrHooks: {
  1567.           type: {
  1568.             set: function (a, b) {
  1569.               if (r.test(a.nodeName) && a.parentNode) f.error('type property can\'t be changed');
  1570.                else if (!f.support.radioValue && b === 'radio' && f.nodeName(a, 'input')) {
  1571.                 var c = a.value;
  1572.                 a.setAttribute('type', b),
  1573.                 c && (a.value = c);
  1574.                 return b
  1575.               }
  1576.             }
  1577.           },
  1578.           value: {
  1579.             get: function (a, b) {
  1580.               if (w && f.nodeName(a, 'button')) return w.get(a, b);
  1581.               return b in a ? a.value : null
  1582.             },
  1583.             set: function (a, b, c) {
  1584.               if (w && f.nodeName(a, 'button')) return w.set(a, b, c);
  1585.               a.value = b
  1586.             }
  1587.           }
  1588.         },
  1589.         propFix: {
  1590.           tabindex: 'tabIndex',
  1591.           readonly: 'readOnly',
  1592.           'for': 'htmlFor',
  1593.           'class': 'className',
  1594.           maxlength: 'maxLength',
  1595.           cellspacing: 'cellSpacing',
  1596.           cellpadding: 'cellPadding',
  1597.           rowspan: 'rowSpan',
  1598.           colspan: 'colSpan',
  1599.           usemap: 'useMap',
  1600.           frameborder: 'frameBorder',
  1601.           contenteditable: 'contentEditable'
  1602.         },
  1603.         prop: function (a, c, d) {
  1604.           var e,
  1605.           g,
  1606.           h,
  1607.           i = a.nodeType;
  1608.           if (!!a && i !== 3 && i !== 8 && i !== 2) {
  1609.             h = i !== 1 || !f.isXMLDoc(a),
  1610.             h && (c = f.propFix[c] || c, g = f.propHooks[c]);
  1611.             return d !== b ? g && 'set' in g && (e = g.set(a, d, c)) !== b ? e : a[c] = d : g && 'get' in g && (e = g.get(a, c)) !== null ? e : a[c]
  1612.           }
  1613.         },
  1614.         propHooks: {
  1615.           tabIndex: {
  1616.             get: function (a) {
  1617.               var c = a.getAttributeNode('tabindex');
  1618.               return c && c.specified ? parseInt(c.value, 10)  : s.test(a.nodeName) || t.test(a.nodeName) && a.href ? 0 : b
  1619.             }
  1620.           }
  1621.         }
  1622.       }),
  1623.       f.attrHooks.tabindex = f.propHooks.tabIndex,
  1624.       x = {
  1625.         get: function (a, c) {
  1626.           var d,
  1627.           e = f.prop(a, c);
  1628.           return e === !0 || typeof e != 'boolean' && (d = a.getAttributeNode(c)) && d.nodeValue !== !1 ? c.toLowerCase()  : b
  1629.         },
  1630.         set: function (a, b, c) {
  1631.           var d;
  1632.           b === !1 ? f.removeAttr(a, c)  : (d = f.propFix[c] || c, d in a && (a[d] = !0), a.setAttribute(c, c.toLowerCase()));
  1633.           return c
  1634.         }
  1635.       },
  1636.       v || (y = {
  1637.         name: !0,
  1638.         id: !0,
  1639.         coords: !0
  1640.       }, w = f.valHooks.button = {
  1641.         get: function (a, c) {
  1642.           var d;
  1643.           d = a.getAttributeNode(c);
  1644.           return d && (y[c] ? d.nodeValue !== '' : d.specified) ? d.nodeValue : b
  1645.         },
  1646.         set: function (a, b, d) {
  1647.           var e = a.getAttributeNode(d);
  1648.           e || (e = c.createAttribute(d), a.setAttributeNode(e));
  1649.           return e.nodeValue = b + ''
  1650.         }
  1651.       }, f.attrHooks.tabindex.set = w.set, f.each(['width',
  1652.       'height'], function (a, b) {
  1653.         f.attrHooks[b] = f.extend(f.attrHooks[b], {
  1654.           set: function (a, c) {
  1655.             if (c === '') {
  1656.               a.setAttribute(b, 'auto');
  1657.               return c
  1658.             }
  1659.           }
  1660.         })
  1661.       }), f.attrHooks.contenteditable = {
  1662.         get: w.get,
  1663.         set: function (a, b, c) {
  1664.           b === '' && (b = 'false'),
  1665.           w.set(a, b, c)
  1666.         }
  1667.       }),
  1668.       f.support.hrefNormalized || f.each(['href',
  1669.       'src',
  1670.       'width',
  1671.       'height'], function (a, c) {
  1672.         f.attrHooks[c] = f.extend(f.attrHooks[c], {
  1673.           get: function (a) {
  1674.             var d = a.getAttribute(c, 2);
  1675.             return d === null ? b : d
  1676.           }
  1677.         })
  1678.       }),
  1679.       f.support.style || (f.attrHooks.style = {
  1680.         get: function (a) {
  1681.           return a.style.cssText.toLowerCase() || b
  1682.         },
  1683.         set: function (a, b) {
  1684.           return a.style.cssText = '' + b
  1685.         }
  1686.       }),
  1687.       f.support.optSelected || (f.propHooks.selected = f.extend(f.propHooks.selected, {
  1688.         get: function (a) {
  1689.           var b = a.parentNode;
  1690.           b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex);
  1691.           return null
  1692.         }
  1693.       })),
  1694.       f.support.enctype || (f.propFix.enctype = 'encoding'),
  1695.       f.support.checkOn || f.each(['radio',
  1696.       'checkbox'], function () {
  1697.         f.valHooks[this] = {
  1698.           get: function (a) {
  1699.             return a.getAttribute('value') === null ? 'on' : a.value
  1700.           }
  1701.         }
  1702.       }),
  1703.       f.each(['radio',
  1704.       'checkbox'], function () {
  1705.         f.valHooks[this] = f.extend(f.valHooks[this], {
  1706.           set: function (a, b) {
  1707.             if (f.isArray(b)) return a.checked = f.inArray(f(a).val(), b) >= 0
  1708.           }
  1709.         })
  1710.       });
  1711.       var z = /^(?:textarea|input|select)$/i,
  1712.       A = /^([^\.]*)?(?:\.(.+))?$/,
  1713.       B = /(?:^|\s)hover(\.\S+)?\b/,
  1714.       C = /^key/,
  1715.       D = /^(?:mouse|contextmenu)|click/,
  1716.       E = /^(?:focusinfocus|focusoutblur)$/,
  1717.       F = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
  1718.       G = function (a) {
  1719.         var b = F.exec(a);
  1720.         b && (b[1] = (b[1] || '').toLowerCase(), b[3] = b[3] && new RegExp('(?:^|\\s)' + b[3] + '(?:\\s|$)'));
  1721.         return b
  1722.       },
  1723.       H = function (a, b) {
  1724.         var c = a.attributes || {
  1725.         };
  1726.         return (!b[1] || a.nodeName.toLowerCase() === b[1]) && (!b[2] || (c.id || {
  1727.         }).value === b[2]) && (!b[3] || b[3].test((c['class'] || {
  1728.         }).value))
  1729.       },
  1730.       I = function (a) {
  1731.         return f.event.special.hover ? a : a.replace(B, 'mouseenter$1 mouseleave$1')
  1732.       };
  1733.       f.event = {
  1734.         add: function (a, c, d, e, g) {
  1735.           var h,
  1736.           i,
  1737.           j,
  1738.           k,
  1739.           l,
  1740.           m,
  1741.           n,
  1742.           o,
  1743.           p,
  1744.           q,
  1745.           r,
  1746.           s;
  1747.           if (!(a.nodeType === 3 || a.nodeType === 8 || !c || !d || !(h = f._data(a)))) {
  1748.             d.handler && (p = d, d = p.handler, g = p.selector),
  1749.             d.guid || (d.guid = f.guid++),
  1750.             j = h.events,
  1751.             j || (h.events = j = {
  1752.             }),
  1753.             i = h.handle,
  1754.             i || (h.handle = i = function (a) {
  1755.               return typeof f != 'undefined' && (!a || f.event.triggered !== a.type) ? f.event.dispatch.apply(i.elem, arguments)  : b
  1756.             }, i.elem = a),
  1757.             c = f.trim(I(c)).split(' ');
  1758.             for (k = 0; k < c.length; k++) {
  1759.               l = A.exec(c[k]) || [],
  1760.               m = l[1],
  1761.               n = (l[2] || '').split('.').sort(),
  1762.               s = f.event.special[m] || {
  1763.               },
  1764.               m = (g ? s.delegateType : s.bindType) || m,
  1765.               s = f.event.special[m] || {
  1766.               },
  1767.               o = f.extend({
  1768.                 type: m,
  1769.                 origType: l[1],
  1770.                 data: e,
  1771.                 handler: d,
  1772.                 guid: d.guid,
  1773.                 selector: g,
  1774.                 quick: g && G(g),
  1775.                 namespace: n.join('.')
  1776.               }, p),
  1777.               r = j[m];
  1778.               if (!r) {
  1779.                 r = j[m] = [
  1780.                 ],
  1781.                 r.delegateCount = 0;
  1782.                 if (!s.setup || s.setup.call(a, e, n, i) === !1) a.addEventListener ? a.addEventListener(m, i, !1)  : a.attachEvent && a.attachEvent('on' + m, i)
  1783.               }
  1784.               s.add && (s.add.call(a, o), o.handler.guid || (o.handler.guid = d.guid)),
  1785.               g ? r.splice(r.delegateCount++, 0, o)  : r.push(o),
  1786.               f.event.global[m] = !0
  1787.             }
  1788.             a = null
  1789.           }
  1790.         },
  1791.         global: {
  1792.         },
  1793.         remove: function (a, b, c, d, e) {
  1794.           var g = f.hasData(a) && f._data(a),
  1795.           h,
  1796.           i,
  1797.           j,
  1798.           k,
  1799.           l,
  1800.           m,
  1801.           n,
  1802.           o,
  1803.           p,
  1804.           q,
  1805.           r,
  1806.           s;
  1807.           if (!!g && !!(o = g.events)) {
  1808.             b = f.trim(I(b || '')).split(' ');
  1809.             for (h = 0; h < b.length; h++) {
  1810.               i = A.exec(b[h]) || [],
  1811.               j = k = i[1],
  1812.               l = i[2];
  1813.               if (!j) {
  1814.                 for (j in o) f.event.remove(a, j + b[h], c, d, !0);
  1815.                 continue
  1816.               }
  1817.               p = f.event.special[j] || {
  1818.               },
  1819.               j = (d ? p.delegateType : p.bindType) || j,
  1820.               r = o[j] || [],
  1821.               m = r.length,
  1822.               l = l ? new RegExp('(^|\\.)' + l.split('.').sort().join('\\.(?:.*\\.)?') + '(\\.|$)')  : null;
  1823.               for (n = 0; n < r.length; n++) s = r[n],
  1824.               (e || k === s.origType) && (!c || c.guid === s.guid) && (!l || l.test(s.namespace)) && (!d || d === s.selector || d === '**' && s.selector) && (r.splice(n--, 1), s.selector && r.delegateCount--, p.remove && p.remove.call(a, s));
  1825.               r.length === 0 && m !== r.length && ((!p.teardown || p.teardown.call(a, l) === !1) && f.removeEvent(a, j, g.handle), delete o[j])
  1826.             }
  1827.             f.isEmptyObject(o) && (q = g.handle, q && (q.elem = null), f.removeData(a, [
  1828.               'events',
  1829.               'handle'
  1830.             ], !0))
  1831.           }
  1832.         },
  1833.         customEvent: {
  1834.           getData: !0,
  1835.           setData: !0,
  1836.           changeData: !0
  1837.         },
  1838.         trigger: function (c, d, e, g) {
  1839.           if (!e || e.nodeType !== 3 && e.nodeType !== 8) {
  1840.             var h = c.type || c,
  1841.             i = [
  1842.             ],
  1843.             j,
  1844.             k,
  1845.             l,
  1846.             m,
  1847.             n,
  1848.             o,
  1849.             p,
  1850.             q,
  1851.             r,
  1852.             s;
  1853.             if (E.test(h + f.event.triggered)) return;
  1854.             h.indexOf('!') >= 0 && (h = h.slice(0, - 1), k = !0),
  1855.             h.indexOf('.') >= 0 && (i = h.split('.'), h = i.shift(), i.sort());
  1856.             if ((!e || f.event.customEvent[h]) && !f.event.global[h]) return;
  1857.             c = typeof c == 'object' ? c[f.expando] ? c : new f.Event(h, c)  : new f.Event(h),
  1858.             c.type = h,
  1859.             c.isTrigger = !0,
  1860.             c.exclusive = k,
  1861.             c.namespace = i.join('.'),
  1862.             c.namespace_re = c.namespace ? new RegExp('(^|\\.)' + i.join('\\.(?:.*\\.)?') + '(\\.|$)')  : null,
  1863.             o = h.indexOf(':') < 0 ? 'on' + h : '';
  1864.             if (!e) {
  1865.               j = f.cache;
  1866.               for (l in j) j[l].events && j[l].events[h] && f.event.trigger(c, d, j[l].handle.elem, !0);
  1867.               return
  1868.             }
  1869.             c.result = b,
  1870.             c.target || (c.target = e),
  1871.             d = d != null ? f.makeArray(d)  : [
  1872.             ],
  1873.             d.unshift(c),
  1874.             p = f.event.special[h] || {
  1875.             };
  1876.             if (p.trigger && p.trigger.apply(e, d) === !1) return;
  1877.             r = [
  1878.               [e,
  1879.               p.bindType || h]
  1880.             ];
  1881.             if (!g && !p.noBubble && !f.isWindow(e)) {
  1882.               s = p.delegateType || h,
  1883.               m = E.test(s + h) ? e : e.parentNode,
  1884.               n = null;
  1885.               for (; m; m = m.parentNode) r.push([m,
  1886.               s]),
  1887.               n = m;
  1888.               n && n === e.ownerDocument && r.push([n.defaultView || n.parentWindow || a,
  1889.               s])
  1890.             }
  1891.             for (l = 0; l < r.length && !c.isPropagationStopped(); l++) m = r[l][0],
  1892.             c.type = r[l][1],
  1893.             q = (f._data(m, 'events') || {
  1894.             }) [c.type] && f._data(m, 'handle'),
  1895.             q && q.apply(m, d),
  1896.             q = o && m[o],
  1897.             q && f.acceptData(m) && q.apply(m, d) === !1 && c.preventDefault();
  1898.             c.type = h,
  1899.             !g && !c.isDefaultPrevented() && (!p._default || p._default.apply(e.ownerDocument, d) === !1) && (h !== 'click' || !f.nodeName(e, 'a')) && f.acceptData(e) && o && e[h] && (h !== 'focus' && h !== 'blur' || c.target.offsetWidth !== 0) && !f.isWindow(e) && (n = e[o], n && (e[o] = null), f.event.triggered = h, e[h](), f.event.triggered = b, n && (e[o] = n));
  1900.             return c.result
  1901.           }
  1902.         },
  1903.         dispatch: function (c) {
  1904.           c = f.event.fix(c || a.event);
  1905.           var d = (f._data(this, 'events') || {
  1906.           }) [c.type] || [],
  1907.           e = d.delegateCount,
  1908.           g = [
  1909.           ].slice.call(arguments, 0),
  1910.           h = !c.exclusive && !c.namespace,
  1911.           i = f.event.special[c.type] || {
  1912.           },
  1913.           j = [
  1914.           ],
  1915.           k,
  1916.           l,
  1917.           m,
  1918.           n,
  1919.           o,
  1920.           p,
  1921.           q,
  1922.           r,
  1923.           s,
  1924.           t,
  1925.           u;
  1926.           g[0] = c,
  1927.           c.delegateTarget = this;
  1928.           if (!i.preDispatch || i.preDispatch.call(this, c) !== !1) {
  1929.             if (e && (!c.button || c.type !== 'click')) {
  1930.               n = f(this),
  1931.               n.context = this.ownerDocument || this;
  1932.               for (m = c.target; m != this; m = m.parentNode || this) if (m.disabled !== !0) {
  1933.                 p = {
  1934.                 },
  1935.                 r = [
  1936.                 ],
  1937.                 n[0] = m;
  1938.                 for (k = 0; k < e; k++) s = d[k],
  1939.                 t = s.selector,
  1940.                 p[t] === b && (p[t] = s.quick ? H(m, s.quick)  : n.is(t)),
  1941.                 p[t] && r.push(s);
  1942.                 r.length && j.push({
  1943.                   elem: m,
  1944.                   matches: r
  1945.                 })
  1946.               }
  1947.             }
  1948.             d.length > e && j.push({
  1949.               elem: this,
  1950.               matches: d.slice(e)
  1951.             });
  1952.             for (k = 0; k < j.length && !c.isPropagationStopped(); k++) {
  1953.               q = j[k],
  1954.               c.currentTarget = q.elem;
  1955.               for (l = 0; l < q.matches.length && !c.isImmediatePropagationStopped(); l++) {
  1956.                 s = q.matches[l];
  1957.                 if (h || !c.namespace && !s.namespace || c.namespace_re && c.namespace_re.test(s.namespace)) c.data = s.data,
  1958.                 c.handleObj = s,
  1959.                 o = ((f.event.special[s.origType] || {
  1960.                 }).handle || s.handler).apply(q.elem, g),
  1961.                 o !== b && (c.result = o, o === !1 && (c.preventDefault(), c.stopPropagation()))
  1962.               }
  1963.             }
  1964.             i.postDispatch && i.postDispatch.call(this, c);
  1965.             return c.result
  1966.           }
  1967.         },
  1968.         props: 'attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which'.split(' '),
  1969.         fixHooks: {
  1970.         },
  1971.         keyHooks: {
  1972.           props: 'char charCode key keyCode'.split(' '),
  1973.           filter: function (a, b) {
  1974.             a.which == null && (a.which = b.charCode != null ? b.charCode : b.keyCode);
  1975.             return a
  1976.           }
  1977.         },
  1978.         mouseHooks: {
  1979.           props: 'button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement'.split(' '),
  1980.           filter: function (a, d) {
  1981.             var e,
  1982.             f,
  1983.             g,
  1984.             h = d.button,
  1985.             i = d.fromElement;
  1986.             a.pageX == null && d.clientX != null && (e = a.target.ownerDocument || c, f = e.documentElement, g = e.body, a.pageX = d.clientX + (f && f.scrollLeft || g && g.scrollLeft || 0) - (f && f.clientLeft || g && g.clientLeft || 0), a.pageY = d.clientY + (f && f.scrollTop || g && g.scrollTop || 0) - (f && f.clientTop || g && g.clientTop || 0)),
  1987.             !a.relatedTarget && i && (a.relatedTarget = i === a.target ? d.toElement : i),
  1988.             !a.which && h !== b && (a.which = h & 1 ? 1 : h & 2 ? 3 : h & 4 ? 2 : 0);
  1989.             return a
  1990.           }
  1991.         },
  1992.         fix: function (a) {
  1993.           if (a[f.expando]) return a;
  1994.           var d,
  1995.           e,
  1996.           g = a,
  1997.           h = f.event.fixHooks[a.type] || {
  1998.           },
  1999.           i = h.props ? this.props.concat(h.props)  : this.props;
  2000.           a = f.Event(g);
  2001.           for (d = i.length; d; ) e = i[--d],
  2002.           a[e] = g[e];
  2003.           a.target || (a.target = g.srcElement || c),
  2004.           a.target.nodeType === 3 && (a.target = a.target.parentNode),
  2005.           a.metaKey === b && (a.metaKey = a.ctrlKey);
  2006.           return h.filter ? h.filter(a, g)  : a
  2007.         },
  2008.         special: {
  2009.           ready: {
  2010.             setup: f.bindReady
  2011.           },
  2012.           load: {
  2013.             noBubble: !0
  2014.           },
  2015.           focus: {
  2016.             delegateType: 'focusin'
  2017.           },
  2018.           blur: {
  2019.             delegateType: 'focusout'
  2020.           },
  2021.           beforeunload: {
  2022.             setup: function (a, b, c) {
  2023.               f.isWindow(this) && (this.onbeforeunload = c)
  2024.             },
  2025.             teardown: function (a, b) {
  2026.               this.onbeforeunload === b && (this.onbeforeunload = null)
  2027.             }
  2028.           }
  2029.         },
  2030.         simulate: function (a, b, c, d) {
  2031.           var e = f.extend(new f.Event, c, {
  2032.             type: a,
  2033.             isSimulated: !0,
  2034.             originalEvent: {
  2035.             }
  2036.           });
  2037.           d ? f.event.trigger(e, null, b)  : f.event.dispatch.call(b, e),
  2038.           e.isDefaultPrevented() && c.preventDefault()
  2039.         }
  2040.       },
  2041.       f.event.handle = f.event.dispatch,
  2042.       f.removeEvent = c.removeEventListener ? function (a, b, c) {
  2043.         a.removeEventListener && a.removeEventListener(b, c, !1)
  2044.       }
  2045.        : function (a, b, c) {
  2046.         a.detachEvent && a.detachEvent('on' + b, c)
  2047.       },
  2048.       f.Event = function (a, b) {
  2049.         if (!(this instanceof f.Event)) return new f.Event(a, b);
  2050.         a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? K : J)  : this.type = a,
  2051.         b && f.extend(this, b),
  2052.         this.timeStamp = a && a.timeStamp || f.now(),
  2053.         this[f.expando] = !0
  2054.       },
  2055.       f.Event.prototype = {
  2056.         preventDefault: function () {
  2057.           this.isDefaultPrevented = K;
  2058.           var a = this.originalEvent;
  2059.           !a || (a.preventDefault ? a.preventDefault()  : a.returnValue = !1)
  2060.         },
  2061.         stopPropagation: function () {
  2062.           this.isPropagationStopped = K;
  2063.           var a = this.originalEvent;
  2064.           !a || (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
  2065.         },
  2066.         stopImmediatePropagation: function () {
  2067.           this.isImmediatePropagationStopped = K,
  2068.           this.stopPropagation()
  2069.         },
  2070.         isDefaultPrevented: J,
  2071.         isPropagationStopped: J,
  2072.         isImmediatePropagationStopped: J
  2073.       },
  2074.       f.each({
  2075.         mouseenter: 'mouseover',
  2076.         mouseleave: 'mouseout'
  2077.       }, function (a, b) {
  2078.         f.event.special[a] = {
  2079.           delegateType: b,
  2080.           bindType: b,
  2081.           handle: function (a) {
  2082.             var c = this,
  2083.             d = a.relatedTarget,
  2084.             e = a.handleObj,
  2085.             g = e.selector,
  2086.             h;
  2087.             if (!d || d !== c && !f.contains(c, d)) a.type = e.origType,
  2088.             h = e.handler.apply(this, arguments),
  2089.             a.type = b;
  2090.             return h
  2091.           }
  2092.         }
  2093.       }),
  2094.       f.support.submitBubbles || (f.event.special.submit = {
  2095.         setup: function () {
  2096.           if (f.nodeName(this, 'form')) return !1;
  2097.           f.event.add(this, 'click._submit keypress._submit', function (a) {
  2098.             var c = a.target,
  2099.             d = f.nodeName(c, 'input') || f.nodeName(c, 'button') ? c.form : b;
  2100.             d && !d._submit_attached && (f.event.add(d, 'submit._submit', function (a) {
  2101.               a._submit_bubble = !0
  2102.             }), d._submit_attached = !0)
  2103.           })
  2104.         },
  2105.         postDispatch: function (a) {
  2106.           a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && f.event.simulate('submit', this.parentNode, a, !0))
  2107.         },
  2108.         teardown: function () {
  2109.           if (f.nodeName(this, 'form')) return !1;
  2110.           f.event.remove(this, '._submit')
  2111.         }
  2112.       }),
  2113.       f.support.changeBubbles || (f.event.special.change = {
  2114.         setup: function () {
  2115.           if (z.test(this.nodeName)) {
  2116.             if (this.type === 'checkbox' || this.type === 'radio') f.event.add(this, 'propertychange._change', function (a) {
  2117.               a.originalEvent.propertyName === 'checked' && (this._just_changed = !0)
  2118.             }),
  2119.             f.event.add(this, 'click._change', function (a) {
  2120.               this._just_changed && !a.isTrigger && (this._just_changed = !1, f.event.simulate('change', this, a, !0))
  2121.             });
  2122.             return !1
  2123.           }
  2124.           f.event.add(this, 'beforeactivate._change', function (a) {
  2125.             var b = a.target;
  2126.             z.test(b.nodeName) && !b._change_attached && (f.event.add(b, 'change._change', function (a) {
  2127.               this.parentNode && !a.isSimulated && !a.isTrigger && f.event.simulate('change', this.parentNode, a, !0)
  2128.             }), b._change_attached = !0)
  2129.           })
  2130.         },
  2131.         handle: function (a) {
  2132.           var b = a.target;
  2133.           if (this !== b || a.isSimulated || a.isTrigger || b.type !== 'radio' && b.type !== 'checkbox') return a.handleObj.handler.apply(this, arguments)
  2134.         },
  2135.         teardown: function () {
  2136.           f.event.remove(this, '._change');
  2137.           return z.test(this.nodeName)
  2138.         }
  2139.       }),
  2140.       f.support.focusinBubbles || f.each({
  2141.         focus: 'focusin',
  2142.         blur: 'focusout'
  2143.       }, function (a, b) {
  2144.         var d = 0,
  2145.         e = function (a) {
  2146.           f.event.simulate(b, a.target, f.event.fix(a), !0)
  2147.         };
  2148.         f.event.special[b] = {
  2149.           setup: function () {
  2150.             d++ === 0 && c.addEventListener(a, e, !0)
  2151.           },
  2152.           teardown: function () {
  2153.             --d === 0 && c.removeEventListener(a, e, !0)
  2154.           }
  2155.         }
  2156.       }),
  2157.       f.fn.extend({
  2158.         on: function (a, c, d, e, g) {
  2159.           var h,
  2160.           i;
  2161.           if (typeof a == 'object') {
  2162.             typeof c != 'string' && (d = d || c, c = b);
  2163.             for (i in a) this.on(i, c, d, a[i], g);
  2164.             return this
  2165.           }
  2166.           d == null && e == null ? (e = c, d = c = b)  : e == null && (typeof c == 'string' ? (e = d, d = b)  : (e = d, d = c, c = b));
  2167.           if (e === !1) e = J;
  2168.            else if (!e) return this;
  2169.           g === 1 && (h = e, e = function (a) {
  2170.             f().off(a);
  2171.             return h.apply(this, arguments)
  2172.           }, e.guid = h.guid || (h.guid = f.guid++));
  2173.           return this.each(function () {
  2174.             f.event.add(this, a, e, d, c)
  2175.           })
  2176.         },
  2177.         one: function (a, b, c, d) {
  2178.           return this.on(a, b, c, d, 1)
  2179.         },
  2180.         off: function (a, c, d) {
  2181.           if (a && a.preventDefault && a.handleObj) {
  2182.             var e = a.handleObj;
  2183.             f(a.delegateTarget).off(e.namespace ? e.origType + '.' + e.namespace : e.origType, e.selector, e.handler);
  2184.             return this
  2185.           }
  2186.           if (typeof a == 'object') {
  2187.             for (var g in a) this.off(g, c, a[g]);
  2188.             return this
  2189.           }
  2190.           if (c === !1 || typeof c == 'function') d = c,
  2191.           c = b;
  2192.           d === !1 && (d = J);
  2193.           return this.each(function () {
  2194.             f.event.remove(this, a, d, c)
  2195.           })
  2196.         },
  2197.         bind: function (a, b, c) {
  2198.           return this.on(a, null, b, c)
  2199.         },
  2200.         unbind: function (a, b) {
  2201.           return this.off(a, null, b)
  2202.         },
  2203.         live: function (a, b, c) {
  2204.           f(this.context).on(a, this.selector, b, c);
  2205.           return this
  2206.         },
  2207.         die: function (a, b) {
  2208.           f(this.context).off(a, this.selector || '**', b);
  2209.           return this
  2210.         },
  2211.         delegate: function (a, b, c, d) {
  2212.           return this.on(b, a, c, d)
  2213.         },
  2214.         undelegate: function (a, b, c) {
  2215.           return arguments.length == 1 ? this.off(a, '**')  : this.off(b, a, c)
  2216.         },
  2217.         trigger: function (a, b) {
  2218.           return this.each(function () {
  2219.             f.event.trigger(a, b, this)
  2220.           })
  2221.         },
  2222.         triggerHandler: function (a, b) {
  2223.           if (this[0]) return f.event.trigger(a, b, this[0], !0)
  2224.         },
  2225.         toggle: function (a) {
  2226.           var b = arguments,
  2227.           c = a.guid || f.guid++,
  2228.           d = 0,
  2229.           e = function (c) {
  2230.             var e = (f._data(this, 'lastToggle' + a.guid) || 0) % d;
  2231.             f._data(this, 'lastToggle' + a.guid, e + 1),
  2232.             c.preventDefault();
  2233.             return b[e].apply(this, arguments) || !1
  2234.           };
  2235.           e.guid = c;
  2236.           while (d < b.length) b[d++].guid = c;
  2237.           return this.click(e)
  2238.         },
  2239.         hover: function (a, b) {
  2240.           return this.mouseenter(a).mouseleave(b || a)
  2241.         }
  2242.       }),
  2243.       f.each('blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu'.split(' '), function (a, b) {
  2244.         f.fn[b] = function (a, c) {
  2245.           c == null && (c = a, a = null);
  2246.           return arguments.length > 0 ? this.on(b, null, a, c)  : this.trigger(b)
  2247.         },
  2248.         f.attrFn && (f.attrFn[b] = !0),
  2249.         C.test(b) && (f.event.fixHooks[b] = f.event.keyHooks),
  2250.         D.test(b) && (f.event.fixHooks[b] = f.event.mouseHooks)
  2251.       }),
  2252.       function () {
  2253.         function x(a, b, c, e, f, g) {
  2254.           for (var h = 0, i = e.length; h < i; h++) {
  2255.             var j = e[h];
  2256.             if (j) {
  2257.               var k = !1;
  2258.               j = j[a];
  2259.               while (j) {
  2260.                 if (j[d] === c) {
  2261.                   k = e[j.sizset];
  2262.                   break
  2263.                 }
  2264.                 if (j.nodeType === 1) {
  2265.                   g || (j[d] = c, j.sizset = h);
  2266.                   if (typeof b != 'string') {
  2267.                     if (j === b) {
  2268.                       k = !0;
  2269.                       break
  2270.                     }
  2271.                   } else if (m.filter(b, [
  2272.                     j
  2273.                   ]).length > 0) {
  2274.                     k = j;
  2275.                     break
  2276.                   }
  2277.                 }
  2278.                 j = j[a]
  2279.               }
  2280.               e[h] = k
  2281.             }
  2282.           }
  2283.         }
  2284.         function w(a, b, c, e, f, g) {
  2285.           for (var h = 0, i = e.length; h < i; h++) {
  2286.             var j = e[h];
  2287.             if (j) {
  2288.               var k = !1;
  2289.               j = j[a];
  2290.               while (j) {
  2291.                 if (j[d] === c) {
  2292.                   k = e[j.sizset];
  2293.                   break
  2294.                 }
  2295.                 j.nodeType === 1 && !g && (j[d] = c, j.sizset = h);
  2296.                 if (j.nodeName.toLowerCase() === b) {
  2297.                   k = j;
  2298.                   break
  2299.                 }
  2300.                 j = j[a]
  2301.               }
  2302.               e[h] = k
  2303.             }
  2304.           }
  2305.         }
  2306.         var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
  2307.         d = 'sizcache' + (Math.random() + '').replace('.', ''),
  2308.         e = 0,
  2309.         g = Object.prototype.toString,
  2310.         h = !1,
  2311.         i = !0,
  2312.         j = /\\/g,
  2313.         k = /\r\n/g,
  2314.         l = /\W/;
  2315.         [
  2316.           0,
  2317.           0
  2318.         ].sort(function () {
  2319.           i = !1;
  2320.           return 0
  2321.         });
  2322.         var m = function (b, d, e, f) {
  2323.           e = e || [],
  2324.           d = d || c;
  2325.           var h = d;
  2326.           if (d.nodeType !== 1 && d.nodeType !== 9) return [];
  2327.           if (!b || typeof b != 'string') return e;
  2328.           var i,
  2329.           j,
  2330.           k,
  2331.           l,
  2332.           n,
  2333.           q,
  2334.           r,
  2335.           t,
  2336.           u = !0,
  2337.           v = m.isXML(d),
  2338.           w = [
  2339.           ],
  2340.           x = b;
  2341.           do {
  2342.             a.exec(''),
  2343.             i = a.exec(x);
  2344.             if (i) {
  2345.               x = i[3],
  2346.               w.push(i[1]);
  2347.               if (i[2]) {
  2348.                 l = i[3];
  2349.                 break
  2350.               }
  2351.             }
  2352.           } while (i);
  2353.           if (w.length > 1 && p.exec(b)) if (w.length === 2 && o.relative[w[0]]) j = y(w[0] + w[1], d, f);
  2354.            else {
  2355.             j = o.relative[w[0]] ? [
  2356.               d
  2357.             ] : m(w.shift(), d);
  2358.             while (w.length) b = w.shift(),
  2359.             o.relative[b] && (b += w.shift()),
  2360.             j = y(b, j, f)
  2361.           } else {
  2362.             !f && w.length > 1 && d.nodeType === 9 && !v && o.match.ID.test(w[0]) && !o.match.ID.test(w[w.length - 1]) && (n = m.find(w.shift(), d, v), d = n.expr ? m.filter(n.expr, n.set) [0] : n.set[0]);
  2363.             if (d) {
  2364.               n = f ? {
  2365.                 expr: w.pop(),
  2366.                 set: s(f)
  2367.               }
  2368.                : m.find(w.pop(), w.length === 1 && (w[0] === '~' || w[0] === '+') && d.parentNode ? d.parentNode : d, v),
  2369.               j = n.expr ? m.filter(n.expr, n.set)  : n.set,
  2370.               w.length > 0 ? k = s(j)  : u = !1;
  2371.               while (w.length) q = w.pop(),
  2372.               r = q,
  2373.               o.relative[q] ? r = w.pop()  : q = '',
  2374.               r == null && (r = d),
  2375.               o.relative[q](k, r, v)
  2376.             } else k = w = [
  2377.             ]
  2378.           }
  2379.           k || (k = j),
  2380.           k || m.error(q || b);
  2381.           if (g.call(k) === '[object Array]') if (!u) e.push.apply(e, k);
  2382.            else if (d && d.nodeType === 1) for (t = 0; k[t] != null; t++) k[t] && (k[t] === !0 || k[t].nodeType === 1 && m.contains(d, k[t])) && e.push(j[t]);
  2383.            else for (t = 0; k[t] != null; t++) k[t] && k[t].nodeType === 1 && e.push(j[t]);
  2384.            else s(k, e);
  2385.           l && (m(l, h, e, f), m.uniqueSort(e));
  2386.           return e
  2387.         };
  2388.         m.uniqueSort = function (a) {
  2389.           if (u) {
  2390.             h = i,
  2391.             a.sort(u);
  2392.             if (h) for (var b = 1; b < a.length; b++) a[b] === a[b - 1] && a.splice(b--, 1)
  2393.           }
  2394.           return a
  2395.         },
  2396.         m.matches = function (a, b) {
  2397.           return m(a, null, null, b)
  2398.         },
  2399.         m.matchesSelector = function (a, b) {
  2400.           return m(b, null, null, [
  2401.             a
  2402.           ]).length > 0
  2403.         },
  2404.         m.find = function (a, b, c) {
  2405.           var d,
  2406.           e,
  2407.           f,
  2408.           g,
  2409.           h,
  2410.           i;
  2411.           if (!a) return [];
  2412.           for (e = 0, f = o.order.length; e < f; e++) {
  2413.             h = o.order[e];
  2414.             if (g = o.leftMatch[h].exec(a)) {
  2415.               i = g[1],
  2416.               g.splice(1, 1);
  2417.               if (i.substr(i.length - 1) !== '\\') {
  2418.                 g[1] = (g[1] || '').replace(j, ''),
  2419.                 d = o.find[h](g, b, c);
  2420.                 if (d != null) {
  2421.                   a = a.replace(o.match[h], '');
  2422.                   break
  2423.                 }
  2424.               }
  2425.             }
  2426.           }
  2427.           d || (d = typeof b.getElementsByTagName != 'undefined' ? b.getElementsByTagName('*')  : [
  2428.           ]);
  2429.           return {
  2430.             set: d,
  2431.             expr: a
  2432.           }
  2433.         },
  2434.         m.filter = function (a, c, d, e) {
  2435.           var f,
  2436.           g,
  2437.           h,
  2438.           i,
  2439.           j,
  2440.           k,
  2441.           l,
  2442.           n,
  2443.           p,
  2444.           q = a,
  2445.           r = [
  2446.           ],
  2447.           s = c,
  2448.           t = c && c[0] && m.isXML(c[0]);
  2449.           while (a && c.length) {
  2450.             for (h in o.filter) if ((f = o.leftMatch[h].exec(a)) != null && f[2]) {
  2451.               k = o.filter[h],
  2452.               l = f[1],
  2453.               g = !1,
  2454.               f.splice(1, 1);
  2455.               if (l.substr(l.length - 1) === '\\') continue;
  2456.               s === r && (r = [
  2457.               ]);
  2458.               if (o.preFilter[h]) {
  2459.                 f = o.preFilter[h](f, s, d, r, e, t);
  2460.                 if (!f) g = i = !0;
  2461.                  else if (f === !0) continue
  2462.               }
  2463.               if (f) for (n = 0; (j = s[n]) != null; n++) j && (i = k(j, f, n, s), p = e ^ i, d && i != null ? p ? g = !0 : s[n] = !1 : p && (r.push(j), g = !0));
  2464.               if (i !== b) {
  2465.                 d || (s = r),
  2466.                 a = a.replace(o.match[h], '');
  2467.                 if (!g) return [];
  2468.                 break
  2469.               }
  2470.             }
  2471.             if (a === q) if (g == null) m.error(a);
  2472.              else break;
  2473.             q = a
  2474.           }
  2475.           return s
  2476.         },
  2477.         m.error = function (a) {
  2478.           throw new Error('Syntax error, unrecognized expression: ' + a)
  2479.         };
  2480.         var n = m.getText = function (a) {
  2481.           var b,
  2482.           c,
  2483.           d = a.nodeType,
  2484.           e = '';
  2485.           if (d) {
  2486.             if (d === 1 || d === 9 || d === 11) {
  2487.               if (typeof a.textContent == 'string') return a.textContent;
  2488.               if (typeof a.innerText == 'string') return a.innerText.replace(k, '');
  2489.               for (a = a.firstChild; a; a = a.nextSibling) e += n(a)
  2490.             } else if (d === 3 || d === 4) return a.nodeValue
  2491.           } else for (b = 0; c = a[b]; b++) c.nodeType !== 8 && (e += n(c));
  2492.           return e
  2493.         },
  2494.         o = m.selectors = {
  2495.           order: [
  2496.             'ID',
  2497.             'NAME',
  2498.             'TAG'
  2499.           ],
  2500.           match: {
  2501.             ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
  2502.             CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
  2503.             NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
  2504.             ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
  2505.             TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
  2506.             CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
  2507.             POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
  2508.             PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
  2509.           },
  2510.           leftMatch: {
  2511.           },
  2512.           attrMap: {
  2513.             'class': 'className',
  2514.             'for': 'htmlFor'
  2515.           },
  2516.           attrHandle: {
  2517.             href: function (a) {
  2518.               return a.getAttribute('href')
  2519.             },
  2520.             type: function (a) {
  2521.               return a.getAttribute('type')
  2522.             }
  2523.           },
  2524.           relative: {
  2525.             '+': function (a, b) {
  2526.               var c = typeof b == 'string',
  2527.               d = c && !l.test(b),
  2528.               e = c && !d;
  2529.               d && (b = b.toLowerCase());
  2530.               for (var f = 0, g = a.length, h; f < g; f++) if (h = a[f]) {
  2531.                 while ((h = h.previousSibling) && h.nodeType !== 1);
  2532.                 a[f] = e || h && h.nodeName.toLowerCase() === b ? h || !1 : h === b
  2533.               }
  2534.               e && m.filter(b, a, !0)
  2535.             },
  2536.             '>': function (a, b) {
  2537.               var c,
  2538.               d = typeof b == 'string',
  2539.               e = 0,
  2540.               f = a.length;
  2541.               if (d && !l.test(b)) {
  2542.                 b = b.toLowerCase();
  2543.                 for (; e < f; e++) {
  2544.                   c = a[e];
  2545.                   if (c) {
  2546.                     var g = c.parentNode;
  2547.                     a[e] = g.nodeName.toLowerCase() === b ? g : !1
  2548.                   }
  2549.                 }
  2550.               } else {
  2551.                 for (; e < f; e++) c = a[e],
  2552.                 c && (a[e] = d ? c.parentNode : c.parentNode === b);
  2553.                 d && m.filter(b, a, !0)
  2554.               }
  2555.             },
  2556.             '': function (a, b, c) {
  2557.               var d,
  2558.               f = e++,
  2559.               g = x;
  2560.               typeof b == 'string' && !l.test(b) && (b = b.toLowerCase(), d = b, g = w),
  2561.               g('parentNode', b, f, a, d, c)
  2562.             },
  2563.             '~': function (a, b, c) {
  2564.               var d,
  2565.               f = e++,
  2566.               g = x;
  2567.               typeof b == 'string' && !l.test(b) && (b = b.toLowerCase(), d = b, g = w),
  2568.               g('previousSibling', b, f, a, d, c)
  2569.             }
  2570.           },
  2571.           find: {
  2572.             ID: function (a, b, c) {
  2573.               if (typeof b.getElementById != 'undefined' && !c) {
  2574.                 var d = b.getElementById(a[1]);
  2575.                 return d && d.parentNode ? [
  2576.                   d
  2577.                 ] : [
  2578.                 ]
  2579.               }
  2580.             },
  2581.             NAME: function (a, b) {
  2582.               if (typeof b.getElementsByName != 'undefined') {
  2583.                 var c = [
  2584.                 ],
  2585.                 d = b.getElementsByName(a[1]);
  2586.                 for (var e = 0, f = d.length; e < f; e++) d[e].getAttribute('name') === a[1] && c.push(d[e]);
  2587.                 return c.length === 0 ? null : c
  2588.               }
  2589.             },
  2590.             TAG: function (a, b) {
  2591.               if (typeof b.getElementsByTagName != 'undefined') return b.getElementsByTagName(a[1])
  2592.             }
  2593.           },
  2594.           preFilter: {
  2595.             CLASS: function (a, b, c, d, e, f) {
  2596.               a = ' ' + a[1].replace(j, '') + ' ';
  2597.               if (f) return a;
  2598.               for (var g = 0, h; (h = b[g]) != null; g++) h && (e ^ (h.className && (' ' + h.className + ' ').replace(/[\t\n\r]/g, ' ').indexOf(a) >= 0) ? c || d.push(h)  : c && (b[g] = !1));
  2599.               return !1
  2600.             },
  2601.             ID: function (a) {
  2602.               return a[1].replace(j, '')
  2603.             },
  2604.             TAG: function (a, b) {
  2605.               return a[1].replace(j, '').toLowerCase()
  2606.             },
  2607.             CHILD: function (a) {
  2608.               if (a[1] === 'nth') {
  2609.                 a[2] || m.error(a[0]),
  2610.                 a[2] = a[2].replace(/^\+|\s*/g, '');
  2611.                 var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === 'even' && '2n' || a[2] === 'odd' && '2n+1' || !/\D/.test(a[2]) && '0n+' + a[2] || a[2]);
  2612.                 a[2] = b[1] + (b[2] || 1) - 0,
  2613.                 a[3] = b[3] - 0
  2614.               } else a[2] && m.error(a[0]);
  2615.               a[0] = e++;
  2616.               return a
  2617.             },
  2618.             ATTR: function (a, b, c, d, e, f) {
  2619.               var g = a[1] = a[1].replace(j, '');
  2620.               !f && o.attrMap[g] && (a[1] = o.attrMap[g]),
  2621.               a[4] = (a[4] || a[5] || '').replace(j, ''),
  2622.               a[2] === '~=' && (a[4] = ' ' + a[4] + ' ');
  2623.               return a
  2624.             },
  2625.             PSEUDO: function (b, c, d, e, f) {
  2626.               if (b[1] === 'not') if ((a.exec(b[3]) || '').length > 1 || /^\w/.test(b[3])) b[3] = m(b[3], null, null, c);
  2627.                else {
  2628.                 var g = m.filter(b[3], c, d, !0 ^ f);
  2629.                 d || e.push.apply(e, g);
  2630.                 return !1
  2631.               } else if (o.match.POS.test(b[0]) || o.match.CHILD.test(b[0])) return !0;
  2632.               return b
  2633.             },
  2634.             POS: function (a) {
  2635.               a.unshift(!0);
  2636.               return a
  2637.             }
  2638.           },
  2639.           filters: {
  2640.             enabled: function (a) {
  2641.               return a.disabled === !1 && a.type !== 'hidden'
  2642.             },
  2643.             disabled: function (a) {
  2644.               return a.disabled === !0
  2645.             },
  2646.             checked: function (a) {
  2647.               return a.checked === !0
  2648.             },
  2649.             selected: function (a) {
  2650.               a.parentNode && a.parentNode.selectedIndex;
  2651.               return a.selected === !0
  2652.             },
  2653.             parent: function (a) {
  2654.               return !!a.firstChild
  2655.             },
  2656.             empty: function (a) {
  2657.               return !a.firstChild
  2658.             },
  2659.             has: function (a, b, c) {
  2660.               return !!m(c[3], a).length
  2661.             },
  2662.             header: function (a) {
  2663.               return /h\d/i.test(a.nodeName)
  2664.             },
  2665.             text: function (a) {
  2666.               var b = a.getAttribute('type'),
  2667.               c = a.type;
  2668.               return a.nodeName.toLowerCase() === 'input' && 'text' === c && (b === c || b === null)
  2669.             },
  2670.             radio: function (a) {
  2671.               return a.nodeName.toLowerCase() === 'input' && 'radio' === a.type
  2672.             },
  2673.             checkbox: function (a) {
  2674.               return a.nodeName.toLowerCase() === 'input' && 'checkbox' === a.type
  2675.             },
  2676.             file: function (a) {
  2677.               return a.nodeName.toLowerCase() === 'input' && 'file' === a.type
  2678.             },
  2679.             password: function (a) {
  2680.               return a.nodeName.toLowerCase() === 'input' && 'password' === a.type
  2681.             },
  2682.             submit: function (a) {
  2683.               var b = a.nodeName.toLowerCase();
  2684.               return (b === 'input' || b === 'button') && 'submit' === a.type
  2685.             },
  2686.             image: function (a) {
  2687.               return a.nodeName.toLowerCase() === 'input' && 'image' === a.type
  2688.             },
  2689.             reset: function (a) {
  2690.               var b = a.nodeName.toLowerCase();
  2691.               return (b === 'input' || b === 'button') && 'reset' === a.type
  2692.             },
  2693.             button: function (a) {
  2694.               var b = a.nodeName.toLowerCase();
  2695.               return b === 'input' && 'button' === a.type || b === 'button'
  2696.             },
  2697.             input: function (a) {
  2698.               return /input|select|textarea|button/i.test(a.nodeName)
  2699.             },
  2700.             focus: function (a) {
  2701.               return a === a.ownerDocument.activeElement
  2702.             }
  2703.           },
  2704.           setFilters: {
  2705.             first: function (a, b) {
  2706.               return b === 0
  2707.             },
  2708.             last: function (a, b, c, d) {
  2709.               return b === d.length - 1
  2710.             },
  2711.             even: function (a, b) {
  2712.               return b % 2 === 0
  2713.             },
  2714.             odd: function (a, b) {
  2715.               return b % 2 === 1
  2716.             },
  2717.             lt: function (a, b, c) {
  2718.               return b < c[3] - 0
  2719.             },
  2720.             gt: function (a, b, c) {
  2721.               return b > c[3] - 0
  2722.             },
  2723.             nth: function (a, b, c) {
  2724.               return c[3] - 0 === b
  2725.             },
  2726.             eq: function (a, b, c) {
  2727.               return c[3] - 0 === b
  2728.             }
  2729.           },
  2730.           filter: {
  2731.             PSEUDO: function (a, b, c, d) {
  2732.               var e = b[1],
  2733.               f = o.filters[e];
  2734.               if (f) return f(a, c, b, d);
  2735.               if (e === 'contains') return (a.textContent || a.innerText || n([a]) || '').indexOf(b[3]) >= 0;
  2736.               if (e === 'not') {
  2737.                 var g = b[3];
  2738.                 for (var h = 0, i = g.length; h < i; h++) if (g[h] === a) return !1;
  2739.                 return !0
  2740.               }
  2741.               m.error(e)
  2742.             },
  2743.             CHILD: function (a, b) {
  2744.               var c,
  2745.               e,
  2746.               f,
  2747.               g,
  2748.               h,
  2749.               i,
  2750.               j,
  2751.               k = b[1],
  2752.               l = a;
  2753.               switch (k) {
  2754.                 case 'only':
  2755.                 case 'first':
  2756.                   while (l = l.previousSibling) if (l.nodeType === 1) return !1;
  2757.                   if (k === 'first') return !0;
  2758.                   l = a;
  2759.                 case 'last':
  2760.                   while (l = l.nextSibling) if (l.nodeType === 1) return !1;
  2761.                   return !0;
  2762.                 case 'nth':
  2763.                   c = b[2],
  2764.                   e = b[3];
  2765.                   if (c === 1 && e === 0) return !0;
  2766.                   f = b[0],
  2767.                   g = a.parentNode;
  2768.                   if (g && (g[d] !== f || !a.nodeIndex)) {
  2769.                     i = 0;
  2770.                     for (l = g.firstChild; l; l = l.nextSibling) l.nodeType === 1 && (l.nodeIndex = ++i);
  2771.                     g[d] = f
  2772.                   }
  2773.                   j = a.nodeIndex - e;
  2774.                   return c === 0 ? j === 0 : j % c === 0 && j / c >= 0
  2775.               }
  2776.             },
  2777.             ID: function (a, b) {
  2778.               return a.nodeType === 1 && a.getAttribute('id') === b
  2779.             },
  2780.             TAG: function (a, b) {
  2781.               return b === '*' && a.nodeType === 1 || !!a.nodeName && a.nodeName.toLowerCase() === b
  2782.             },
  2783.             CLASS: function (a, b) {
  2784.               return (' ' + (a.className || a.getAttribute('class')) + ' ').indexOf(b) > - 1
  2785.             },
  2786.             ATTR: function (a, b) {
  2787.               var c = b[1],
  2788.               d = m.attr ? m.attr(a, c)  : o.attrHandle[c] ? o.attrHandle[c](a)  : a[c] != null ? a[c] : a.getAttribute(c),
  2789.               e = d + '',
  2790.               f = b[2],
  2791.               g = b[4];
  2792.               return d == null ? f === '!=' : !f && m.attr ? d != null : f === '=' ? e === g : f === '*=' ? e.indexOf(g) >= 0 : f === '~=' ? (' ' + e + ' ').indexOf(g) >= 0 : g ? f === '!=' ? e !== g : f === '^=' ? e.indexOf(g) === 0 : f === '$=' ? e.substr(e.length - g.length) === g : f === '|=' ? e === g || e.substr(0, g.length + 1) === g + '-' : !1 : e && d !== !1
  2793.             },
  2794.             POS: function (a, b, c, d) {
  2795.               var e = b[2],
  2796.               f = o.setFilters[e];
  2797.               if (f) return f(a, c, b, d)
  2798.             }
  2799.           }
  2800.         },
  2801.         p = o.match.POS,
  2802.         q = function (a, b) {
  2803.           return '\\' + (b - 0 + 1)
  2804.         };
  2805.         for (var r in o.match) o.match[r] = new RegExp(o.match[r].source + /(?![^\[]*\])(?![^\(]*\))/.source),
  2806.         o.leftMatch[r] = new RegExp(/(^(?:.|\r|\n)*?)/.source + o.match[r].source.replace(/\\(\d+)/g, q));
  2807.         o.match.globalPOS = p;
  2808.         var s = function (a, b) {
  2809.           a = Array.prototype.slice.call(a, 0);
  2810.           if (b) {
  2811.             b.push.apply(b, a);
  2812.             return b
  2813.           }
  2814.           return a
  2815.         };
  2816.         try {
  2817.           Array.prototype.slice.call(c.documentElement.childNodes, 0) [0].nodeType
  2818.         } catch (t) {
  2819.           s = function (a, b) {
  2820.             var c = 0,
  2821.             d = b || [];
  2822.             if (g.call(a) === '[object Array]') Array.prototype.push.apply(d, a);
  2823.              else if (typeof a.length == 'number') for (var e = a.length; c < e; c++) d.push(a[c]);
  2824.              else for (; a[c]; c++) d.push(a[c]);
  2825.             return d
  2826.           }
  2827.         }
  2828.         var u,
  2829.         v;
  2830.         c.documentElement.compareDocumentPosition ? u = function (a, b) {
  2831.           if (a === b) {
  2832.             h = !0;
  2833.             return 0
  2834.           }
  2835.           if (!a.compareDocumentPosition || !b.compareDocumentPosition) return a.compareDocumentPosition ? - 1 : 1;
  2836.           return a.compareDocumentPosition(b) & 4 ? - 1 : 1
  2837.         }
  2838.          : (u = function (a, b) {
  2839.           if (a === b) {
  2840.             h = !0;
  2841.             return 0
  2842.           }
  2843.           if (a.sourceIndex && b.sourceIndex) return a.sourceIndex - b.sourceIndex;
  2844.           var c,
  2845.           d,
  2846.           e = [
  2847.           ],
  2848.           f = [
  2849.           ],
  2850.           g = a.parentNode,
  2851.           i = b.parentNode,
  2852.           j = g;
  2853.           if (g === i) return v(a, b);
  2854.           if (!g) return - 1;
  2855.           if (!i) return 1;
  2856.           while (j) e.unshift(j),
  2857.           j = j.parentNode;
  2858.           j = i;
  2859.           while (j) f.unshift(j),
  2860.           j = j.parentNode;
  2861.           c = e.length,
  2862.           d = f.length;
  2863.           for (var k = 0; k < c && k < d; k++) if (e[k] !== f[k]) return v(e[k], f[k]);
  2864.           return k === c ? v(a, f[k], - 1)  : v(e[k], b, 1)
  2865.         }, v = function (a, b, c) {
  2866.           if (a === b) return c;
  2867.           var d = a.nextSibling;
  2868.           while (d) {
  2869.             if (d === b) return - 1;
  2870.             d = d.nextSibling
  2871.           }
  2872.           return 1
  2873.         }),
  2874.         function () {
  2875.           var a = c.createElement('div'),
  2876.           d = 'script' + (new Date).getTime(),
  2877.           e = c.documentElement;
  2878.           a.innerHTML = '<a name=\'' + d + '\'/>',
  2879.           e.insertBefore(a, e.firstChild),
  2880.           c.getElementById(d) && (o.find.ID = function (a, c, d) {
  2881.             if (typeof c.getElementById != 'undefined' && !d) {
  2882.               var e = c.getElementById(a[1]);
  2883.               return e ? e.id === a[1] || typeof e.getAttributeNode != 'undefined' && e.getAttributeNode('id').nodeValue === a[1] ? [
  2884.                 e
  2885.               ] : b : [
  2886.               ]
  2887.             }
  2888.           }, o.filter.ID = function (a, b) {
  2889.             var c = typeof a.getAttributeNode != 'undefined' && a.getAttributeNode('id');
  2890.             return a.nodeType === 1 && c && c.nodeValue === b
  2891.           }),
  2892.           e.removeChild(a),
  2893.           e = a = null
  2894.         }(),
  2895.         function () {
  2896.           var a = c.createElement('div');
  2897.           a.appendChild(c.createComment('')),
  2898.           a.getElementsByTagName('*').length > 0 && (o.find.TAG = function (a, b) {
  2899.             var c = b.getElementsByTagName(a[1]);
  2900.             if (a[1] === '*') {
  2901.               var d = [
  2902.               ];
  2903.               for (var e = 0; c[e]; e++) c[e].nodeType === 1 && d.push(c[e]);
  2904.               c = d
  2905.             }
  2906.             return c
  2907.           }),
  2908.           a.innerHTML = '<a href=\'#\'></a>',
  2909.           a.firstChild && typeof a.firstChild.getAttribute != 'undefined' && a.firstChild.getAttribute('href') !== '#' && (o.attrHandle.href = function (a) {
  2910.             return a.getAttribute('href', 2)
  2911.           }),
  2912.           a = null
  2913.         }(),
  2914.         c.querySelectorAll && function () {
  2915.           var a = m,
  2916.           b = c.createElement('div'),
  2917.           d = '__sizzle__';
  2918.           b.innerHTML = '<p class=\'TEST\'></p>';
  2919.           if (!b.querySelectorAll || b.querySelectorAll('.TEST').length !== 0) {
  2920.             m = function (b, e, f, g) {
  2921.               e = e || c;
  2922.               if (!g && !m.isXML(e)) {
  2923.                 var h = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
  2924.                 if (h && (e.nodeType === 1 || e.nodeType === 9)) {
  2925.                   if (h[1]) return s(e.getElementsByTagName(b), f);
  2926.                   if (h[2] && o.find.CLASS && e.getElementsByClassName) return s(e.getElementsByClassName(h[2]), f)
  2927.                 }
  2928.                 if (e.nodeType === 9) {
  2929.                   if (b === 'body' && e.body) return s([e.body], f);
  2930.                   if (h && h[3]) {
  2931.                     var i = e.getElementById(h[3]);
  2932.                     if (!i || !i.parentNode) return s([], f);
  2933.                     if (i.id === h[3]) return s([i], f)
  2934.                   }
  2935.                   try {
  2936.                     return s(e.querySelectorAll(b), f)
  2937.                   } catch (j) {
  2938.                   }
  2939.                 } else if (e.nodeType === 1 && e.nodeName.toLowerCase() !== 'object') {
  2940.                   var k = e,
  2941.                   l = e.getAttribute('id'),
  2942.                   n = l || d,
  2943.                   p = e.parentNode,
  2944.                   q = /^\s*[+~]/.test(b);
  2945.                   l ? n = n.replace(/'/g, '\\$&')  : e.setAttribute('id', n),
  2946.                   q && p && (e = e.parentNode);
  2947.                   try {
  2948.                     if (!q || p) return s(e.querySelectorAll('[id=\'' + n + '\'] ' + b), f)
  2949.                   } catch (r) {
  2950.                   } finally {
  2951.                     l || k.removeAttribute('id')
  2952.                   }
  2953.                 }
  2954.               }
  2955.               return a(b, e, f, g)
  2956.             };
  2957.             for (var e in a) m[e] = a[e];
  2958.             b = null
  2959.           }
  2960.         }(),
  2961.         function () {
  2962.           var a = c.documentElement,
  2963.           b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector;
  2964.           if (b) {
  2965.             var d = !b.call(c.createElement('div'), 'div'),
  2966.             e = !1;
  2967.             try {
  2968.               b.call(c.documentElement, '[test!=\'\']:sizzle')
  2969.             } catch (f) {
  2970.               e = !0
  2971.             }
  2972.             m.matchesSelector = function (a, c) {
  2973.               c = c.replace(/\=\s*([^'"\]]*)\s*\]/g, '=\'$1\']');
  2974.               if (!m.isXML(a)) try {
  2975.                 if (e || !o.match.PSEUDO.test(c) && !/!=/.test(c)) {
  2976.                   var f = b.call(a, c);
  2977.                   if (f || !d || a.document && a.document.nodeType !== 11) return f
  2978.                 }
  2979.               } catch (g) {
  2980.               }
  2981.               return m(c, null, null, [
  2982.                 a
  2983.               ]).length > 0
  2984.             }
  2985.           }
  2986.         }(),
  2987.         function () {
  2988.           var a = c.createElement('div');
  2989.           a.innerHTML = '<div class=\'test e\'></div><div class=\'test\'></div>';
  2990.           if (!!a.getElementsByClassName && a.getElementsByClassName('e').length !== 0) {
  2991.             a.lastChild.className = 'e';
  2992.             if (a.getElementsByClassName('e').length === 1) return;
  2993.             o.order.splice(1, 0, 'CLASS'),
  2994.             o.find.CLASS = function (a, b, c) {
  2995.               if (typeof b.getElementsByClassName != 'undefined' && !c) return b.getElementsByClassName(a[1])
  2996.             },
  2997.             a = null
  2998.           }
  2999.         }(),
  3000.         c.documentElement.contains ? m.contains = function (a, b) {
  3001.           return a !== b && (a.contains ? a.contains(b)  : !0)
  3002.         }
  3003.          : c.documentElement.compareDocumentPosition ? m.contains = function (a, b) {
  3004.           return !!(a.compareDocumentPosition(b) & 16)
  3005.         }
  3006.          : m.contains = function () {
  3007.           return !1
  3008.         },
  3009.         m.isXML = function (a) {
  3010.           var b = (a ? a.ownerDocument || a : 0).documentElement;
  3011.           return b ? b.nodeName !== 'HTML' : !1
  3012.         };
  3013.         var y = function (a, b, c) {
  3014.           var d,
  3015.           e = [
  3016.           ],
  3017.           f = '',
  3018.           g = b.nodeType ? [
  3019.             b
  3020.           ] : b;
  3021.           while (d = o.match.PSEUDO.exec(a)) f += d[0],
  3022.           a = a.replace(o.match.PSEUDO, '');
  3023.           a = o.relative[a] ? a + '*' : a;
  3024.           for (var h = 0, i = g.length; h < i; h++) m(a, g[h], e, c);
  3025.           return m.filter(f, e)
  3026.         };
  3027.         m.attr = f.attr,
  3028.         m.selectors.attrMap = {
  3029.         },
  3030.         f.find = m,
  3031.         f.expr = m.selectors,
  3032.         f.expr[':'] = f.expr.filters,
  3033.         f.unique = m.uniqueSort,
  3034.         f.text = m.getText,
  3035.         f.isXMLDoc = m.isXML,
  3036.         f.contains = m.contains
  3037.       }();
  3038.       var L = /Until$/,
  3039.       M = /^(?:parents|prevUntil|prevAll)/,
  3040.       N = /,/,
  3041.       O = /^.[^:#\[\.,]*$/,
  3042.       P = Array.prototype.slice,
  3043.       Q = f.expr.match.globalPOS,
  3044.       R = {
  3045.         children: !0,
  3046.         contents: !0,
  3047.         next: !0,
  3048.         prev: !0
  3049.       };
  3050.       f.fn.extend({
  3051.         find: function (a) {
  3052.           var b = this,
  3053.           c,
  3054.           d;
  3055.           if (typeof a != 'string') return f(a).filter(function () {
  3056.             for (c = 0, d = b.length; c < d; c++) if (f.contains(b[c], this)) return !0
  3057.           });
  3058.           var e = this.pushStack('', 'find', a),
  3059.           g,
  3060.           h,
  3061.           i;
  3062.           for (c = 0, d = this.length; c < d; c++) {
  3063.             g = e.length,
  3064.             f.find(a, this[c], e);
  3065.             if (c > 0) for (h = g; h < e.length; h++) for (i = 0; i < g; i++) if (e[i] === e[h]) {
  3066.               e.splice(h--, 1);
  3067.               break
  3068.             }
  3069.           }
  3070.           return e
  3071.         },
  3072.         has: function (a) {
  3073.           var b = f(a);
  3074.           return this.filter(function () {
  3075.             for (var a = 0, c = b.length; a < c; a++) if (f.contains(this, b[a])) return !0
  3076.           })
  3077.         },
  3078.         not: function (a) {
  3079.           return this.pushStack(T(this, a, !1), 'not', a)
  3080.         },
  3081.         filter: function (a) {
  3082.           return this.pushStack(T(this, a, !0), 'filter', a)
  3083.         },
  3084.         is: function (a) {
  3085.           return !!a && (typeof a == 'string' ? Q.test(a) ? f(a, this.context).index(this[0]) >= 0 : f.filter(a, this).length > 0 : this.filter(a).length > 0)
  3086.         },
  3087.         closest: function (a, b) {
  3088.           var c = [
  3089.           ],
  3090.           d,
  3091.           e,
  3092.           g = this[0];
  3093.           if (f.isArray(a)) {
  3094.             var h = 1;
  3095.             while (g && g.ownerDocument && g !== b) {
  3096.               for (d = 0; d < a.length; d++) f(g).is(a[d]) && c.push({
  3097.                 selector: a[d],
  3098.                 elem: g,
  3099.                 level: h
  3100.               });
  3101.               g = g.parentNode,
  3102.               h++
  3103.             }
  3104.             return c
  3105.           }
  3106.           var i = Q.test(a) || typeof a != 'string' ? f(a, b || this.context)  : 0;
  3107.           for (d = 0, e = this.length; d < e; d++) {
  3108.             g = this[d];
  3109.             while (g) {
  3110.               if (i ? i.index(g) > - 1 : f.find.matchesSelector(g, a)) {
  3111.                 c.push(g);
  3112.                 break
  3113.               }
  3114.               g = g.parentNode;
  3115.               if (!g || !g.ownerDocument || g === b || g.nodeType === 11) break
  3116.             }
  3117.           }
  3118.           c = c.length > 1 ? f.unique(c)  : c;
  3119.           return this.pushStack(c, 'closest', a)
  3120.         },
  3121.         index: function (a) {
  3122.           if (!a) return this[0] && this[0].parentNode ? this.prevAll().length : - 1;
  3123.           if (typeof a == 'string') return f.inArray(this[0], f(a));
  3124.           return f.inArray(a.jquery ? a[0] : a, this)
  3125.         },
  3126.         add: function (a, b) {
  3127.           var c = typeof a == 'string' ? f(a, b)  : f.makeArray(a && a.nodeType ? [
  3128.             a
  3129.           ] : a),
  3130.           d = f.merge(this.get(), c);
  3131.           return this.pushStack(S(c[0]) || S(d[0]) ? d : f.unique(d))
  3132.         },
  3133.         andSelf: function () {
  3134.           return this.add(this.prevObject)
  3135.         }
  3136.       }),
  3137.       f.each({
  3138.         parent: function (a) {
  3139.           var b = a.parentNode;
  3140.           return b && b.nodeType !== 11 ? b : null
  3141.         },
  3142.         parents: function (a) {
  3143.           return f.dir(a, 'parentNode')
  3144.         },
  3145.         parentsUntil: function (a, b, c) {
  3146.           return f.dir(a, 'parentNode', c)
  3147.         },
  3148.         next: function (a) {
  3149.           return f.nth(a, 2, 'nextSibling')
  3150.         },
  3151.         prev: function (a) {
  3152.           return f.nth(a, 2, 'previousSibling')
  3153.         },
  3154.         nextAll: function (a) {
  3155.           return f.dir(a, 'nextSibling')
  3156.         },
  3157.         prevAll: function (a) {
  3158.           return f.dir(a, 'previousSibling')
  3159.         },
  3160.         nextUntil: function (a, b, c) {
  3161.           return f.dir(a, 'nextSibling', c)
  3162.         },
  3163.         prevUntil: function (a, b, c) {
  3164.           return f.dir(a, 'previousSibling', c)
  3165.         },
  3166.         siblings: function (a) {
  3167.           return f.sibling((a.parentNode || {
  3168.           }).firstChild, a)
  3169.         },
  3170.         children: function (a) {
  3171.           return f.sibling(a.firstChild)
  3172.         },
  3173.         contents: function (a) {
  3174.           return f.nodeName(a, 'iframe') ? a.contentDocument || a.contentWindow.document : f.makeArray(a.childNodes)
  3175.         }
  3176.       }, function (a, b) {
  3177.         f.fn[a] = function (c, d) {
  3178.           var e = f.map(this, b, c);
  3179.           L.test(a) || (d = c),
  3180.           d && typeof d == 'string' && (e = f.filter(d, e)),
  3181.           e = this.length > 1 && !R[a] ? f.unique(e)  : e,
  3182.           (this.length > 1 || N.test(d)) && M.test(a) && (e = e.reverse());
  3183.           return this.pushStack(e, a, P.call(arguments).join(','))
  3184.         }
  3185.       }),
  3186.       f.extend({
  3187.         filter: function (a, b, c) {
  3188.           c && (a = ':not(' + a + ')');
  3189.           return b.length === 1 ? f.find.matchesSelector(b[0], a) ? [
  3190.             b[0]
  3191.           ] : [
  3192.           ] : f.find.matches(a, b)
  3193.         },
  3194.         dir: function (a, c, d) {
  3195.           var e = [
  3196.           ],
  3197.           g = a[c];
  3198.           while (g && g.nodeType !== 9 && (d === b || g.nodeType !== 1 || !f(g).is(d))) g.nodeType === 1 && e.push(g),
  3199.           g = g[c];
  3200.           return e
  3201.         },
  3202.         nth: function (a, b, c, d) {
  3203.           b = b || 1;
  3204.           var e = 0;
  3205.           for (; a; a = a[c]) if (a.nodeType === 1 && ++e === b) break;
  3206.           return a
  3207.         },
  3208.         sibling: function (a, b) {
  3209.           var c = [
  3210.           ];
  3211.           for (; a; a = a.nextSibling) a.nodeType === 1 && a !== b && c.push(a);
  3212.           return c
  3213.         }
  3214.       });
  3215.       var V = 'abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video',
  3216.       W = / jQuery\d+="(?:\d+|null)"/g,
  3217.       X = /^\s+/,
  3218.       Y = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
  3219.       Z = /<([\w:]+)/,
  3220.       $ = /<tbody/i,
  3221.       _ = /<|&#?\w+;/,
  3222.       ba = /<(?:script|style)/i,
  3223.       bb = /<(?:script|object|embed|option|style)/i,
  3224.       bc = new RegExp('<(?:' + V + ')[\\s/>]', 'i'),
  3225.       bd = /checked\s*(?:[^=]|=\s*.checked.)/i,
  3226.       be = /\/(java|ecma)script/i,
  3227.       bf = /^\s*<!(?:\[CDATA\[|\-\-)/,
  3228.       bg = {
  3229.         option: [
  3230.           1,
  3231.           '<select multiple=\'multiple\'>',
  3232.           '</select>'
  3233.         ],
  3234.         legend: [
  3235.           1,
  3236.           '<fieldset>',
  3237.           '</fieldset>'
  3238.         ],
  3239.         thead: [
  3240.           1,
  3241.           '<table>',
  3242.           '</table>'
  3243.         ],
  3244.         tr: [
  3245.           2,
  3246.           '<table><tbody>',
  3247.           '</tbody></table>'
  3248.         ],
  3249.         td: [
  3250.           3,
  3251.           '<table><tbody><tr>',
  3252.           '</tr></tbody></table>'
  3253.         ],
  3254.         col: [
  3255.           2,
  3256.           '<table><tbody></tbody><colgroup>',
  3257.           '</colgroup></table>'
  3258.         ],
  3259.         area: [
  3260.           1,
  3261.           '<map>',
  3262.           '</map>'
  3263.         ],
  3264.         _default: [
  3265.           0,
  3266.           '',
  3267.           ''
  3268.         ]
  3269.       },
  3270.       bh = U(c);
  3271.       bg.optgroup = bg.option,
  3272.       bg.tbody = bg.tfoot = bg.colgroup = bg.caption = bg.thead,
  3273.       bg.th = bg.td,
  3274.       f.support.htmlSerialize || (bg._default = [
  3275.         1,
  3276.         'div<div>',
  3277.         '</div>'
  3278.       ]),
  3279.       f.fn.extend({
  3280.         text: function (a) {
  3281.           return f.access(this, function (a) {
  3282.             return a === b ? f.text(this)  : this.empty().append((this[0] && this[0].ownerDocument || c).createTextNode(a))
  3283.           }, null, a, arguments.length)
  3284.         },
  3285.         wrapAll: function (a) {
  3286.           if (f.isFunction(a)) return this.each(function (b) {
  3287.             f(this).wrapAll(a.call(this, b))
  3288.           });
  3289.           if (this[0]) {
  3290.             var b = f(a, this[0].ownerDocument).eq(0).clone(!0);
  3291.             this[0].parentNode && b.insertBefore(this[0]),
  3292.             b.map(function () {
  3293.               var a = this;
  3294.               while (a.firstChild && a.firstChild.nodeType === 1) a = a.firstChild;
  3295.               return a
  3296.             }).append(this)
  3297.           }
  3298.           return this
  3299.         },
  3300.         wrapInner: function (a) {
  3301.           if (f.isFunction(a)) return this.each(function (b) {
  3302.             f(this).wrapInner(a.call(this, b))
  3303.           });
  3304.           return this.each(function () {
  3305.             var b = f(this),
  3306.             c = b.contents();
  3307.             c.length ? c.wrapAll(a)  : b.append(a)
  3308.           })
  3309.         },
  3310.         wrap: function (a) {
  3311.           var b = f.isFunction(a);
  3312.           return this.each(function (c) {
  3313.             f(this).wrapAll(b ? a.call(this, c)  : a)
  3314.           })
  3315.         },
  3316.         unwrap: function () {
  3317.           return this.parent().each(function () {
  3318.             f.nodeName(this, 'body') || f(this).replaceWith(this.childNodes)
  3319.           }).end()
  3320.         },
  3321.         append: function () {
  3322.           return this.domManip(arguments, !0, function (a) {
  3323.             this.nodeType === 1 && this.appendChild(a)
  3324.           })
  3325.         },
  3326.         prepend: function () {
  3327.           return this.domManip(arguments, !0, function (a) {
  3328.             this.nodeType === 1 && this.insertBefore(a, this.firstChild)
  3329.           })
  3330.         },
  3331.         before: function () {
  3332.           if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) {
  3333.             this.parentNode.insertBefore(a, this)
  3334.           });
  3335.           if (arguments.length) {
  3336.             var a = f.clean(arguments);
  3337.             a.push.apply(a, this.toArray());
  3338.             return this.pushStack(a, 'before', arguments)
  3339.           }
  3340.         },
  3341.         after: function () {
  3342.           if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) {
  3343.             this.parentNode.insertBefore(a, this.nextSibling)
  3344.           });
  3345.           if (arguments.length) {
  3346.             var a = this.pushStack(this, 'after', arguments);
  3347.             a.push.apply(a, f.clean(arguments));
  3348.             return a
  3349.           }
  3350.         },
  3351.         remove: function (a, b) {
  3352.           for (var c = 0, d; (d = this[c]) != null; c++) if (!a || f.filter(a, [
  3353.             d
  3354.           ]).length) !b && d.nodeType === 1 && (f.cleanData(d.getElementsByTagName('*')), f.cleanData([d])),
  3355.           d.parentNode && d.parentNode.removeChild(d);
  3356.           return this
  3357.         },
  3358.         empty: function () {
  3359.           for (var a = 0, b; (b = this[a]) != null; a++) {
  3360.             b.nodeType === 1 && f.cleanData(b.getElementsByTagName('*'));
  3361.             while (b.firstChild) b.removeChild(b.firstChild)
  3362.           }
  3363.           return this
  3364.         },
  3365.         clone: function (a, b) {
  3366.           a = a == null ? !1 : a,
  3367.           b = b == null ? a : b;
  3368.           return this.map(function () {
  3369.             return f.clone(this, a, b)
  3370.           })
  3371.         },
  3372.         html: function (a) {
  3373.           return f.access(this, function (a) {
  3374.             var c = this[0] || {
  3375.             },
  3376.             d = 0,
  3377.             e = this.length;
  3378.             if (a === b) return c.nodeType === 1 ? c.innerHTML.replace(W, '')  : null;
  3379.             if (typeof a == 'string' && !ba.test(a) && (f.support.leadingWhitespace || !X.test(a)) && !bg[(Z.exec(a) || ['',
  3380.             '']) [1].toLowerCase()]) {
  3381.               a = a.replace(Y, '<$1></$2>');
  3382.               try {
  3383.                 for (; d < e; d++) c = this[d] || {
  3384.                 },
  3385.                 c.nodeType === 1 && (f.cleanData(c.getElementsByTagName('*')), c.innerHTML = a);
  3386.                 c = 0
  3387.               } catch (g) {
  3388.               }
  3389.             }
  3390.             c && this.empty().append(a)
  3391.           }, null, a, arguments.length)
  3392.         },
  3393.         replaceWith: function (a) {
  3394.           if (this[0] && this[0].parentNode) {
  3395.             if (f.isFunction(a)) return this.each(function (b) {
  3396.               var c = f(this),
  3397.               d = c.html();
  3398.               c.replaceWith(a.call(this, b, d))
  3399.             });
  3400.             typeof a != 'string' && (a = f(a).detach());
  3401.             return this.each(function () {
  3402.               var b = this.nextSibling,
  3403.               c = this.parentNode;
  3404.               f(this).remove(),
  3405.               b ? f(b).before(a)  : f(c).append(a)
  3406.             })
  3407.           }
  3408.           return this.length ? this.pushStack(f(f.isFunction(a) ? a()  : a), 'replaceWith', a)  : this
  3409.         },
  3410.         detach: function (a) {
  3411.           return this.remove(a, !0)
  3412.         },
  3413.         domManip: function (a, c, d) {
  3414.           var e,
  3415.           g,
  3416.           h,
  3417.           i,
  3418.           j = a[0],
  3419.           k = [
  3420.           ];
  3421.           if (!f.support.checkClone && arguments.length === 3 && typeof j == 'string' && bd.test(j)) return this.each(function () {
  3422.             f(this).domManip(a, c, d, !0)
  3423.           });
  3424.           if (f.isFunction(j)) return this.each(function (e) {
  3425.             var g = f(this);
  3426.             a[0] = j.call(this, e, c ? g.html()  : b),
  3427.             g.domManip(a, c, d)
  3428.           });
  3429.           if (this[0]) {
  3430.             i = j && j.parentNode,
  3431.             f.support.parentNode && i && i.nodeType === 11 && i.childNodes.length === this.length ? e = {
  3432.               fragment: i
  3433.             }
  3434.              : e = f.buildFragment(a, this, k),
  3435.             h = e.fragment,
  3436.             h.childNodes.length === 1 ? g = h = h.firstChild : g = h.firstChild;
  3437.             if (g) {
  3438.               c = c && f.nodeName(g, 'tr');
  3439.               for (var l = 0, m = this.length, n = m - 1; l < m; l++) d.call(c ? bi(this[l], g)  : this[l], e.cacheable || m > 1 && l < n ? f.clone(h, !0, !0)  : h)
  3440.             }
  3441.             k.length && f.each(k, function (a, b) {
  3442.               b.src ? f.ajax({
  3443.                 type: 'GET',
  3444.                 global: !1,
  3445.                 url: b.src,
  3446.                 async: !1,
  3447.                 dataType: 'script'
  3448.               })  : f.globalEval((b.text || b.textContent || b.innerHTML || '').replace(bf, '/*$0*/')),
  3449.               b.parentNode && b.parentNode.removeChild(b)
  3450.             })
  3451.           }
  3452.           return this
  3453.         }
  3454.       }),
  3455.       f.buildFragment = function (a, b, d) {
  3456.         var e,
  3457.         g,
  3458.         h,
  3459.         i,
  3460.         j = a[0];
  3461.         b && b[0] && (i = b[0].ownerDocument || b[0]),
  3462.         i.createDocumentFragment || (i = c),
  3463.         a.length === 1 && typeof j == 'string' && j.length < 512 && i === c && j.charAt(0) === '<' && !bb.test(j) && (f.support.checkClone || !bd.test(j)) && (f.support.html5Clone || !bc.test(j)) && (g = !0, h = f.fragments[j], h && h !== 1 && (e = h)),
  3464.         e || (e = i.createDocumentFragment(), f.clean(a, i, e, d)),
  3465.         g && (f.fragments[j] = h ? e : 1);
  3466.         return {
  3467.           fragment: e,
  3468.           cacheable: g
  3469.         }
  3470.       },
  3471.       f.fragments = {
  3472.       },
  3473.       f.each({
  3474.         appendTo: 'append',
  3475.         prependTo: 'prepend',
  3476.         insertBefore: 'before',
  3477.         insertAfter: 'after',
  3478.         replaceAll: 'replaceWith'
  3479.       }, function (a, b) {
  3480.         f.fn[a] = function (c) {
  3481.           var d = [
  3482.           ],
  3483.           e = f(c),
  3484.           g = this.length === 1 && this[0].parentNode;
  3485.           if (g && g.nodeType === 11 && g.childNodes.length === 1 && e.length === 1) {
  3486.             e[b](this[0]);
  3487.             return this
  3488.           }
  3489.           for (var h = 0, i = e.length; h < i; h++) {
  3490.             var j = (h > 0 ? this.clone(!0)  : this).get();
  3491.             f(e[h]) [b](j),
  3492.             d = d.concat(j)
  3493.           }
  3494.           return this.pushStack(d, a, e.selector)
  3495.         }
  3496.       }),
  3497.       f.extend({
  3498.         clone: function (a, b, c) {
  3499.           var d,
  3500.           e,
  3501.           g,
  3502.           h = f.support.html5Clone || f.isXMLDoc(a) || !bc.test('<' + a.nodeName + '>') ? a.cloneNode(!0)  : bo(a);
  3503.           if ((!f.support.noCloneEvent || !f.support.noCloneChecked) && (a.nodeType === 1 || a.nodeType === 11) && !f.isXMLDoc(a)) {
  3504.             bk(a, h),
  3505.             d = bl(a),
  3506.             e = bl(h);
  3507.             for (g = 0; d[g]; ++g) e[g] && bk(d[g], e[g])
  3508.           }
  3509.           if (b) {
  3510.             bj(a, h);
  3511.             if (c) {
  3512.               d = bl(a),
  3513.               e = bl(h);
  3514.               for (g = 0; d[g]; ++g) bj(d[g], e[g])
  3515.             }
  3516.           }
  3517.           d = e = null;
  3518.           return h
  3519.         },
  3520.         clean: function (a, b, d, e) {
  3521.           var g,
  3522.           h,
  3523.           i,
  3524.           j = [
  3525.           ];
  3526.           b = b || c,
  3527.           typeof b.createElement == 'undefined' && (b = b.ownerDocument || b[0] && b[0].ownerDocument || c);
  3528.           for (var k = 0, l; (l = a[k]) != null; k++) {
  3529.             typeof l == 'number' && (l += '');
  3530.             if (!l) continue;
  3531.             if (typeof l == 'string') if (!_.test(l)) l = b.createTextNode(l);
  3532.              else {
  3533.               l = l.replace(Y, '<$1></$2>');
  3534.               var m = (Z.exec(l) || ['',
  3535.               '']) [1].toLowerCase(),
  3536.               n = bg[m] || bg._default,
  3537.               o = n[0],
  3538.               p = b.createElement('div'),
  3539.               q = bh.childNodes,
  3540.               r;
  3541.               b === c ? bh.appendChild(p)  : U(b).appendChild(p),
  3542.               p.innerHTML = n[1] + l + n[2];
  3543.               while (o--) p = p.lastChild;
  3544.               if (!f.support.tbody) {
  3545.                 var s = $.test(l),
  3546.                 t = m === 'table' && !s ? p.firstChild && p.firstChild.childNodes : n[1] === '<table>' && !s ? p.childNodes : [
  3547.                 ];
  3548.                 for (i = t.length - 1; i >= 0; --i) f.nodeName(t[i], 'tbody') && !t[i].childNodes.length && t[i].parentNode.removeChild(t[i])
  3549.               }
  3550.               !f.support.leadingWhitespace && X.test(l) && p.insertBefore(b.createTextNode(X.exec(l) [0]), p.firstChild),
  3551.               l = p.childNodes,
  3552.               p && (p.parentNode.removeChild(p), q.length > 0 && (r = q[q.length - 1], r && r.parentNode && r.parentNode.removeChild(r)))
  3553.             }
  3554.             var u;
  3555.             if (!f.support.appendChecked) if (l[0] && typeof (u = l.length) == 'number') for (i = 0; i < u; i++) bn(l[i]);
  3556.              else bn(l);
  3557.             l.nodeType ? j.push(l)  : j = f.merge(j, l)
  3558.           }
  3559.           if (d) {
  3560.             g = function (a) {
  3561.               return !a.type || be.test(a.type)
  3562.             };
  3563.             for (k = 0; j[k]; k++) {
  3564.               h = j[k];
  3565.               if (e && f.nodeName(h, 'script') && (!h.type || be.test(h.type))) e.push(h.parentNode ? h.parentNode.removeChild(h)  : h);
  3566.                else {
  3567.                 if (h.nodeType === 1) {
  3568.                   var v = f.grep(h.getElementsByTagName('script'), g);
  3569.                   j.splice.apply(j, [
  3570.                     k + 1,
  3571.                     0
  3572.                   ].concat(v))
  3573.                 }
  3574.                 d.appendChild(h)
  3575.               }
  3576.             }
  3577.           }
  3578.           return j
  3579.         },
  3580.         cleanData: function (a) {
  3581.           var b,
  3582.           c,
  3583.           d = f.cache,
  3584.           e = f.event.special,
  3585.           g = f.support.deleteExpando;
  3586.           for (var h = 0, i; (i = a[h]) != null; h++) {
  3587.             if (i.nodeName && f.noData[i.nodeName.toLowerCase()]) continue;
  3588.             c = i[f.expando];
  3589.             if (c) {
  3590.               b = d[c];
  3591.               if (b && b.events) {
  3592.                 for (var j in b.events) e[j] ? f.event.remove(i, j)  : f.removeEvent(i, j, b.handle);
  3593.                 b.handle && (b.handle.elem = null)
  3594.               }
  3595.               g ? delete i[f.expando] : i.removeAttribute && i.removeAttribute(f.expando),
  3596.               delete d[c]
  3597.             }
  3598.           }
  3599.         }
  3600.       });
  3601.       var bp = /alpha\([^)]*\)/i,
  3602.       bq = /opacity=([^)]*)/,
  3603.       br = /([A-Z]|^ms)/g,
  3604.       bs = /^[\-+]?(?:\d*\.)?\d+$/i,
  3605.       bt = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
  3606.       bu = /^([\-+])=([\-+.\de]+)/,
  3607.       bv = /^margin/,
  3608.       bw = {
  3609.         position: 'absolute',
  3610.         visibility: 'hidden',
  3611.         display: 'block'
  3612.       },
  3613.       bx = [
  3614.         'Top',
  3615.         'Right',
  3616.         'Bottom',
  3617.         'Left'
  3618.       ],
  3619.       by,
  3620.       bz,
  3621.       bA;
  3622.       f.fn.css = function (a, c) {
  3623.         return f.access(this, function (a, c, d) {
  3624.           return d !== b ? f.style(a, c, d)  : f.css(a, c)
  3625.         }, a, c, arguments.length > 1)
  3626.       },
  3627.       f.extend({
  3628.         cssHooks: {
  3629.           opacity: {
  3630.             get: function (a, b) {
  3631.               if (b) {
  3632.                 var c = by(a, 'opacity');
  3633.                 return c === '' ? '1' : c
  3634.               }
  3635.               return a.style.opacity
  3636.             }
  3637.           }
  3638.         },
  3639.         cssNumber: {
  3640.           fillOpacity: !0,
  3641.           fontWeight: !0,
  3642.           lineHeight: !0,
  3643.           opacity: !0,
  3644.           orphans: !0,
  3645.           widows: !0,
  3646.           zIndex: !0,
  3647.           zoom: !0
  3648.         },
  3649.         cssProps: {
  3650.           'float': f.support.cssFloat ? 'cssFloat' : 'styleFloat'
  3651.         },
  3652.         style: function (a, c, d, e) {
  3653.           if (!!a && a.nodeType !== 3 && a.nodeType !== 8 && !!a.style) {
  3654.             var g,
  3655.             h,
  3656.             i = f.camelCase(c),
  3657.             j = a.style,
  3658.             k = f.cssHooks[i];
  3659.             c = f.cssProps[i] || i;
  3660.             if (d === b) {
  3661.               if (k && 'get' in k && (g = k.get(a, !1, e)) !== b) return g;
  3662.               return j[c]
  3663.             }
  3664.             h = typeof d,
  3665.             h === 'string' && (g = bu.exec(d)) && (d = + (g[1] + 1) * + g[2] + parseFloat(f.css(a, c)), h = 'number');
  3666.             if (d == null || h === 'number' && isNaN(d)) return;
  3667.             h === 'number' && !f.cssNumber[i] && (d += 'px');
  3668.             if (!k || !('set' in k) || (d = k.set(a, d)) !== b) try {
  3669.               j[c] = d
  3670.             } catch (l) {
  3671.             }
  3672.           }
  3673.         },
  3674.         css: function (a, c, d) {
  3675.           var e,
  3676.           g;
  3677.           c = f.camelCase(c),
  3678.           g = f.cssHooks[c],
  3679.           c = f.cssProps[c] || c,
  3680.           c === 'cssFloat' && (c = 'float');
  3681.           if (g && 'get' in g && (e = g.get(a, !0, d)) !== b) return e;
  3682.           if (by) return by(a, c)
  3683.         },
  3684.         swap: function (a, b, c) {
  3685.           var d = {
  3686.           },
  3687.           e,
  3688.           f;
  3689.           for (f in b) d[f] = a.style[f],
  3690.           a.style[f] = b[f];
  3691.           e = c.call(a);
  3692.           for (f in b) a.style[f] = d[f];
  3693.           return e
  3694.         }
  3695.       }),
  3696.       f.curCSS = f.css,
  3697.       c.defaultView && c.defaultView.getComputedStyle && (bz = function (a, b) {
  3698.         var c,
  3699.         d,
  3700.         e,
  3701.         g,
  3702.         h = a.style;
  3703.         b = b.replace(br, '-$1').toLowerCase(),
  3704.         (d = a.ownerDocument.defaultView) && (e = d.getComputedStyle(a, null)) && (c = e.getPropertyValue(b), c === '' && !f.contains(a.ownerDocument.documentElement, a) && (c = f.style(a, b))),
  3705.         !f.support.pixelMargin && e && bv.test(b) && bt.test(c) && (g = h.width, h.width = c, c = e.width, h.width = g);
  3706.         return c
  3707.       }),
  3708.       c.documentElement.currentStyle && (bA = function (a, b) {
  3709.         var c,
  3710.         d,
  3711.         e,
  3712.         f = a.currentStyle && a.currentStyle[b],
  3713.         g = a.style;
  3714.         f == null && g && (e = g[b]) && (f = e),
  3715.         bt.test(f) && (c = g.left, d = a.runtimeStyle && a.runtimeStyle.left, d && (a.runtimeStyle.left = a.currentStyle.left), g.left = b === 'fontSize' ? '1em' : f, f = g.pixelLeft + 'px', g.left = c, d && (a.runtimeStyle.left = d));
  3716.         return f === '' ? 'auto' : f
  3717.       }),
  3718.       by = bz || bA,
  3719.       f.each(['height',
  3720.       'width'], function (a, b) {
  3721.         f.cssHooks[b] = {
  3722.           get: function (a, c, d) {
  3723.             if (c) return a.offsetWidth !== 0 ? bB(a, b, d)  : f.swap(a, bw, function () {
  3724.               return bB(a, b, d)
  3725.             })
  3726.           },
  3727.           set: function (a, b) {
  3728.             return bs.test(b) ? b + 'px' : b
  3729.           }
  3730.         }
  3731.       }),
  3732.       f.support.opacity || (f.cssHooks.opacity = {
  3733.         get: function (a, b) {
  3734.           return bq.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || '') ? parseFloat(RegExp.$1) / 100 + '' : b ? '1' : ''
  3735.         },
  3736.         set: function (a, b) {
  3737.           var c = a.style,
  3738.           d = a.currentStyle,
  3739.           e = f.isNumeric(b) ? 'alpha(opacity=' + b * 100 + ')' : '',
  3740.           g = d && d.filter || c.filter || '';
  3741.           c.zoom = 1;
  3742.           if (b >= 1 && f.trim(g.replace(bp, '')) === '') {
  3743.             c.removeAttribute('filter');
  3744.             if (d && !d.filter) return
  3745.           }
  3746.           c.filter = bp.test(g) ? g.replace(bp, e)  : g + ' ' + e
  3747.         }
  3748.       }),
  3749.       f(function () {
  3750.         f.support.reliableMarginRight || (f.cssHooks.marginRight = {
  3751.           get: function (a, b) {
  3752.             return f.swap(a, {
  3753.               display: 'inline-block'
  3754.             }, function () {
  3755.               return b ? by(a, 'margin-right')  : a.style.marginRight
  3756.             })
  3757.           }
  3758.         })
  3759.       }),
  3760.       f.expr && f.expr.filters && (f.expr.filters.hidden = function (a) {
  3761.         var b = a.offsetWidth,
  3762.         c = a.offsetHeight;
  3763.         return b === 0 && c === 0 || !f.support.reliableHiddenOffsets && (a.style && a.style.display || f.css(a, 'display')) === 'none'
  3764.       }, f.expr.filters.visible = function (a) {
  3765.         return !f.expr.filters.hidden(a)
  3766.       }),
  3767.       f.each({
  3768.         margin: '',
  3769.         padding: '',
  3770.         border: 'Width'
  3771.       }, function (a, b) {
  3772.         f.cssHooks[a + b] = {
  3773.           expand: function (c) {
  3774.             var d,
  3775.             e = typeof c == 'string' ? c.split(' ')  : [
  3776.               c
  3777.             ],
  3778.             f = {
  3779.             };
  3780.             for (d = 0; d < 4; d++) f[a + bx[d] + b] = e[d] || e[d - 2] || e[0];
  3781.             return f
  3782.           }
  3783.         }
  3784.       });
  3785.       var bC = /%20/g,
  3786.       bD = /\[\]$/,
  3787.       bE = /\r?\n/g,
  3788.       bF = /#.*$/,
  3789.       bG = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
  3790.       bH = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
  3791.       bI = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
  3792.       bJ = /^(?:GET|HEAD)$/,
  3793.       bK = /^\/\//,
  3794.       bL = /\?/,
  3795.       bM = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
  3796.       bN = /^(?:select|textarea)/i,
  3797.       bO = /\s+/,
  3798.       bP = /([?&])_=[^&]*/,
  3799.       bQ = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
  3800.       bR = f.fn.load,
  3801.       bS = {
  3802.       },
  3803.       bT = {
  3804.       },
  3805.       bU,
  3806.       bV,
  3807.       bW = [
  3808.         '*/'
  3809.       ] + ['*'];
  3810.       try {
  3811.         bU = e.href
  3812.       } catch (bX) {
  3813.         bU = c.createElement('a'),
  3814.         bU.href = '',
  3815.         bU = bU.href
  3816.       }
  3817.       bV = bQ.exec(bU.toLowerCase()) || [],
  3818.       f.fn.extend({
  3819.         load: function (a, c, d) {
  3820.           if (typeof a != 'string' && bR) return bR.apply(this, arguments);
  3821.           if (!this.length) return this;
  3822.           var e = a.indexOf(' ');
  3823.           if (e >= 0) {
  3824.             var g = a.slice(e, a.length);
  3825.             a = a.slice(0, e)
  3826.           }
  3827.           var h = 'GET';
  3828.           c && (f.isFunction(c) ? (d = c, c = b)  : typeof c == 'object' && (c = f.param(c, f.ajaxSettings.traditional), h = 'POST'));
  3829.           var i = this;
  3830.           f.ajax({
  3831.             url: a,
  3832.             type: h,
  3833.             dataType: 'html',
  3834.             data: c,
  3835.             complete: function (a, b, c) {
  3836.               c = a.responseText,
  3837.               a.isResolved() && (a.done(function (a) {
  3838.                 c = a
  3839.               }), i.html(g ? f('<div>').append(c.replace(bM, '')).find(g)  : c)),
  3840.               d && i.each(d, [
  3841.                 c,
  3842.                 b,
  3843.                 a
  3844.               ])
  3845.             }
  3846.           });
  3847.           return this
  3848.         },
  3849.         serialize: function () {
  3850.           return f.param(this.serializeArray())
  3851.         },
  3852.         serializeArray: function () {
  3853.           return this.map(function () {
  3854.             return this.elements ? f.makeArray(this.elements)  : this
  3855.           }).filter(function () {
  3856.             return this.name && !this.disabled && (this.checked || bN.test(this.nodeName) || bH.test(this.type))
  3857.           }).map(function (a, b) {
  3858.             var c = f(this).val();
  3859.             return c == null ? null : f.isArray(c) ? f.map(c, function (a, c) {
  3860.               return {
  3861.                 name: b.name,
  3862.                 value: a.replace(bE, '\r\n')
  3863.               }
  3864.             })  : {
  3865.               name: b.name,
  3866.               value: c.replace(bE, '\r\n')
  3867.             }
  3868.           }).get()
  3869.         }
  3870.       }),
  3871.       f.each('ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend'.split(' '), function (a, b) {
  3872.         f.fn[b] = function (a) {
  3873.           return this.on(b, a)
  3874.         }
  3875.       }),
  3876.       f.each(['get',
  3877.       'post'], function (a, c) {
  3878.         f[c] = function (a, d, e, g) {
  3879.           f.isFunction(d) && (g = g || e, e = d, d = b);
  3880.           return f.ajax({
  3881.             type: c,
  3882.             url: a,
  3883.             data: d,
  3884.             success: e,
  3885.             dataType: g
  3886.           })
  3887.         }
  3888.       }),
  3889.       f.extend({
  3890.         getScript: function (a, c) {
  3891.           return f.get(a, b, c, 'script')
  3892.         },
  3893.         getJSON: function (a, b, c) {
  3894.           return f.get(a, b, c, 'json')
  3895.         },
  3896.         ajaxSetup: function (a, b) {
  3897.           b ? b$(a, f.ajaxSettings)  : (b = a, a = f.ajaxSettings),
  3898.           b$(a, b);
  3899.           return a
  3900.         },
  3901.         ajaxSettings: {
  3902.           url: bU,
  3903.           isLocal: bI.test(bV[1]),
  3904.           global: !0,
  3905.           type: 'GET',
  3906.           contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  3907.           processData: !0,
  3908.           async: !0,
  3909.           accepts: {
  3910.             xml: 'application/xml, text/xml',
  3911.             html: 'text/html',
  3912.             text: 'text/plain',
  3913.             json: 'application/json, text/javascript',
  3914.             '*': bW
  3915.           },
  3916.           contents: {
  3917.             xml: /xml/,
  3918.             html: /html/,
  3919.             json: /json/
  3920.           },
  3921.           responseFields: {
  3922.             xml: 'responseXML',
  3923.             text: 'responseText'
  3924.           },
  3925.           converters: {
  3926.             '* text': a.String,
  3927.             'text html': !0,
  3928.             'text json': f.parseJSON,
  3929.             'text xml': f.parseXML
  3930.           },
  3931.           flatOptions: {
  3932.             context: !0,
  3933.             url: !0
  3934.           }
  3935.         },
  3936.         ajaxPrefilter: bY(bS),
  3937.         ajaxTransport: bY(bT),
  3938.         ajax: function (a, c) {
  3939.           function w(a, c, l, m) {
  3940.             if (s !== 2) {
  3941.               s = 2,
  3942.               q && clearTimeout(q),
  3943.               p = b,
  3944.               n = m || '',
  3945.               v.readyState = a > 0 ? 4 : 0;
  3946.               var o,
  3947.               r,
  3948.               u,
  3949.               w = c,
  3950.               x = l ? ca(d, v, l)  : b,
  3951.               y,
  3952.               z;
  3953.               if (a >= 200 && a < 300 || a === 304) {
  3954.                 if (d.ifModified) {
  3955.                   if (y = v.getResponseHeader('Last-Modified')) f.lastModified[k] = y;
  3956.                   if (z = v.getResponseHeader('Etag')) f.etag[k] = z
  3957.                 }
  3958.                 if (a === 304) w = 'notmodified',
  3959.                 o = !0;
  3960.                  else try {
  3961.                   r = cb(d, x),
  3962.                   w = 'success',
  3963.                   o = !0
  3964.                 } catch (A) {
  3965.                   w = 'parsererror',
  3966.                   u = A
  3967.                 }
  3968.               } else {
  3969.                 u = w;
  3970.                 if (!w || a) w = 'error',
  3971.                 a < 0 && (a = 0)
  3972.               }
  3973.               v.status = a,
  3974.               v.statusText = '' + (c || w),
  3975.               o ? h.resolveWith(e, [
  3976.                 r,
  3977.                 w,
  3978.                 v
  3979.               ])  : h.rejectWith(e, [
  3980.                 v,
  3981.                 w,
  3982.                 u
  3983.               ]),
  3984.               v.statusCode(j),
  3985.               j = b,
  3986.               t && g.trigger('ajax' + (o ? 'Success' : 'Error'), [
  3987.                 v,
  3988.                 d,
  3989.                 o ? r : u
  3990.               ]),
  3991.               i.fireWith(e, [
  3992.                 v,
  3993.                 w
  3994.               ]),
  3995.               t && (g.trigger('ajaxComplete', [
  3996.                 v,
  3997.                 d
  3998.               ]), --f.active || f.event.trigger('ajaxStop'))
  3999.             }
  4000.           }
  4001.           typeof a == 'object' && (c = a, a = b),
  4002.           c = c || {
  4003.           };
  4004.           var d = f.ajaxSetup({
  4005.           }, c),
  4006.           e = d.context || d,
  4007.           g = e !== d && (e.nodeType || e instanceof f) ? f(e)  : f.event,
  4008.           h = f.Deferred(),
  4009.           i = f.Callbacks('once memory'),
  4010.           j = d.statusCode || {
  4011.           },
  4012.           k,
  4013.           l = {
  4014.           },
  4015.           m = {
  4016.           },
  4017.           n,
  4018.           o,
  4019.           p,
  4020.           q,
  4021.           r,
  4022.           s = 0,
  4023.           t,
  4024.           u,
  4025.           v = {
  4026.             readyState: 0,
  4027.             setRequestHeader: function (a, b) {
  4028.               if (!s) {
  4029.                 var c = a.toLowerCase();
  4030.                 a = m[c] = m[c] || a,
  4031.                 l[a] = b
  4032.               }
  4033.               return this
  4034.             },
  4035.             getAllResponseHeaders: function () {
  4036.               return s === 2 ? n : null
  4037.             },
  4038.             getResponseHeader: function (a) {
  4039.               var c;
  4040.               if (s === 2) {
  4041.                 if (!o) {
  4042.                   o = {
  4043.                   };
  4044.                   while (c = bG.exec(n)) o[c[1].toLowerCase()] = c[2]
  4045.                 }
  4046.                 c = o[a.toLowerCase()]
  4047.               }
  4048.               return c === b ? null : c
  4049.             },
  4050.             overrideMimeType: function (a) {
  4051.               s || (d.mimeType = a);
  4052.               return this
  4053.             },
  4054.             abort: function (a) {
  4055.               a = a || 'abort',
  4056.               p && p.abort(a),
  4057.               w(0, a);
  4058.               return this
  4059.             }
  4060.           };
  4061.           h.promise(v),
  4062.           v.success = v.done,
  4063.           v.error = v.fail,
  4064.           v.complete = i.add,
  4065.           v.statusCode = function (a) {
  4066.             if (a) {
  4067.               var b;
  4068.               if (s < 2) for (b in a) j[b] = [
  4069.                 j[b],
  4070.                 a[b]
  4071.               ];
  4072.                else b = a[v.status],
  4073.               v.then(b, b)
  4074.             }
  4075.             return this
  4076.           },
  4077.           d.url = ((a || d.url) + '').replace(bF, '').replace(bK, bV[1] + '//'),
  4078.           d.dataTypes = f.trim(d.dataType || '*').toLowerCase().split(bO),
  4079.           d.crossDomain == null && (r = bQ.exec(d.url.toLowerCase()), d.crossDomain = !(!r || r[1] == bV[1] && r[2] == bV[2] && (r[3] || (r[1] === 'http:' ? 80 : 443)) == (bV[3] || (bV[1] === 'http:' ? 80 : 443)))),
  4080.           d.data && d.processData && typeof d.data != 'string' && (d.data = f.param(d.data, d.traditional)),
  4081.           bZ(bS, d, c, v);
  4082.           if (s === 2) return !1;
  4083.           t = d.global,
  4084.           d.type = d.type.toUpperCase(),
  4085.           d.hasContent = !bJ.test(d.type),
  4086.           t && f.active++ === 0 && f.event.trigger('ajaxStart');
  4087.           if (!d.hasContent) {
  4088.             d.data && (d.url += (bL.test(d.url) ? '&' : '?') + d.data, delete d.data),
  4089.             k = d.url;
  4090.             if (d.cache === !1) {
  4091.               var x = f.now(),
  4092.               y = d.url.replace(bP, '$1_=' + x);
  4093.               d.url = y + (y === d.url ? (bL.test(d.url) ? '&' : '?') + '_=' + x : '')
  4094.             }
  4095.           }(d.data && d.hasContent && d.contentType !== !1 || c.contentType) && v.setRequestHeader('Content-Type', d.contentType),
  4096.           d.ifModified && (k = k || d.url, f.lastModified[k] && v.setRequestHeader('If-Modified-Since', f.lastModified[k]), f.etag[k] && v.setRequestHeader('If-None-Match', f.etag[k])),
  4097.           v.setRequestHeader('Accept', d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + (d.dataTypes[0] !== '*' ? ', ' + bW + '; q=0.01' : '')  : d.accepts['*']);
  4098.           for (u in d.headers) v.setRequestHeader(u, d.headers[u]);
  4099.           if (d.beforeSend && (d.beforeSend.call(e, v, d) === !1 || s === 2)) {
  4100.             v.abort();
  4101.             return !1
  4102.           }
  4103.           for (u in {
  4104.             success: 1,
  4105.             error: 1,
  4106.             complete: 1
  4107.           }) v[u](d[u]);
  4108.           p = bZ(bT, d, c, v);
  4109.           if (!p) w( - 1, 'No Transport');
  4110.            else {
  4111.             v.readyState = 1,
  4112.             t && g.trigger('ajaxSend', [
  4113.               v,
  4114.               d
  4115.             ]),
  4116.             d.async && d.timeout > 0 && (q = setTimeout(function () {
  4117.               v.abort('timeout')
  4118.             }, d.timeout));
  4119.             try {
  4120.               s = 1,
  4121.               p.send(l, w)
  4122.             } catch (z) {
  4123.               if (s < 2) w( - 1, z);
  4124.                else throw z
  4125.             }
  4126.           }
  4127.           return v
  4128.         },
  4129.         param: function (a, c) {
  4130.           var d = [
  4131.           ],
  4132.           e = function (a, b) {
  4133.             b = f.isFunction(b) ? b()  : b,
  4134.             d[d.length] = encodeURIComponent(a) + '=' + encodeURIComponent(b)
  4135.           };
  4136.           c === b && (c = f.ajaxSettings.traditional);
  4137.           if (f.isArray(a) || a.jquery && !f.isPlainObject(a)) f.each(a, function () {
  4138.             e(this.name, this.value)
  4139.           });
  4140.            else for (var g in a) b_(g, a[g], c, e);
  4141.           return d.join('&').replace(bC, '+')
  4142.         }
  4143.       }),
  4144.       f.extend({
  4145.         active: 0,
  4146.         lastModified: {
  4147.         },
  4148.         etag: {
  4149.         }
  4150.       });
  4151.       var cc = f.now(),
  4152.       cd = /(\=)\?(&|$)|\?\?/i;
  4153.       f.ajaxSetup({
  4154.         jsonp: 'callback',
  4155.         jsonpCallback: function () {
  4156.           return f.expando + '_' + cc++
  4157.         }
  4158.       }),
  4159.       f.ajaxPrefilter('json jsonp', function (b, c, d) {
  4160.         var e = typeof b.data == 'string' && /^application\/x\-www\-form\-urlencoded/.test(b.contentType);
  4161.         if (b.dataTypes[0] === 'jsonp' || b.jsonp !== !1 && (cd.test(b.url) || e && cd.test(b.data))) {
  4162.           var g,
  4163.           h = b.jsonpCallback = f.isFunction(b.jsonpCallback) ? b.jsonpCallback()  : b.jsonpCallback,
  4164.           i = a[h],
  4165.           j = b.url,
  4166.           k = b.data,
  4167.           l = '$1' + h + '$2';
  4168.           b.jsonp !== !1 && (j = j.replace(cd, l), b.url === j && (e && (k = k.replace(cd, l)), b.data === k && (j += (/\?/.test(j) ? '&' : '?') + b.jsonp + '=' + h))),
  4169.           b.url = j,
  4170.           b.data = k,
  4171.           a[h] = function (a) {
  4172.             g = [
  4173.               a
  4174.             ]
  4175.           },
  4176.           d.always(function () {
  4177.             a[h] = i,
  4178.             g && f.isFunction(i) && a[h](g[0])
  4179.           }),
  4180.           b.converters['script json'] = function () {
  4181.             g || f.error(h + ' was not called');
  4182.             return g[0]
  4183.           },
  4184.           b.dataTypes[0] = 'json';
  4185.           return 'script'
  4186.         }
  4187.       }),
  4188.       f.ajaxSetup({
  4189.         accepts: {
  4190.           script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'
  4191.         },
  4192.         contents: {
  4193.           script: /javascript|ecmascript/
  4194.         },
  4195.         converters: {
  4196.           'text script': function (a) {
  4197.             f.globalEval(a);
  4198.             return a
  4199.           }
  4200.         }
  4201.       }),
  4202.       f.ajaxPrefilter('script', function (a) {
  4203.         a.cache === b && (a.cache = !1),
  4204.         a.crossDomain && (a.type = 'GET', a.global = !1)
  4205.       }),
  4206.       f.ajaxTransport('script', function (a) {
  4207.         if (a.crossDomain) {
  4208.           var d,
  4209.           e = c.head || c.getElementsByTagName('head') [0] || c.documentElement;
  4210.           return {
  4211.             send: function (f, g) {
  4212.               d = c.createElement('script'),
  4213.               d.async = 'async',
  4214.               a.scriptCharset && (d.charset = a.scriptCharset),
  4215.               d.src = a.url,
  4216.               d.onload = d.onreadystatechange = function (a, c) {
  4217.                 if (c || !d.readyState || /loaded|complete/.test(d.readyState)) d.onload = d.onreadystatechange = null,
  4218.                 e && d.parentNode && e.removeChild(d),
  4219.                 d = b,
  4220.                 c || g(200, 'success')
  4221.               },
  4222.               e.insertBefore(d, e.firstChild)
  4223.             },
  4224.             abort: function () {
  4225.               d && d.onload(0, 1)
  4226.             }
  4227.           }
  4228.         }
  4229.       });
  4230.       var ce = a.ActiveXObject ? function () {
  4231.         for (var a in cg) cg[a](0, 1)
  4232.       }
  4233.        : !1,
  4234.       cf = 0,
  4235.       cg;
  4236.       f.ajaxSettings.xhr = a.ActiveXObject ? function () {
  4237.         return !this.isLocal && ch() || ci()
  4238.       }
  4239.        : ch,
  4240.       function (a) {
  4241.         f.extend(f.support, {
  4242.           ajax: !!a,
  4243.           cors: !!a && 'withCredentials' in a
  4244.         })
  4245.       }(f.ajaxSettings.xhr()),
  4246.       f.support.ajax && f.ajaxTransport(function (c) {
  4247.         if (!c.crossDomain || f.support.cors) {
  4248.           var d;
  4249.           return {
  4250.             send: function (e, g) {
  4251.               var h = c.xhr(),
  4252.               i,
  4253.               j;
  4254.               c.username ? h.open(c.type, c.url, c.async, c.username, c.password)  : h.open(c.type, c.url, c.async);
  4255.               if (c.xhrFields) for (j in c.xhrFields) h[j] = c.xhrFields[j];
  4256.               c.mimeType && h.overrideMimeType && h.overrideMimeType(c.mimeType),
  4257.               !c.crossDomain && !e['X-Requested-With'] && (e['X-Requested-With'] = 'XMLHttpRequest');
  4258.               try {
  4259.                 for (j in e) h.setRequestHeader(j, e[j])
  4260.               } catch (k) {
  4261.               }
  4262.               h.send(c.hasContent && c.data || null),
  4263.               d = function (a, e) {
  4264.                 var j,
  4265.                 k,
  4266.                 l,
  4267.                 m,
  4268.                 n;
  4269.                 try {
  4270.                   if (d && (e || h.readyState === 4)) {
  4271.                     d = b,
  4272.                     i && (h.onreadystatechange = f.noop, ce && delete cg[i]);
  4273.                     if (e) h.readyState !== 4 && h.abort();
  4274.                      else {
  4275.                       j = h.status,
  4276.                       l = h.getAllResponseHeaders(),
  4277.                       m = {
  4278.                       },
  4279.                       n = h.responseXML,
  4280.                       n && n.documentElement && (m.xml = n);
  4281.                       try {
  4282.                         m.text = h.responseText
  4283.                       } catch (a) {
  4284.                       }
  4285.                       try {
  4286.                         k = h.statusText
  4287.                       } catch (o) {
  4288.                         k = ''
  4289.                       }
  4290.                       !j && c.isLocal && !c.crossDomain ? j = m.text ? 200 : 404 : j === 1223 && (j = 204)
  4291.                     }
  4292.                   }
  4293.                 } catch (p) {
  4294.                   e || g( - 1, p)
  4295.                 }
  4296.                 m && g(j, k, m, l)
  4297.               },
  4298.               !c.async || h.readyState === 4 ? d()  : (i = ++cf, ce && (cg || (cg = {
  4299.               }, f(a).unload(ce)), cg[i] = d), h.onreadystatechange = d)
  4300.             },
  4301.             abort: function () {
  4302.               d && d(0, 1)
  4303.             }
  4304.           }
  4305.         }
  4306.       });
  4307.       var cj = {
  4308.       },
  4309.       ck,
  4310.       cl,
  4311.       cm = /^(?:toggle|show|hide)$/,
  4312.       cn = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
  4313.       co,
  4314.       cp = [
  4315.         ['height',
  4316.         'marginTop',
  4317.         'marginBottom',
  4318.         'paddingTop',
  4319.         'paddingBottom'],
  4320.         [
  4321.           'width',
  4322.           'marginLeft',
  4323.           'marginRight',
  4324.           'paddingLeft',
  4325.           'paddingRight'
  4326.         ],
  4327.         [
  4328.           'opacity'
  4329.         ]
  4330.       ],
  4331.       cq;
  4332.       f.fn.extend({
  4333.         show: function (a, b, c) {
  4334.           var d,
  4335.           e;
  4336.           if (a || a === 0) return this.animate(ct('show', 3), a, b, c);
  4337.           for (var g = 0, h = this.length; g < h; g++) d = this[g],
  4338.           d.style && (e = d.style.display, !f._data(d, 'olddisplay') && e === 'none' && (e = d.style.display = ''), (e === '' && f.css(d, 'display') === 'none' || !f.contains(d.ownerDocument.documentElement, d)) && f._data(d, 'olddisplay', cu(d.nodeName)));
  4339.           for (g = 0; g < h; g++) {
  4340.             d = this[g];
  4341.             if (d.style) {
  4342.               e = d.style.display;
  4343.               if (e === '' || e === 'none') d.style.display = f._data(d, 'olddisplay') || ''
  4344.             }
  4345.           }
  4346.           return this
  4347.         },
  4348.         hide: function (a, b, c) {
  4349.           if (a || a === 0) return this.animate(ct('hide', 3), a, b, c);
  4350.           var d,
  4351.           e,
  4352.           g = 0,
  4353.           h = this.length;
  4354.           for (; g < h; g++) d = this[g],
  4355.           d.style && (e = f.css(d, 'display'), e !== 'none' && !f._data(d, 'olddisplay') && f._data(d, 'olddisplay', e));
  4356.           for (g = 0; g < h; g++) this[g].style && (this[g].style.display = 'none');
  4357.           return this
  4358.         },
  4359.         _toggle: f.fn.toggle,
  4360.         toggle: function (a, b, c) {
  4361.           var d = typeof a == 'boolean';
  4362.           f.isFunction(a) && f.isFunction(b) ? this._toggle.apply(this, arguments)  : a == null || d ? this.each(function () {
  4363.             var b = d ? a : f(this).is(':hidden');
  4364.             f(this) [b ? 'show' : 'hide']()
  4365.           })  : this.animate(ct('toggle', 3), a, b, c);
  4366.           return this
  4367.         },
  4368.         fadeTo: function (a, b, c, d) {
  4369.           return this.filter(':hidden').css('opacity', 0).show().end().animate({
  4370.             opacity: b
  4371.           }, a, c, d)
  4372.         },
  4373.         animate: function (a, b, c, d) {
  4374.           function g() {
  4375.             e.queue === !1 && f._mark(this);
  4376.             var b = f.extend({
  4377.             }, e),
  4378.             c = this.nodeType === 1,
  4379.             d = c && f(this).is(':hidden'),
  4380.             g,
  4381.             h,
  4382.             i,
  4383.             j,
  4384.             k,
  4385.             l,
  4386.             m,
  4387.             n,
  4388.             o,
  4389.             p,
  4390.             q;
  4391.             b.animatedProperties = {
  4392.             };
  4393.             for (i in a) {
  4394.               g = f.camelCase(i),
  4395.               i !== g && (a[g] = a[i], delete a[i]);
  4396.               if ((k = f.cssHooks[g]) && 'expand' in k) {
  4397.                 l = k.expand(a[g]),
  4398.                 delete a[g];
  4399.                 for (i in l) i in a || (a[i] = l[i])
  4400.               }
  4401.             }
  4402.             for (g in a) {
  4403.               h = a[g],
  4404.               f.isArray(h) ? (b.animatedProperties[g] = h[1], h = a[g] = h[0])  : b.animatedProperties[g] = b.specialEasing && b.specialEasing[g] || b.easing || 'swing';
  4405.               if (h === 'hide' && d || h === 'show' && !d) return b.complete.call(this);
  4406.               c && (g === 'height' || g === 'width') && (b.overflow = [
  4407.                 this.style.overflow,
  4408.                 this.style.overflowX,
  4409.                 this.style.overflowY
  4410.               ], f.css(this, 'display') === 'inline' && f.css(this, 'float') === 'none' && (!f.support.inlineBlockNeedsLayout || cu(this.nodeName) === 'inline' ? this.style.display = 'inline-block' : this.style.zoom = 1))
  4411.             }
  4412.             b.overflow != null && (this.style.overflow = 'hidden');
  4413.             for (i in a) j = new f.fx(this, b, i),
  4414.             h = a[i],
  4415.             cm.test(h) ? (q = f._data(this, 'toggle' + i) || (h === 'toggle' ? d ? 'show' : 'hide' : 0), q ? (f._data(this, 'toggle' + i, q === 'show' ? 'hide' : 'show'), j[q]())  : j[h]())  : (m = cn.exec(h), n = j.cur(), m ? (o = parseFloat(m[2]), p = m[3] || (f.cssNumber[i] ? '' : 'px'), p !== 'px' && (f.style(this, i, (o || 1) + p), n = (o || 1) / j.cur() * n, f.style(this, i, n + p)), m[1] && (o = (m[1] === '-=' ? - 1 : 1) * o + n), j.custom(n, o, p))  : j.custom(n, h, ''));
  4416.             return !0
  4417.           }
  4418.           var e = f.speed(b, c, d);
  4419.           if (f.isEmptyObject(a)) return this.each(e.complete, [
  4420.             !1
  4421.           ]);
  4422.           a = f.extend({
  4423.           }, a);
  4424.           return e.queue === !1 ? this.each(g)  : this.queue(e.queue, g)
  4425.         },
  4426.         stop: function (a, c, d) {
  4427.           typeof a != 'string' && (d = c, c = a, a = b),
  4428.           c && a !== !1 && this.queue(a || 'fx', [
  4429.           ]);
  4430.           return this.each(function () {
  4431.             function h(a, b, c) {
  4432.               var e = b[c];
  4433.               f.removeData(a, c, !0),
  4434.               e.stop(d)
  4435.             }
  4436.             var b,
  4437.             c = !1,
  4438.             e = f.timers,
  4439.             g = f._data(this);
  4440.             d || f._unmark(!0, this);
  4441.             if (a == null) for (b in g) g[b] && g[b].stop && b.indexOf('.run') === b.length - 4 && h(this, g, b);
  4442.              else g[b = a + '.run'] && g[b].stop && h(this, g, b);
  4443.             for (b = e.length; b--; ) e[b].elem === this && (a == null || e[b].queue === a) && (d ? e[b](!0)  : e[b].saveState(), c = !0, e.splice(b, 1));
  4444.             (!d || !c) && f.dequeue(this, a)
  4445.           })
  4446.         }
  4447.       }),
  4448.       f.each({
  4449.         slideDown: ct('show', 1),
  4450.         slideUp: ct('hide', 1),
  4451.         slideToggle: ct('toggle', 1),
  4452.         fadeIn: {
  4453.           opacity: 'show'
  4454.         },
  4455.         fadeOut: {
  4456.           opacity: 'hide'
  4457.         },
  4458.         fadeToggle: {
  4459.           opacity: 'toggle'
  4460.         }
  4461.       }, function (a, b) {
  4462.         f.fn[a] = function (a, c, d) {
  4463.           return this.animate(b, a, c, d)
  4464.         }
  4465.       }),
  4466.       f.extend({
  4467.         speed: function (a, b, c) {
  4468.           var d = a && typeof a == 'object' ? f.extend({
  4469.           }, a)  : {
  4470.             complete: c || !c && b || f.isFunction(a) && a,
  4471.             duration: a,
  4472.             easing: c && b || b && !f.isFunction(b) && b
  4473.           };
  4474.           d.duration = f.fx.off ? 0 : typeof d.duration == 'number' ? d.duration : d.duration in f.fx.speeds ? f.fx.speeds[d.duration] : f.fx.speeds._default;
  4475.           if (d.queue == null || d.queue === !0) d.queue = 'fx';
  4476.           d.old = d.complete,
  4477.           d.complete = function (a) {
  4478.             f.isFunction(d.old) && d.old.call(this),
  4479.             d.queue ? f.dequeue(this, d.queue)  : a !== !1 && f._unmark(this)
  4480.           };
  4481.           return d
  4482.         },
  4483.         easing: {
  4484.           linear: function (a) {
  4485.             return a
  4486.           },
  4487.           swing: function (a) {
  4488.             return - Math.cos(a * Math.PI) / 2 + 0.5
  4489.           }
  4490.         },
  4491.         timers: [
  4492.         ],
  4493.         fx: function (a, b, c) {
  4494.           this.options = b,
  4495.           this.elem = a,
  4496.           this.prop = c,
  4497.           b.orig = b.orig || {
  4498.           }
  4499.         }
  4500.       }),
  4501.       f.fx.prototype = {
  4502.         update: function () {
  4503.           this.options.step && this.options.step.call(this.elem, this.now, this),
  4504.           (f.fx.step[this.prop] || f.fx.step._default) (this)
  4505.         },
  4506.         cur: function () {
  4507.           if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null)) return this.elem[this.prop];
  4508.           var a,
  4509.           b = f.css(this.elem, this.prop);
  4510.           return isNaN(a = parseFloat(b)) ? !b || b === 'auto' ? 0 : b : a
  4511.         },
  4512.         custom: function (a, c, d) {
  4513.           function h(a) {
  4514.             return e.step(a)
  4515.           }
  4516.           var e = this,
  4517.           g = f.fx;
  4518.           this.startTime = cq || cr(),
  4519.           this.end = c,
  4520.           this.now = this.start = a,
  4521.           this.pos = this.state = 0,
  4522.           this.unit = d || this.unit || (f.cssNumber[this.prop] ? '' : 'px'),
  4523.           h.queue = this.options.queue,
  4524.           h.elem = this.elem,
  4525.           h.saveState = function () {
  4526.             f._data(e.elem, 'fxshow' + e.prop) === b && (e.options.hide ? f._data(e.elem, 'fxshow' + e.prop, e.start)  : e.options.show && f._data(e.elem, 'fxshow' + e.prop, e.end))
  4527.           },
  4528.           h() && f.timers.push(h) && !co && (co = setInterval(g.tick, g.interval))
  4529.         },
  4530.         show: function () {
  4531.           var a = f._data(this.elem, 'fxshow' + this.prop);
  4532.           this.options.orig[this.prop] = a || f.style(this.elem, this.prop),
  4533.           this.options.show = !0,
  4534.           a !== b ? this.custom(this.cur(), a)  : this.custom(this.prop === 'width' || this.prop === 'height' ? 1 : 0, this.cur()),
  4535.           f(this.elem).show()
  4536.         },
  4537.         hide: function () {
  4538.           this.options.orig[this.prop] = f._data(this.elem, 'fxshow' + this.prop) || f.style(this.elem, this.prop),
  4539.           this.options.hide = !0,
  4540.           this.custom(this.cur(), 0)
  4541.         },
  4542.         step: function (a) {
  4543.           var b,
  4544.           c,
  4545.           d,
  4546.           e = cq || cr(),
  4547.           g = !0,
  4548.           h = this.elem,
  4549.           i = this.options;
  4550.           if (a || e >= i.duration + this.startTime) {
  4551.             this.now = this.end,
  4552.             this.pos = this.state = 1,
  4553.             this.update(),
  4554.             i.animatedProperties[this.prop] = !0;
  4555.             for (b in i.animatedProperties) i.animatedProperties[b] !== !0 && (g = !1);
  4556.             if (g) {
  4557.               i.overflow != null && !f.support.shrinkWrapBlocks && f.each(['',
  4558.               'X',
  4559.               'Y'], function (a, b) {
  4560.                 h.style['overflow' + b] = i.overflow[a]
  4561.               }),
  4562.               i.hide && f(h).hide();
  4563.               if (i.hide || i.show) for (b in i.animatedProperties) f.style(h, b, i.orig[b]),
  4564.               f.removeData(h, 'fxshow' + b, !0),
  4565.               f.removeData(h, 'toggle' + b, !0);
  4566.               d = i.complete,
  4567.               d && (i.complete = !1, d.call(h))
  4568.             }
  4569.             return !1
  4570.           }
  4571.           i.duration == Infinity ? this.now = e : (c = e - this.startTime, this.state = c / i.duration, this.pos = f.easing[i.animatedProperties[this.prop]](this.state, c, 0, 1, i.duration), this.now = this.start + (this.end - this.start) * this.pos),
  4572.           this.update();
  4573.           return !0
  4574.         }
  4575.       },
  4576.       f.extend(f.fx, {
  4577.         tick: function () {
  4578.           var a,
  4579.           b = f.timers,
  4580.           c = 0;
  4581.           for (; c < b.length; c++) a = b[c],
  4582.           !a() && b[c] === a && b.splice(c--, 1);
  4583.           b.length || f.fx.stop()
  4584.         },
  4585.         interval: 13,
  4586.         stop: function () {
  4587.           clearInterval(co),
  4588.           co = null
  4589.         },
  4590.         speeds: {
  4591.           slow: 600,
  4592.           fast: 200,
  4593.           _default: 400
  4594.         },
  4595.         step: {
  4596.           opacity: function (a) {
  4597.             f.style(a.elem, 'opacity', a.now)
  4598.           },
  4599.           _default: function (a) {
  4600.             a.elem.style && a.elem.style[a.prop] != null ? a.elem.style[a.prop] = a.now + a.unit : a.elem[a.prop] = a.now
  4601.           }
  4602.         }
  4603.       }),
  4604.       f.each(cp.concat.apply([], cp), function (a, b) {
  4605.         b.indexOf('margin') && (f.fx.step[b] = function (a) {
  4606.           f.style(a.elem, b, Math.max(0, a.now) + a.unit)
  4607.         })
  4608.       }),
  4609.       f.expr && f.expr.filters && (f.expr.filters.animated = function (a) {
  4610.         return f.grep(f.timers, function (b) {
  4611.           return a === b.elem
  4612.         }).length
  4613.       });
  4614.       var cv,
  4615.       cw = /^t(?:able|d|h)$/i,
  4616.       cx = /^(?:body|html)$/i;
  4617.       'getBoundingClientRect' in c.documentElement ? cv = function (a, b, c, d) {
  4618.         try {
  4619.           d = a.getBoundingClientRect()
  4620.         } catch (e) {
  4621.         }
  4622.         if (!d || !f.contains(c, a)) return d ? {
  4623.           top: d.top,
  4624.           left: d.left
  4625.         }
  4626.          : {
  4627.           top: 0,
  4628.           left: 0
  4629.         };
  4630.         var g = b.body,
  4631.         h = cy(b),
  4632.         i = c.clientTop || g.clientTop || 0,
  4633.         j = c.clientLeft || g.clientLeft || 0,
  4634.         k = h.pageYOffset || f.support.boxModel && c.scrollTop || g.scrollTop,
  4635.         l = h.pageXOffset || f.support.boxModel && c.scrollLeft || g.scrollLeft,
  4636.         m = d.top + k - i,
  4637.         n = d.left + l - j;
  4638.         return {
  4639.           top: m,
  4640.           left: n
  4641.         }
  4642.       }
  4643.        : cv = function (a, b, c) {
  4644.         var d,
  4645.         e = a.offsetParent,
  4646.         g = a,
  4647.         h = b.body,
  4648.         i = b.defaultView,
  4649.         j = i ? i.getComputedStyle(a, null)  : a.currentStyle,
  4650.         k = a.offsetTop,
  4651.         l = a.offsetLeft;
  4652.         while ((a = a.parentNode) && a !== h && a !== c) {
  4653.           if (f.support.fixedPosition && j.position === 'fixed') break;
  4654.           d = i ? i.getComputedStyle(a, null)  : a.currentStyle,
  4655.           k -= a.scrollTop,
  4656.           l -= a.scrollLeft,
  4657.           a === e && (k += a.offsetTop, l += a.offsetLeft, f.support.doesNotAddBorder && (!f.support.doesAddBorderForTableAndCells || !cw.test(a.nodeName)) && (k += parseFloat(d.borderTopWidth) || 0, l += parseFloat(d.borderLeftWidth) || 0), g = e, e = a.offsetParent),
  4658.           f.support.subtractsBorderForOverflowNotVisible && d.overflow !== 'visible' && (k += parseFloat(d.borderTopWidth) || 0, l += parseFloat(d.borderLeftWidth) || 0),
  4659.           j = d
  4660.         }
  4661.         if (j.position === 'relative' || j.position === 'static') k += h.offsetTop,
  4662.         l += h.offsetLeft;
  4663.         f.support.fixedPosition && j.position === 'fixed' && (k += Math.max(c.scrollTop, h.scrollTop), l += Math.max(c.scrollLeft, h.scrollLeft));
  4664.         return {
  4665.           top: k,
  4666.           left: l
  4667.         }
  4668.       },
  4669.       f.fn.offset = function (a) {
  4670.         if (arguments.length) return a === b ? this : this.each(function (b) {
  4671.           f.offset.setOffset(this, a, b)
  4672.         });
  4673.         var c = this[0],
  4674.         d = c && c.ownerDocument;
  4675.         if (!d) return null;
  4676.         if (c === d.body) return f.offset.bodyOffset(c);
  4677.         return cv(c, d, d.documentElement)
  4678.       },
  4679.       f.offset = {
  4680.         bodyOffset: function (a) {
  4681.           var b = a.offsetTop,
  4682.           c = a.offsetLeft;
  4683.           f.support.doesNotIncludeMarginInBodyOffset && (b += parseFloat(f.css(a, 'marginTop')) || 0, c += parseFloat(f.css(a, 'marginLeft')) || 0);
  4684.           return {
  4685.             top: b,
  4686.             left: c
  4687.           }
  4688.         },
  4689.         setOffset: function (a, b, c) {
  4690.           var d = f.css(a, 'position');
  4691.           d === 'static' && (a.style.position = 'relative');
  4692.           var e = f(a),
  4693.           g = e.offset(),
  4694.           h = f.css(a, 'top'),
  4695.           i = f.css(a, 'left'),
  4696.           j = (d === 'absolute' || d === 'fixed') && f.inArray('auto', [
  4697.             h,
  4698.             i
  4699.           ]) > - 1,
  4700.           k = {
  4701.           },
  4702.           l = {
  4703.           },
  4704.           m,
  4705.           n;
  4706.           j ? (l = e.position(), m = l.top, n = l.left)  : (m = parseFloat(h) || 0, n = parseFloat(i) || 0),
  4707.           f.isFunction(b) && (b = b.call(a, c, g)),
  4708.           b.top != null && (k.top = b.top - g.top + m),
  4709.           b.left != null && (k.left = b.left - g.left + n),
  4710.           'using' in b ? b.using.call(a, k)  : e.css(k)
  4711.         }
  4712.       },
  4713.       f.fn.extend({
  4714.         position: function () {
  4715.           if (!this[0]) return null;
  4716.           var a = this[0],
  4717.           b = this.offsetParent(),
  4718.           c = this.offset(),
  4719.           d = cx.test(b[0].nodeName) ? {
  4720.             top: 0,
  4721.             left: 0
  4722.           }
  4723.            : b.offset();
  4724.           c.top -= parseFloat(f.css(a, 'marginTop')) || 0,
  4725.           c.left -= parseFloat(f.css(a, 'marginLeft')) || 0,
  4726.           d.top += parseFloat(f.css(b[0], 'borderTopWidth')) || 0,
  4727.           d.left += parseFloat(f.css(b[0], 'borderLeftWidth')) || 0;
  4728.           return {
  4729.             top: c.top - d.top,
  4730.             left: c.left - d.left
  4731.           }
  4732.         },
  4733.         offsetParent: function () {
  4734.           return this.map(function () {
  4735.             var a = this.offsetParent || c.body;
  4736.             while (a && !cx.test(a.nodeName) && f.css(a, 'position') === 'static') a = a.offsetParent;
  4737.             return a
  4738.           })
  4739.         }
  4740.       }),
  4741.       f.each({
  4742.         scrollLeft: 'pageXOffset',
  4743.         scrollTop: 'pageYOffset'
  4744.       }, function (a, c) {
  4745.         var d = /Y/.test(c);
  4746.         f.fn[a] = function (e) {
  4747.           return f.access(this, function (a, e, g) {
  4748.             var h = cy(a);
  4749.             if (g === b) return h ? c in h ? h[c] : f.support.boxModel && h.document.documentElement[e] || h.document.body[e] : a[e];
  4750.             h ? h.scrollTo(d ? f(h).scrollLeft()  : g, d ? g : f(h).scrollTop())  : a[e] = g
  4751.           }, a, e, arguments.length, null)
  4752.         }
  4753.       }),
  4754.       f.each({
  4755.         Height: 'height',
  4756.         Width: 'width'
  4757.       }, function (a, c) {
  4758.         var d = 'client' + a,
  4759.         e = 'scroll' + a,
  4760.         g = 'offset' + a;
  4761.         f.fn['inner' + a] = function () {
  4762.           var a = this[0];
  4763.           return a ? a.style ? parseFloat(f.css(a, c, 'padding'))  : this[c]()  : null
  4764.         },
  4765.         f.fn['outer' + a] = function (a) {
  4766.           var b = this[0];
  4767.           return b ? b.style ? parseFloat(f.css(b, c, a ? 'margin' : 'border'))  : this[c]()  : null
  4768.         },
  4769.         f.fn[c] = function (a) {
  4770.           return f.access(this, function (a, c, h) {
  4771.             var i,
  4772.             j,
  4773.             k,
  4774.             l;
  4775.             if (f.isWindow(a)) {
  4776.               i = a.document,
  4777.               j = i.documentElement[d];
  4778.               return f.support.boxModel && j || i.body && i.body[d] || j
  4779.             }
  4780.             if (a.nodeType === 9) {
  4781.               i = a.documentElement;
  4782.               if (i[d] >= i[e]) return i[d];
  4783.               return Math.max(a.body[e], i[e], a.body[g], i[g])
  4784.             }
  4785.             if (h === b) {
  4786.               k = f.css(a, c),
  4787.               l = parseFloat(k);
  4788.               return f.isNumeric(l) ? l : k
  4789.             }
  4790.             f(a).css(c, h)
  4791.           }, c, a, arguments.length, null)
  4792.         }
  4793.       }),
  4794.       a.jQuery = a.$ = f,
  4795.       typeof define == 'function' && define.amd && define.amd.jQuery && define('jquery', [
  4796.       ], function () {
  4797.         return f
  4798.       })
  4799.     }) (window);
  4800.   }) ();
  4801.   if (typeof GM_xmlhttpRequest !== 'undefined') {
  4802.     function GM_XHR() {
  4803.       this.type = null;
  4804.       this.url = null;
  4805.       this.async = null;
  4806.       this.username = null;
  4807.       this.password = null;
  4808.       this.status = null;
  4809.       this.headers = {
  4810.       };
  4811.       this.readyState = null;
  4812.       this.abort = function () {
  4813.         this.readyState = 0;
  4814.       };
  4815.       this.getAllResponseHeaders = function (name) {
  4816.         if (this.readyState != 4) return '';
  4817.         return this.responseHeaders;
  4818.       };
  4819.       this.getResponseHeader = function (name) {
  4820.         var regexp = new RegExp('^' + name + ': (.*)$', 'im');
  4821.         var match = regexp.exec(this.responseHeaders);
  4822.         if (match) {
  4823.           return match[1];
  4824.         }
  4825.         return '';
  4826.       };
  4827.       this.open = function (type, url, async, username, password) {
  4828.         this.type = type ? type : null;
  4829.         this.url = url ? url : null;
  4830.         this.async = async ? async : null;
  4831.         this.username = username ? username : null;
  4832.         this.password = password ? password : null;
  4833.         this.readyState = 1;
  4834.       };
  4835.       this.setRequestHeader = function (name, value) {
  4836.         this.headers[name] = value;
  4837.       };
  4838.       this.send = function (data) {
  4839.         this.data = data;
  4840.         var that = this;
  4841.         // http://wiki.greasespot.net/GM_xmlhttpRequest
  4842.         GM_xmlhttpRequest({
  4843.           method: this.type,
  4844.           url: this.url,
  4845.           headers: this.headers,
  4846.           data: this.data,
  4847.           onload: function (rsp) {
  4848.             // Populate wrapper object with returned data
  4849.             // including the Greasemonkey specific "responseHeaders"
  4850.             for (k in rsp) {
  4851.               that[k] = rsp[k];
  4852.             }
  4853.             // now we call onreadystatechange
  4854.  
  4855.             that.onreadystatechange();
  4856.           },
  4857.           onerror: function (rsp) {
  4858.             for (k in rsp) {
  4859.               that[k] = rsp[k];
  4860.             }
  4861.           }
  4862.         });
  4863.       };
  4864.     };
  4865.   } else {
  4866.     GM_XHR = XMLHttpRequest;
  4867.   }
  4868.   $.ajaxSetup({
  4869.     dataType: 'xml',
  4870.     type: 'GET',
  4871.     xhr: function () {
  4872.       return new GM_XHR();
  4873.     }
  4874.   })
  4875.   ////////////////////////
  4876.   //  JQUERY ENDS HERE  //
  4877.   ////////////////////////
  4878.   var images = {
  4879.     'add': {
  4880.       size: 16,
  4881.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAQRJREFUOE+VkD2qg0AQgIUE3kU8QaqQO+SBWOoBhBxA8AjaiELwD0QFCwvBwkJQEES8woN3hhQpQsqJI9kgRnFd+JidYfbbnWWY9+q6DhCSb45t2wKy+WDTNDAHtaiua5iDWkAaq6oCZHyQ5/lTWZZDHRFF8bwoLooCkHFDEARDjYD5lpft8zyHKb1gRyvZZ1kGU1iW/aEVMJZlQZqmHzDf8gJGluVrkiRAUBQlpL49iiKI4/gLXdfvqxLHcSAMw0U0TftflAiC8Ov7Ppim+cQ4xbbtoSZJ0mVWoqrqn+d5gPO7rgu4H9P/Q4R5P8ptVmAYxgNH4DjugHFKXz+S2upf0DS8AGr8Gl3H9KpeAAAAAElFTkSuQmCC'
  4882.     },
  4883.     'chat': {
  4884.       size: 16,
  4885.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIxJREFUeNpi/P//PwMlgBFkQHFxcXtoaGgFKRpXr17d3tvbWwU24NixY2Q5w8rKipEFxPj79y/ZXgAb8OfPnxFvwO/fvwfOBUwgYs+ePYkgQ0jBID3wlGhtbY3ThvT0dHgimzlzJiOy3NGjRyFewAdg3ps7dy4jzjDAB0CpdMGCBYx4MxPFuZESABBgAGjWbAUa0fApAAAAAElFTkSuQmCC'
  4886.     },
  4887.     'tradeoffer': {
  4888.       size: 16,
  4889.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAYxJREFUOE+lUj1LA0EU1PgRFAStIohgML2FNoIgKFxplU47LcTaUrSz0coPUK60CkSE3O57ewqioNj5A0S0EUWwMpLKqLPh3maDKQwWw72dmTe7b2/bgiD4F5qSraApyRz1M9O40brX57HOMB93+5wrBMxqzBgqGNIrfgARDRimA8N6iTlMCe81FlJMejY2/B4zXYZh2C5asVjsQPMutE/gDfWCaF6AHsXONzBUsfuy8DaISeXBV4BvCwQ84kTZhgBDtA7xC3iFYdrxTHPgnqRZAP6KSOfqAUwXifiAC5ywHGbtxMw7GOnMGL53zbZmgk0v2sbNmPkQKCeGMsQTYA9Hn5ENsN5I9Kq9SOERoFdBfiSiA4LPETAiRqy3E+2ZiaZcgFIqDXENgp1fmu+MUkNiSgKuaxrRfhRFPS6gJirVhyOeJgEvqPNisMDbyIGv4C/d4m00BNdNWmcNrgXfef8NYIxh7HoEbMVEGeEFrrBN+Lc5HK/LNxhWg8idLJVKaZ8X/CJaRVPy7wjafgD/D6tStVb0QQAAAABJRU5ErkJggg=='
  4890.     },
  4891.     'rep-refresh': {
  4892.       size: 16,
  4893.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAmxJREFUOE+tU79LqlEYbpC73KXlBkVwK7hLQ0PupiZEYhnpkCFoQuCg1JD5SVEYaPZLP+2XQkmlfQ7WoNWSP9IUhzjQ1tTWX+DQfO7zCn1YxJ3ugYfzPu/7fM97zvnO6ej4HyMUCiW2trbYV1A+EAj0AX+A7oWFhR/f9kPRCjAM3mg0Wnh6euKUq9frI3d3d+azs7NJGI5ubGx0f2vi9/sDKDL6uFAo8FqtxolXKhV1qVRyIeeGmXtzc9O2srIy8MnE6/X2rK+vPxSLRZ7L5fjj4yOneHV1lfl8PqUoikI+n4/e3NyI5XJZRDNhcXGxUzbxeDyu4+Pjt6urK47lcnBWrVZbM4kwDwOh6+vrfDabvT06OpLAJ2QDHI6UTqffJUni2Ocr+AHACB8ixHos/x66F+AZfFc2cDqdLJPJcBQ4xVTAbAUS7XsFr6ZSqSYaNSmWa3Nzc9Xz8/Pm6elpk+L2j+x2e8Jms1kp53A4WDKZ5BcXF5xiWWexWHZjsdgz8LK0tHQ/MzOj/yjOzs4yAjQHqL3u7+9z4B1ckg1MJtPE8vKytLe3d4sTz4OHpqamhklgNpvZ5eUlpzkej/NwOMwFQXiDxiUbqNXqzunpaSGRSIjb29vizs5OdH5+XtDr9UqDwcAODw/5yckJHTCnGOYP4+PjPZ/ugk6nGzAajTb8TjeEbpi4IpGIemxsjNGyg8EgRwNOHAh8exsHBwe7URxF98m1tTUzDEa0Wi2DKY9Goy3QSiin0WhaB9s+foL0KRQKZVdXl6q/v3+0t7dXMzQ0JKlUKvYVyKeg/91uQC+Nric9Ftrfv0CaX6T/CwlcZmnfU+4xAAAAAElFTkSuQmCC'
  4894.     },
  4895.     'rep-none': {
  4896.       size: 16,
  4897.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAApdJREFUOE99U0tIomEUNaUHQxAx4YzgxoXLFkEFgS1mhBnaiIK0ch7QomVQi1wZQbs0ITVR8JH4IrHStNIeRqJWTkIZRCkymyAIAiMiCLrznQ+Cppr54cDl3Pf57i8QvP4aGhsb38diMdPl5eVvYHl52QSOhTa8Ef8X1axWq/sKhULm5uaGisUiR71ep1wul1GpVH0suvllEVR9p1QqewKBgKtSqdzWajXyer00NzfHAfvs7IyOjo5unU6nq7+/vwc5fCKFQtEdDodTpVLprlwuExud7HY7MY5WV1c5YINbWFignZ0dSiaTd2azOdXV1dUt6O3t/ba2tkYej4esViv5fD5iO1MqlaLNzU0O2ODgs1gsNDs7S5OTkySXy78LxGLxl8XFxUebzUbBYJDi8Til02neaXd3lwM2isCHmOnpaRobG3tsa2v7KhCJRJ1ut/t6fn6ej8rGo+3tbcrn87S3t0dMUG6Dgw8xMzMzNDw8fC0UCjshqHhqaqrIpqBQKMR3Rleof3h4yAEbHHyIMRqNNDg4+Au5KNCk0+ks6+vrfDx0yWazxESF6nR8fMxtcPAhhjUkJr4FuSjQIJFIBqLR6D2Ewp7YGZ2fCsAGhxfy+/3Y/769vX3g+WF9nJiYyGYyGVpaWuKCYe/9/X0OdkScgw/PqdVqsyz5w/ODErE3HWLP+bCxsUErKyuvnhEcdDIYDA8ymWyIJYteXqRkfHw8DeVxF1gFSQDsRCJBDoeDNBpNmiVK3vonhGyvzy6X6+Lk5IS2trb4zgDuAgVGR0cvWltbP7Fk4b9+qiZ2XT8jkchVtVql8/NzOj09pYODAzKZTFdSqfTHk/L/+ytbOjo61Hq9PsdEq7Ni9ZGRkRybTs2SWl4m/gHsyAUo5crybgAAAABJRU5ErkJggg=='
  4898.     },
  4899.     'rep-trusted': {
  4900.       size: 16,
  4901.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAvpJREFUOE99k3tIU3EUx393Y3OEUEuzLSRYMQtsiK9K8lEZhRW4zAp6lwjaIs1HWW7aWLZRalKWL8zsMZpu2WZaVmSxprOkzD8qMEEIwUgtQyQI9u3craDM+l0+8Lvnd77fezm/cxj7e3EikSjAbreXjXwcGeLh93yMUrkZ8v8I+am3qGPcbnfn2NcxXHM3ehmdGEVXl6szOTk5hrL9ppvwrrMS1yVGm803698PDkz2DLgRdSkKrJyBlTFEXorEszdOvO7vm6yrq62Pj4+L5jXeP4qNWxV1y2LueNnXO/X01RMcvHoQEr0ErIbEDsJOVDP4nfLDrppduP3Ihrb2u1PnK8o7IiLCo9iKlcv33OtoxWb9JogzxWA6ElwmbEQn8ZiwEpWElkGUIUJCbjz0hmKEhCj3sqCgeettdyyexZpFYHmUdI64TnQQ3T64Vg6F7kKEVoeC5TLID8iQm3/UM3vO7A1MKBSq6q/Wjq8uSgA7RsmlHALMAWBOEr/2GRj6DfB4PNC0acDyGVSaZcjITB8XCAQqvqBBp8/oXxyuOuR1z7uXh8Evg1j4cCHYSwZdnw4eerQura+olLMxPwnbd6T28lreQLx7786LjY4rEOYIoahQYOjzEAbGB2B6bgK/9D16sCYSk4EgR4AjRYdBxb/Ia3kDTi6XJVlbLN8iTRFgJQzKBiU+fPngFRu7jb5i8gZ0tqQwBDl52d+k0jlJvzeWrFivc5a2nAWn48CqGJbeWIqix0XgHtI7X1CK8WfpxjSkbktxknj+7w0lpDtNa7vv+B5XGev9krcP+Nuw/NxTLNwYDm3xye+KRYo0Egund6T8eEH+g1anHQtMC8AMJDz7E9rLSmQoqTQgZav6AQnlM82EQDpXura+oW74fm87wi6E+ZqKUFWoUGOtQk5u9rC/v/8aEgv+NVRipVK5v9nW9Ond+7do72tHa68DXc9dKCsv/RQcHLzvV+X/N5WSwMBAdcGJAlfLndsTzdbmiaysIy6pVKomkWS68AeAb4YNorLG6wAAAABJRU5ErkJggg=='
  4902.     },
  4903.     'rep-caution': {
  4904.       size: 16,
  4905.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAvxJREFUOE99U3tI01EYvdvQSQi6NNtCUAP9KwnNHpIaZRTSH6439CaJHvSwTLSiRAyjSBOKTIc9rKQ5H5sr11a2bLmZs9QeVD5qCytDnU9UGnj67k8CM+sHBz7Od8753fvdexn7+xN5eHj46XS6nK4fXQ4OXnOOpKJp9H9QUuVaZXR9fb15eLAXrY23BAwN9sBqrTMnJiZGk1o6NYSnzohfGb+wpORuUXtH2/C3z/WwFUeh8RoTYCteAGerBS2vm4dVqsKiuLjYhdwjrCgmdmnUPXWJ8VVz48jHt0/xUr8b9kIvdGoYRo0MIwReNxRIYS3bCmttOR5U3x+5lJdrjIyMiGKLlyzabjDq8bh4DWz5nmi/y9CrZxh7wqC9MBMV5/2EmnNt1LNe9UDllThkZmUgLCx0BwsImLWqXKser7k2F041Q381/dXM8PMFw6m9QUjfEyzUnOM9rtHnyJGSenTcx9dnNZNIJOFFNwtdljvL0FnGMGiipdsY3G8o4AAF7KWA1xMc73GNNm8e9u3f4xKLxeF8oAFnszPtz7UH8KWURI9J/JIC2hhOHwrCSQpxt05wvOckze3cBGzavKGRe3mA57YdWy6bTdfhKJWg/xGJmynAyaA6PxsF5+RwO4hroi1Qz6EW42L2QdDwL3MvDxApFPKE8kr1WLs+Ei4D7ddOMyCT0yKF85kUPz8R18Dgohk0l4Qh5XjymEzmmzD5YskzMk9bWmovoEcvwtBTOgWaQdq+YAGjNAPO8Z66IAkbNq6zkHn25AsloTNNMhir3N9rYtBPqxiqZXir9hLAzZxr1UXgTMZJd8jckCQyS6beSEVaeqqpqUEHl2mOcGQDDyfA626DHDdVWVi3Xmkio2K6NyGWzZStKLqh+trxrhp95vnou88E9NSE48mDfBxLSf7q7e29nMzifz0qz9DQ0F2a8tLujo73+N5ejc4PVbDb65CTe7E7MDBw5+/J/+9Vevn7+yvTT6TXVWorBjRlmoEjRw7XyWQyJZm8php/AX4JzObL+rzzAAAAAElFTkSuQmCC'
  4906.     },
  4907.     'rep-scammer': {
  4908.       size: 16,
  4909.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAvZJREFUOE99U21Ik1EUfve+7oMQdGW2iX+UZn8aos5K8gMzCpFwmRWUWSRFRaVpkiZ+pVjENk37IG3mR1s5m3O6uSaRxZo6k1BBhzihIkObCqaIIOx07huBmXXg4T2c53nOvfe891LU38HhcrlbjEajcnpm+hMByUkNpZwN9H+U+PLD8qj+/v6exbk5GG1qZPFjbhZ6e+09ycnJUajmr29Cum5K2J8QqdVq1K7JiaXPjn4wy2TwmqJYmCIiYOK9DYZHhpbq6mrVsbExkcTD7ig6Zq/sRYvW+nFocHnY9haMGWdBKxDAABpnEW6EA6Hh80GXdhLeGPRg7jItV1aprOHhYTJq955dpyzWTlAeSoJyHg+aUPwOvy6aA0scChYRLg4Hery8oBG5Mi4XSuJiobSsGEJCJOmUv//WA/r2Fk/h9mCoQYERzW6zGb4pFDDNZWDGi4YvBQXw3WSCduSIJlssgpzcax4fX5+DFMMwUnVD7bwyPg4eINmJK7vQTGJSpYDxwgIAj4etdSB3HzX50p1w4eK5eZqmpWSg/uUVpR8arlyCaiTNuOUBHgNONLOBZmelEhxYMyF3DzVFSYlw7HjqIPGSBry09BM1nc31UMkw0I4iB5+BkVslrJnEKDboxZoBORVNQ0nmZcDh42koHmnAEYtFiXpDy4o6Ihw0KBi7c5s1j1arWJBwKhXwDLmqHSGQcz1rRSj0TVx7sUTFpYU2i+ouqPF3fcUhunBV52Y+C5KT2hPkKs9nQOrRFBuat629UAz+0wyLpWNVFxMNWpz2K5x+H+8XLJiTWn1YGBQV3VwNCg7KQDOz/kaKb+TldtvNRtAEBMBzHFYbnplAi3mzSAQPK8og5Yi8G43ijd4ELdws3Kd+Wjc1ZO0CfWgoNKCRQCeVgvHxI8jOyZry9vaORzP9r0fFk0gkZ1r1Ordr3Aljli4Y6ewAR58dlCqFOzAw8PTvyf/vVQr8/Pzkefl5dkN720Lry9aFzMyrdqFQKEeTYL3xJ7+UoC00wgMtAAAAAElFTkSuQmCC'
  4910.     },
  4911.     'icon-offline': {
  4912.       size: 12,
  4913.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAdRJREFUKFNVUV1vElEQ3Sfb+ton0WBpBKN1gQZtCkuTxVYWN1BYtk2XzfJRgd2F2i7KR6nRKBXTpIn+Lo1piE20P6VWH45zL/rgTSb35Jy5M3PuCMLfEwjcm0km1f1EIvNVktSr+Gr61/Ly2pn4YPWl78bC3L88fqdS+ZsbG1sTJW0gm61gM1fjwXBKLiAaTX4PBcO3efLi4tI1RSlNVLWM/GYdmtaEXnR5MJzP10E6ohHpx/y8b05QFOO5qlpc2NJdGMYB6vXXaDTeEPY4VyBNpk5L9x8NhIxS+pyj9nrRQankoVY7Qrf7Eb3+J+zuvuKcrjvIZWsIi/FzIZMxL1mF7e02LKsLxx1hODzB8OgELmHL6pG2h0KhgYcx+bdARi81zYaxs49qdYB2e8yTWbT3xsQdknaAYtGePkjJ2hdmzjQ7NM6QOhzD807hdU6pwzHnTPMFfYA9HYn9PflAudzDM5rZtt+h1RrzTgwzrlzuY/2xzkwfCn5/cEaSnn5jPprNt2i57yn5Aw+GbeKYFgknLu6GxOt8F7TNWysr6+dscZXKAI49guOMUCWcfrJDydJFKBhZ+G/bPl9glqp0aEFnZO5nLCZfiWJ8QmP0/f4708p0/gDSQPFCeLYFdgAAAABJRU5ErkJggg=='
  4914.     },
  4915.     'icon-online': {
  4916.       size: 12,
  4917.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAhBJREFUKFNVkV1Ik3EUxg9r+m571+u6qPwg29KMzbndRArNkqgoYSOnwQgWpKNBoyWJoTdt5UdaFhl5FYUiBhl9zC7aCJZdZE0bZe+C+VFJu65obk034+nPVkEHfnD4n+c5fw4P0d+q2JdPhzynqO7sK6pt/UnVjhRp60OkMbmlys3cP122MfcVk+1WeP3xUezyvMCRm2/RwKj2TEKw9EBSXveeCnVbciatOZ9aHoSFkz4YLk5jz2AUTcMxHB2JYe/gHIxdMyiwj4C2mUQqKJFRnvOJa12zD5vaX6Js4DNs/gT6P6RxmXEskED5tSU2m4L04AVQibGNyPH4tczph+ARseP+D7TNryKw/AvPGOcW09A+jEPwRiBzPgVtrXlH1PIoJT8dhLJrAaW+BE58WcFoeg1jmTU4YqtQTySh7F6Ewj0J0lnSRPa7K3J3ELxnHqo7cVTNJmFNptDIMIhJqIaXwXsXoDjDDJWWDFHjjRnO5WcGEfz1rxDuxbFxKocwHmdv39gsAs4VAKlrRKLD3laJ7Tb48yHwfR/BDzEB+ynL0Hfw/Z+YIQRJfTc72tBBMt0BGQtLlDrGwfe8AX8lyrYu5RhgfW8Yec1jIM3u6Aa1ns9lYbSW0k57RNJwFVxnEIpL01m4zueQmHuZ2DRHhZWa/9Mu0supYn87Y5aqmtKkt2akZbUiFRs7VEXb/2wm+g3puxEZeVHQBwAAAABJRU5ErkJggg=='
  4918.     },
  4919.     'icon-in-game': {
  4920.       size: 12,
  4921.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAgRJREFUKFNVkV1Ik3EUxs/ejb2bf33pohUul1FrGU1LiOxjJOSQPgwaaJG6CytBmNpo0ZUbbo2irUD0soahUFEXalGL6BMKp4s1NdI07OO+qLe5V6V4+u9dXXTgxzk85znnXByiv2GtJX1NN3kcPhrd7aXs9lOkbDpIiXUO6igwCeI/n5r3R8nsilGqabAIgec70Jc6ohJ4VoVDYQnrq4X0ajuVqGZ7A+kbhyh1ckRCcKwCPdN70f+lHtc5PTPVCI5XoLFfAr80UWAikZrvkcc9ooXvpQnR+Q2IZ47h7fIlTgQPM8dx+aMVvlcmOANarKnUnqbmu5RojRvgn5Rw+7sNs0s+yL8f4Sdnbuks7vwoU3ut9w2wVFGSmoZJ8TwxIjhbiKHMWnxabMHyrwHOID4vnsAw10K81/7UiLI6ytLRm6S08wH/DMM1eQVSC3ZkFJfKm4VyxLgWeM/QmR9QqK6PxtriIvwTDFe+MtyQJbyQV6rk6pzmn2RoeyDCspNeU02IOhpiArpGGS7MMfRyw1U5T+83hosfGLoSDLXdAoq3kpds+/Si4wylW27pcD7JEHnHL83niUwzhLnmHtChdA9NmW2FBvUXW1xUUumm9OGogHOPRYQTRpVcfSAkcLNmatVmsvz3bS6IVid1bnRqxsvrdVm7S5ct3aVJmreRt6hYn9/M4w8uag6o3mOuowAAAABJRU5ErkJggg=='
  4922.     },
  4923.     'icon-error': {
  4924.       size: 12,
  4925.       url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAeVJREFUKFNNkU1IVGEUht/v3mvjzLWrFRP94RimRjBza5FFZmVJExRY/hT2Q4lBRASV/Syi9hpUtLJFKBQiQS2iRTmbcNMdosYmdNwUGGRGO23+bsXbuXcKOvDwvbzn/b4D3wH+1gFg0QBw7oaCc11H7oKOfJdCMg6cX6VU4F/OP+8Bq0cUUk9WLGYy3sipnoM+jug7Ky3u17WJzcAaP3wSCLyQcCJi8UNrjDMdO/j9TKfP586d4tl8XGMxriFdA5QjISMTVTpTsTDndtUy33eE7lA/3eF+5i93c65lHVP2cg4sMdgEXMSYwpvxteX8aFvMHm2gO9LH39MvhTG6o1eYPbbe772SzB6Ft0gYKDp1Qc7aFcx2VbM41MNfmYfCIxaHe5k9HOHsxgom60PsLkMBzwy4Tn2QX6ImfzRXMdcbZWGwnYX7Hcydjvqe10s2+BeKeKDwbrw2IGNNzjeaXNhtcaEtXEK0532SnpdpVZjALeDS6FKN6U0mv3oXtgstJeZFe57Xu71M4zbgKtpNM3hTw+TzaoOTW0zONJn81lzC0573NFLmfWvGtqyQv4vjQOSshqnBsMbXsQDTW0M+jui74u3TVUYWJ2v4r8QItsnIQxrenzLw84SwV5Ylf39tQ2Vl6WWpP6Fv833ycvaCAAAAAElFTkSuQmCC'
  4926.     },
  4927.     'icon-loading': {
  4928.       size: 16,
  4929.       url: 'data:image/gif;base64,R0lGODlhEAAQAPYAAP///2ZmZmZmZoyMjMDAwMHBwcTExMXFxY+Pj4qKir29vb6+vr+/v8bGxsfHx8rKypKSkomJibq6uru7u8nJycvLy83Nzbm5uczMzM/Pz9DQ0IiIiLi4uNHR0dLS0pSUlLW1tbe3t9PT09XV1dbW1tfX19jY2PHx8dvb2/39/fr6+ubm5uLi4t/f397e3t3d3aampvz8/Pb29urq6uPj4+Hh4ZmZmfv7+/j4+PX19ezs7Onp6eTk5KWlpfT09O7u7ujo6Jubm6SkpPf39+/v7+vr65ycnKKiovLy8p+fn46OjpOTk42NjcPDw5WVlZiYmNnZ2dzc3LS0tPDw8OXl5YeHh6enp6CgoKGhoZCQkJaWlp6enpqammZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiH5BAkKAAAAIf4aQ3JlYXRlZCB3aXRoIGFqYXhsb2FkLmluZm8AIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAHuYAAgoIChYaDiACFGyAggjCFiQIRFxwhjoIpPQKDAgkSlZeZMTdCnIoKE6AcmCk3KjicAgMLqaAhgjGwQ0eFBAwMtRIcACmwMjI5hQXMvwsSACrJPj5IhQbY2QYn3N0nhQcNDQ4ODxkoKzM6P0REhQgOFA8YGSIoLCs7M0VJsg8V9DqQQNGCxgogM04JgGAhQwcRJVC4YMFjhZFTiiBo8DAi4osaNIJgJCTgAwkTKF7YiJSIpKGRAAIBACH5BAkKAAAALAAAAAAQABAAAAe+gACCggKFhoOIAIUJEhccIVWFiQIDCwoTjiFSLFYCgwJMBAwLExIcUgaCMJ6KTQWiChKaP4IpngJKBwZNBKRSFrUpPYUNDQcHvBISQwApMTc3hRQUDg7GE1EAzyrchRXf4BRTKkPl5YUW6RYaHSU8Okg+OTkyhUsZ7CIkUSw7P1MnkGC51cHDCBJQXrBYMeMHkSmsBHw4aCKKCxZUdhT5cYWVIicmULxogRHIjCQeCQl4MpIFDyOSEqk0lBJAIAAh+QQJCgAAACwAAAAAEAAQAAAHuYAAgoIChYaDiACFTAwLChIRhYkCSk0FjRMSFxwbAoMCCAcGlwuZFyEhnYQODQdNBKWbIVIhngJZDxQNowsSHFJSGjhWhRYYuQ1NC7MNU58CGRnGDw0SDCuTAh3bGhkVI4Mp4imFIiIjIyQkUzg37jcxMYVOJSZQUS07Jzk4OCoqPWxBQfGiBY8dRJDkkDEEhydFTwqyoLJDxxSFMo48VGSjBo0VFYmc8KExWxCQOohckZSIkCGWgwIBACH5BAkKAAAALAAAAAAQABAAAAe2gACCggKFhoOIAIUIBwYFBAOFiQIQDw4NjgwLCgkCg5QWFRSYBQwKExIRnooaGRiWBgQLqBcXngIfHh2uDgamEhccHBuFJCMiuw8GC8AcISEghSYlJSQiGQYSziDc0QIo4OEniYQCLy8uLSwrJyopkwI2NSw0KzMnMioxKe8wtzQ8VuzQcSIHDhU39q0SEGQFkBk/TviQcfBGj1WKjMwoQkSijCE4hGAsl6QjkhxHJJFTZEjloEAAIfkECQoAAAAsAAAAABAAEAAAB7uAAIKCAoWGg4gAhUsWFRQNSoWJAk4eGo2PBk1MAoMCWiQiHRmOBwYFBAOdilAmJJYVDqcEDAudAk9RrSMdGA1NtQoKCYUuLi9RJiIUBQwKExLRhTXUNS4oLQ1SF9zchTQ0PDxUQD4AUCBSIRwchVQrQEBFRDKCMhlS6oVGOzPzSENupBCkw0CVW0V0/JjiY4iKGIhWCUiy8EQOhwIFWVml6MoJJBdx3IiRAgZHQgKwhLzRQ1IilIZOAggEACH5BAkKAAAALAAAAAAQABAAAAfBgACCggKFhoOIAIVOIh4aFlmFiQJPUCUjHRkYFRQIAoMCNi8oJpgZFQ8ODUqfijUuUaUdFqkNBwafAkE0rygkHRgUt01NTIVUVDQsLiYWDgdNBQUEBIVA1ys8LSMLBQzfCwuFM0XlOidTFxcK7OyFPz9EUz5DAFFSFxISExOFV1MnfMhQAeAGAxAc1EXIhUQgjhspAACREoIDh1YCsOQYogKioAYUF4I6gqNjRABTpGxoBUqAEI8ArEhKRMjQzEGBAAAh+QQJCgAAACwAAAAAEAAQAAAHuIAAgoIChYaDiACFNi8oJiQfhYkCQTQ1jSUjHhoQAoMCRis8LC4oJSIdGRadhDNAKzQtKCSpGBUPngJJRTM7KywoIhkYDxQOCIVERD86MysoGQ8ODg0NB4Un2donBt3eBoVIPj45MioAEgsMBAXtheUyOCopABwSCurrhUdD8jGCIS5ImIBvQC55N+gBAMFBIEFPioTciKEQRIiGEhJAVNRD4cKLFyJsJCQAhiAQIDZISkTS0EgAgQAAIfkECQoAAAAsAAAAABAAEAAAB76AAIKCAoWGg4gAhVsrPCwuT4WJAklFM0A8NS5RJk4CgwJXRD9FO5kvUCUjH5+KJyejM1Q1UaoiHZ8CRz5ISFM/QC4mtxoaEIUyMjk5vEQuHhkWGNOFQzjXOCoAUQcUD98PhSoqNzcxADgTCwYHDQ4OheUxKYIeUgsETewNhT3zglOkcFCXr4mSXPQEHZByYYICBgQKtBIAQ9AKKSEuSFDHgEkrRVZUTMCo0eGAj4QEVAnBgcOFBJISpTSEEkAgACH5BAkKAAAALAAAAAAQABAAAAe8gACCggKFhoOIAIVXP0U7K0GFiQJYJ1ONO1Q0NTYCgwJHOUgnREVAPCwtLk+eikMyolM6QJsvUSieAkIqOEM5JzorLC8oUCZahTc3KrwyRFRRUCUkJCOFMdjYKQAtIt4e4IUp24MuBxUWGRoaHZKDOwRSBAcPFRjphVYASBRSIBMMmjSgUA9CLhFSpHC4ALCAgYEPWgmoAmKhBAULCDQ50ABBK0UbLGLUaEDJR0ICIlxcwICJu0SKDL0UFAgAIfkECQoAAAAsAAAAABAAEAAAB7WAAIKCAoWGg4gAhUc5SCdESYWJAkI4QzI+j0UzRgKDAj03KjiYJz8zQCtBnoopMaI4OSc6Oys8NJ4CMAAprioyJzMrNCw1NpKIKSonKywtLi8vyIknKNbXhSDaICEcEgYZIiQlJSbZId0XEgsGDxkdIiMkhRscHOoKDAYOGO8eH7kuqJuwgMC+B/00sBIQQcKEfAUMNKBQwQIEVooSKFjAIGIDBw8uThIwgEDEAwimjTSEUVAgACH5BAkKAAAALAAAAAAQABAAAAe7gACCggKFhoOIAIU9Nyo4MkeFiQIwACkxjjI+J1cCgwJWgzE3jz5TREmeiiaDl49IRDpFngIbUgpUgikqOVM6MztGhSEhUlINU5Y+RTsrK1SFHNIcxh4yMzTZ2YUX3RISEyAHJlAvLeeF3xMTCgsFDRgjJlFRL4UJ7AsMBQYUFh7yoDyhpW9fkwYUMGgQQaKEKgEDGBBoYqDBAwwZOohwokoRE4oHHFzM+KEjIQFKGojEAEFSopOGTAIIBAAh+QQJCgAAACwAAAAAEAAQAAAHu4AAgoIChYaDiACFVgApMTdChYkCVS6Djyo4RwKDAhtSEzeCjzhDMlicihwhUh2jNzgyOUicAhEXHCAhSAAxKjI+SCdXhRISFxdSDoI4s1NEP4UT08dSQAA5zzrbhQoLCt4SDScz5eaFDOkEBU0EJS40VCsrQIVM600HDhgdUC41NHgEqdXEgL4HFjyUiPKPRSoBSvRRqJDBAwkoDLmkUoSAwgMMGiyaQPFkIyEBECyEHOFEUqKThkwCCAQAOw=='
  4930.     },
  4931.   }
  4932.   var css = [
  4933.     '.flairinfo-panel, .flairinfo-panel *, .flairinfo-imagebutton { display: inline-block; vertical-align: middle; }',
  4934.     '.flairinfo-imagebutton { padding: 0; margin: 0 }',
  4935.     '.flairinfo-actionpanel { margin-top: 1px; background-color: #444; height: 16px; margin-left: 3px; padding: 0px 1px }',
  4936.     '.flairinfo-actionpanel .flairinfo-imagebutton { vertical-align: top; margin-top: 1px; }',
  4937.     '.flairinfo-warning { line-height: 14px; margin-left: 3px; margin-bottom: 2px; }',
  4938.     '.flairinfo-sr-link { line-height: 16px; margin-left: 3px }',
  4939.     '.flairinfo-status { margin-left: 3px; padding-left: 3px; padding-right: 1px; border-left: 1px solid gray; line-height: 16px }',
  4940.     '.flair .flairinfo-shimpanel { display: none; }',
  4941.     '.flair:hover .flairinfo-shimpanel { display: inline-block; width: 120%; height: 300%; background: transparent; position: absolute; top: -100%; left: -10%; z-index: 0; overflow: visible; }',
  4942.     '.flair { position: relative; }',
  4943.   ]
  4944.   for (img in images) {
  4945.     var newcss = '.flairinfo-imagebutton.flairinfo-imagebutton-' + img + ' { ' +
  4946.     'height: ' + images[img].size + 'px; ' +
  4947.     'width: ' + images[img].size + 'px; ' +
  4948.     'margin: ' + ((16 - images[img].size) / 2) + 'px; ' +
  4949.     'background: url(' + images[img].url + ') top left no-repeat; ' +
  4950.     '}'
  4951.     css.push(newcss)
  4952.   }
  4953.   var subreddits = {
  4954.     'steamgameswap': {
  4955.       links: [
  4956.         '<a href=\'http://steamcommunity.com/profiles/$1/games/?tab=all\' title=\'Game List\'>games</a>',
  4957.         '<a href=\'http://steamcommunity.com/profiles/$1/inventory/#753\' title=\'Inventory\'>inv</a>',
  4958.         '<a href=\'http://steamcommunity.com/profiles/$1/wishlist/\' title=\'Wishlist\'>wish</a>'
  4959.       ],
  4960.       css: [
  4961.         '.flair .flairinfo-panel { display: none; }',
  4962.         '.flair:hover .flairinfo-panel, .flairinfo-refresh { display: inline-block; position: relative; top: -2px; }'
  4963.       ],
  4964.     },
  4965.     'tf2trade': {
  4966.       links: [
  4967.         '<a href=\'http://steamcommunity.com/profiles/$1/inventory/#440\' title=\'Backpack (Steam)\'>steam</a>',
  4968.         '<a href=\'http://tf2b.com/tf2/$1\' title=\'Backpack (tf2b.com)\'>tf2b</a>',
  4969.         '<a href=\'http://tf2items.com/profiles/$1\' title=\'Backpack (tf2items.com)\'>tf2items</a>',
  4970.         '<a href=\'http://backpack.tf/profiles/$1\' title=\'Backpack (backpack.tf)\'>bp.tf</a>',
  4971.       ],
  4972.       css: [
  4973.         '.flair { height: 16px !important; margin-top: 1px !important; margin-bottom: 1px !important; }',
  4974.         '.flair:hover { margin-top: 0 !important; margin-bottom: 0 !important; }',
  4975.         '.flair .flairinfo-panel { position: relative; top: -1px; }',
  4976.       ],
  4977.     },
  4978.     'dota2trade': {
  4979.       links: [
  4980.         '<a href=\'http://steamcommunity.com/profiles/$1/inventory/#570\' title=\'Inventory (Steam)\'>steam</a>',
  4981.         '<a href=\'http://tf2b.com/dota/$1\' title=\'Inventory (tf2b.com)\'>tf2b</a>',
  4982.       ],
  4983.       css: [
  4984.         '.flair { height: 16px !important; margin-top: 1px !important; margin-bottom: 1px !important; }',
  4985.         '.flair:hover { margin-top: 0 !important; margin-bottom: 0 !important; }',
  4986.         '.flair .flairinfo-panel { position: relative; top: -1px; }',
  4987.       ],
  4988.     },
  4989.     'globaloffensivetrade': {
  4990.       links: [
  4991.         '<a href=\'http://steamcommunity.com/profiles/$1/inventory/#730\' title=\'Inventory (Steam)\'>steam</a>',
  4992.         '<a href=\'http://tf2b.com/csgo/$1\' title=\'Inventory (tf2b.com)\'>tf2b</a>',
  4993.       ],
  4994.       css: [
  4995.         '.flair { height: 16px !important; margin-top: 1px !important; margin-bottom: 1px !important; }',
  4996.         '.flair:hover { margin-top: 0 !important; margin-bottom: 0 !important; }',
  4997.         '.flair .flairinfo-panel { position: relative; top: -1px; }',
  4998.       ],
  4999.     },
  5000.     'steamtradingcards': {
  5001.       links: [
  5002.         '<a href=\'http://steamcommunity.com/profiles/$1/inventory/#753_6\' title=\'Inventory (Steam)\'>steam</a>',
  5003.       ],
  5004.       css: [
  5005.         '.flair { height: 16px !important; margin-top: 1px !important; margin-bottom: 1px !important; }',
  5006.         '.flair:hover { margin-top: 0 !important; margin-bottom: 0 !important; }',
  5007.         '.flair .flairinfo-panel { position: relative; top: -1px; }',
  5008.       ],
  5009.     },
  5010.   }
  5011.   var statuses = {
  5012.     'offline': {
  5013.       color: '#535367',
  5014.       text: function (xml) {
  5015.         return $('<span/>').html($(xml).find('stateMessage').text() || 'Offline').attr('title', 'Offline')
  5016.       }
  5017.     },
  5018.     'online': {
  5019.       color: '#1d7fbb',
  5020.       text: function (xml) {
  5021.         return $('<span/>').html($(xml).find('stateMessage').text() || 'Online').attr('title', 'Online')
  5022.       }
  5023.     },
  5024.     'in-game': {
  5025.       color: '#679918',
  5026.       text: function (xml) {
  5027.         var state = $(xml).find('inGameInfo')
  5028.         if (state.length > 0) {
  5029.           var name = state.find('gameName').text()
  5030.           var join = state.find('gameJoinLink').text()
  5031.           if (join) {
  5032.             return $('<a/>').attr('href', join).attr('title', 'In-Game - Click to Join').css('color', '#8cb359').text(name)
  5033.           } else {
  5034.             return $('<span/>').attr('title', 'In-Game').text(name)
  5035.           }
  5036.         } else {
  5037.           var message = $(xml).find('stateMessage').text() || 'In-Game'
  5038.           message = message.replace(/In non-Steam game<br\/>/gim, '')
  5039.           return $('<span/>').attr('title', 'In non-Steam game').text(message)
  5040.         }
  5041.       }
  5042.     }
  5043.   }
  5044.   var sr_active_requests = {
  5045.   }
  5046.   var timestamp = new Date().valueOf()
  5047.   /* Tags earlier in the list win. */
  5048.   var sr_tag_types = [
  5049.     {
  5050.       type: 'scammer',
  5051.       phrases: [
  5052.         /\bSCAMMER\b/i
  5053.       ]
  5054.     },
  5055.     {
  5056.       type: 'caution',
  5057.       phrases: [
  5058.         /\bCAUTION\b/i
  5059.       ]
  5060.     },
  5061.     {
  5062.       type: 'trusted',
  5063.       phrases: [
  5064.         /\bADMIN\b/i,
  5065.         /\bMIDDLEMAN\b/i,
  5066.         /\bTRUSTED SELLER\b/i,
  5067.         /\bVALVE EMPLOYEE\b/i
  5068.       ]
  5069.     },
  5070.   ]
  5071.   var decodeEntities = (function () {
  5072.     // this prevents any overhead from creating the object each time
  5073.     var element = document.createElement('div')
  5074.     function decodeHTMLEntities(str) {
  5075.       if (str && typeof str === 'string') {
  5076.         // strip script/html tags
  5077.         str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim, '')
  5078.         str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim, '')
  5079.         element.innerHTML = str
  5080.         str = element.textContent
  5081.         element.textContent = ''
  5082.       }
  5083.       return str
  5084.     }
  5085.     return decodeHTMLEntities
  5086.   }) ()
  5087.   function convertSRResponse(data) {
  5088.     var tag = $(data).find('reputation').text().replace(',', '\n')
  5089.     var rep = 'none'
  5090.     /* Match rep tags against the list of tag types to find the right icon. */
  5091.     for (var i in sr_tag_types) {
  5092.       tag_type = sr_tag_types[i]
  5093.       for (var j in tag_type.phrases) {
  5094.         if (tag_type.phrases[j].test(tag)) {
  5095.           rep = tag_type.type
  5096.           break
  5097.         }
  5098.       }
  5099.     }
  5100.     return {
  5101.       'tag': tag,
  5102.       'rep': rep
  5103.     }
  5104.   }
  5105.   function switchImage(elt, newImg) {
  5106.     return elt.attr('class', 'flairinfo-imagebutton flairinfo-imagebutton-' + newImg)
  5107.   }
  5108.   /*
  5109.  * Look up data from the SteamRep API cache, refreshing data as necessary.
  5110.  * id64: (string) The steamID64 of the user to look up.
  5111.  * callback: (function (data)) A callback function to call when lookup is complete.
  5112.  */
  5113.  
  5114.   function findSRData(id64, success, error) {
  5115.     var sskey = 'steamrep-' + id64
  5116.     /* Check if we have live data in sessionStorage. */
  5117.     if (sskey in sessionStorage) {
  5118.       var cacheent = JSON.parse(sessionStorage[sskey])
  5119.       if (cacheent.exp >= timestamp) {
  5120.         /* We have live data - return it to the callback now. */
  5121.         console.log('SR cache hit for ' + id64, cacheent)
  5122.         success(cacheent.data)
  5123.         return
  5124.       } else {
  5125.         delete sessionStorage[sskey]
  5126.       }
  5127.     }
  5128.     /*
  5129.      * We don't have live sessionStorage data.
  5130.      * Create a request if we haven't done so already.
  5131.      */
  5132.  
  5133.     if (!(sskey in sr_active_requests)) {
  5134.       sr_active_requests[sskey] = $.ajax({
  5135.         'url': 'https://steamrep.com/api_beta/reputation/' + id64 + '?source=flair-linker-enhanced',
  5136.         'complete': function () {
  5137.           delete sr_active_requests[sskey]
  5138.         },
  5139.         'success': function (data) {
  5140.           var response = convertSRResponse(data)
  5141.           var cacheent = {
  5142.             /* Expire this data from cache in 30 minutes. */
  5143.             exp: (new Date().valueOf() + (1000 * 60 * 30)),
  5144.             data: response
  5145.           }
  5146.           console.log('SR data loaded for ' + id64, cacheent)
  5147.           sessionStorage[sskey] = JSON.stringify(cacheent)
  5148.         }
  5149.       })
  5150.     }
  5151.     /* Attach to the request (newly-created or already-active) */
  5152.  
  5153.     sr_active_requests[sskey].success(function (data) {
  5154.       success(convertSRResponse(data))
  5155.     }).error(error)
  5156.     /* We're registered - return now. */
  5157.   }
  5158.   function createLinkButton(type, title, dest) {
  5159.     var btn = $('<a/>').attr({
  5160.       'href': dest,
  5161.       'title': title,
  5162.       'class': 'flairinfo-imagebutton flairinfo-imagebutton-' + type
  5163.     })
  5164.     return btn
  5165.   }
  5166.   var tradeOfferRegex = /(['"])(https?:\/\/(www\.)?steamcommunity\.com\/tradeoffer\/new\/?\?partner=([0-9]+)&(amp;)?token=(.+?))\1/i
  5167.   // Partner ID == steamID64 - 76561197960265728.
  5168.   // 76561197960265728 won't fit in JavaScript's Number, so we'll knock off the first 4 chars.
  5169.   var magicTruncateChars = 4
  5170.   var magicOffset = 1197960265728
  5171.   function createInfoPanel(xmlDoc, subreddit, flair) {
  5172.     var panel = $(document.createElement('span')).addClass('flairinfo-panel')
  5173.     var user = xmlDoc.find('steamID').text()
  5174.     var id64 = xmlDoc.find('steamID64').text()
  5175.     var onlineState = xmlDoc.find('onlineState').text()
  5176.     var color = statuses[onlineState] && statuses[onlineState].color
  5177.     var location = xmlDoc.find('location').text()
  5178.     var realname = xmlDoc.find('realname').text()
  5179.     var joined = xmlDoc.find('memberSince').text()
  5180.     var hoursPlayed = xmlDoc.find('hoursPlayed2Wk').text()
  5181.     var rating = xmlDoc.find('steamRating').text()
  5182.     var tooltip = ''
  5183.     if (realname) {
  5184.       tooltip += 'Real name: ' + realname + '\n';
  5185.     }
  5186.     if (location) {
  5187.       tooltip += 'Location: ' + location + '\n';
  5188.     }
  5189.     if (joined) {
  5190.       tooltip += 'Joined Steam: ' + joined + '\n';
  5191.     }
  5192.     if (hoursPlayed && rating) {
  5193.       tooltip += 'Played: ' + hoursPlayed + ' hrs last 2 wks [rating: ' + rating + ']\n'
  5194.     }
  5195.     var userlink = $('<a/>').attr('href', 'http://steamcommunity.com/profiles/' + id64).attr('title', $.trim(tooltip)).css('color', color).html(user).on('click', function (e) {
  5196.       window.open($(this) [0].href)
  5197.       e.preventDefault()
  5198.     })
  5199.     panel.append(userlink)
  5200.     panel.onlineState = onlineState
  5201.     panel.onlineColor = color
  5202.     var actionPanel = $('<span/>').attr('class', 'flairinfo-actionpanel')
  5203.     actionPanel.append(createLinkButton('add', 'Add friend', 'steam://friends/add/' + id64)).append(createLinkButton('chat', 'Send message', 'steam://friends/message/' + id64))
  5204.     var steamRepIcon =
  5205.     createLinkButton('rep-refresh', 'SteamRep', 'http://steamrep.com/profiles/' + id64).on('click.srlookup', function (e) {
  5206.       window.open($(this) [0].href)
  5207.       e.preventDefault()
  5208.     })
  5209.     var refreshSteamRep = function () {
  5210.       switchImage(steamRepIcon, 'icon-loading').off('click.srlookup').on('click.srlookup', function (e) {
  5211.         window.open($(this) [0].href)
  5212.         e.preventDefault()
  5213.       }).attr('title', 'SteamRep loading...')
  5214.       findSRData(id64, function (data) {
  5215.         var reptag = data.tag || 'No special reputation'
  5216.         switchImage(steamRepIcon, 'rep-' + data.rep).attr('title', 'SteamRep status:\n' + reptag + '\nClick for details')
  5217.       }, function () {
  5218.         switchImage(steamRepIcon, 'rep-refresh').attr('title', 'SteamRep lookup error\nClick to retry').off('click.srlookup').on('click.srlookup', function (e) {
  5219.           refreshSteamRep()
  5220.           e.preventDefault()
  5221.         })
  5222.       })
  5223.     }
  5224.     flair.one('hover', refreshSteamRep)
  5225.     actionPanel.append(steamRepIcon)
  5226.     var tradeOfferMatches = tradeOfferRegex.exec(xmlDoc.find('profile > summary').text())
  5227.     var tradeOfferWarning = false
  5228.     if (tradeOfferMatches) {
  5229.       var partnerID = parseInt(tradeOfferMatches[4], 10)
  5230.       var steamOffsetID = parseInt(id64.substring(magicTruncateChars)) - magicOffset
  5231.       if (partnerID === steamOffsetID) {
  5232.         actionPanel.append(createLinkButton('tradeoffer', 'Make trade offer', decodeEntities(tradeOfferMatches[2])).on('click', function (e) {
  5233.           window.open($(this) [0].href)
  5234.           e.preventDefault()
  5235.         }))
  5236.       } else {
  5237.         console.error('Skipping trade offer link', tradeOfferMatches[2], 'for mismatched partner ID')
  5238.         tradeOfferWarning = true
  5239.       }
  5240.     }
  5241.     var createWarningText = function (color, text, title) {
  5242.       return $('<span/>').css('color', color).attr('title', title).attr('class', 'flairinfo-warning').text(text)
  5243.     }
  5244.     if (xmlDoc.find('isLimitedAccount').text() == '1') {
  5245.       actionPanel.append(createWarningText('darkGoldenrod', 'LTD', 'Limited account'))
  5246.     }
  5247.     if (xmlDoc.find('vacBanned').text() == '1') {
  5248.       actionPanel.append(createWarningText('red', 'VAC', 'VAC banned'))
  5249.     }
  5250.     var tradeBan = xmlDoc.find('tradeBanState').text()
  5251.     if (tradeBan == 'Probation') {
  5252.       actionPanel.append(createWarningText('darkGoldenrod', 'TPROB', 'Trade probation'))
  5253.     } else if (tradeBan == 'Banned') {
  5254.       actionPanel.append(createWarningText('red', 'TBAN', 'Trade ban'))
  5255.     }
  5256.     var privacyState = xmlDoc.find('privacyState').text()
  5257.     if (privacyState && privacyState != 'public') {
  5258.       actionPanel.append(createWarningText('darkGoldenrod', privacyState, 'Restricted profile\nDisplayed information may be inaccurate.'))
  5259.     }
  5260.     if (tradeOfferWarning) {
  5261.       actionPanel.append(createWarningText('red', 'OFFER', 'Trade offer link in profile does not match ID of profile.\nBe on guard - this account may be hijacked.'))
  5262.     }
  5263.     panel.append(actionPanel)
  5264.     var srLinkPanel = $('<span/>').attr('class', 'flairinfo-sr-linkpanel').append($.map(subreddits[subreddit].links, function (el, idx) {
  5265.       var text = el.replace('$1', id64)
  5266.       var link = $(text).on('click', function (e) {
  5267.         window.open($(this) [0].href)
  5268.         e.preventDefault()
  5269.       }).attr('class', 'flairinfo-sr-link')
  5270.       return link[0]
  5271.     }))
  5272.     panel.append(srLinkPanel)
  5273.     if (!statuses[onlineState]) {
  5274.       console.warn('Unexpected onlineState ' + onlineState)
  5275.     }
  5276.     var game =
  5277.     statuses[onlineState].text(xmlDoc).css('color', color).attr('class', 'flairinfo-status')
  5278.     panel.append(game)
  5279.     if (id64 == '76561197981125077') {
  5280.       var feedback = $('<a href="/message/compose?to=blueshiftlabs&subject=Flair+Linker+Enhanced+feedback">Feedback</a>').on('click', function (e) {
  5281.         window.open($(this) [0].href)
  5282.         e.preventDefault()
  5283.       }).attr('class', 'flairinfo-status')
  5284.       panel.append(feedback)
  5285.     }
  5286.     return panel
  5287.   }
  5288.   var steamURLRegex = /https?:\/\/(www\.)?steamcommunity\.com\/(id|profiles)\/[0-9a-zA-Z_-]+/i
  5289.   function handleFlair(sr, elt) {
  5290.     var steamURLMatch = steamURLRegex.exec(elt.attr('title') || elt.attr('steamid'))
  5291.     if (!steamURLMatch)
  5292.     return;
  5293.     var steamURL = steamURLMatch[0]
  5294.     var refresh =
  5295.     createLinkButton('icon-loading', 'Loading Steam status...', '#').addClass('flairinfo-refresh').on('click', function (evt) {
  5296.       handleFlair(sr, elt)
  5297.       evt.preventDefault()
  5298.     })
  5299.     elt.prev('.flairinfo-refresh').remove()
  5300.     elt.before(refresh)
  5301.     $.ajax({
  5302.       url: steamURL,
  5303.       data: {
  5304.         xml: 1
  5305.       },
  5306.       context: elt
  5307.     }).error(function (xhr, status, error) {
  5308.       refresh.attr('title', 'Steam Community lookup error\nClick to retry').removeClass('flairinfo-imagebutton-icon-loading').addClass('flairinfo-imagebutton-icon-error')
  5309.     }).success(function (data) {
  5310.       var panel = createInfoPanel($(data), sr, $(this))
  5311.       var state = panel.onlineState.replace(/\w\S*/g, function (txt) {
  5312.         return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
  5313.       })
  5314.       refresh.attr('title', state + ' (Click to refresh)').removeClass('flairinfo-imagebutton-icon-loading').addClass('flairinfo-imagebutton-icon-' + panel.onlineState)
  5315.       this.empty().attr({
  5316.         'flair-linked': '',
  5317.         'steamid': steamURL,
  5318.         'title': ''
  5319.       }).append($('<span class="flairinfo-shimpanel"/>')).append(panel)
  5320.     })
  5321.   }
  5322.   $(function () {
  5323.     var sr_regex = /^\/r\/([a-z0-9_]+)/i
  5324.     var sr = sr_regex.exec(location.pathname)
  5325.     if (!sr) return;
  5326.     sr = sr[1].toLowerCase()
  5327.     if (!subreddits[sr]) return;
  5328.     $('<style type="text/css">').html(css.join('\n') + '\n' + subreddits[sr].css.join('\n')).appendTo(document.body)
  5329.     var updateFlairs = function (elts) {
  5330.       $(elts).find('.flair:not([flair-linked])').each(function () {
  5331.         handleFlair(sr, $(this))
  5332.       })
  5333.     }
  5334.     // Listen for more stuff being added to the page.
  5335.  
  5336.     $('body > div.content').on('DOMNodeInserted', function (evt) {
  5337.       updateFlairs($(evt.target))
  5338.     })
  5339.     updateFlairs($('body > div.content'))
  5340.     // Steam says you need to put "Powered by Steam" on any page using the API...
  5341.     var node = $('<p class="bottommenu"/>').append($('<a href="http://steampowered.com"/>').text('Steam profile information powered by the Steam Web API.'
  5342.     ))
  5343.     $('.bottommenu.debuginfo').before(node)
  5344.   })
  5345. }) ()
Add Comment
Please, Sign In to add comment