Overview

URL www.countrysidecitrus.com/
IP162.248.104.124
ASNFULLDUPLEX-DEN
Location United States
Report completed2022-09-14 17:26:25 UTC
StatusLoading report..
urlquery Alerts No alerts detected


Settings

UserAgentMozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Referer


Intrusion Detection Systems

Suricata /w Emerging Threats Pro  No alerts detected


Blocklists

OpenPhish  No alerts detected
PhishTank  No alerts detected
Fortinet's Web Filter
Scan Date Severity Indicator Comment
2022-09-14 2 www.securityreports.net/csp-reports Phishing
mnemonic secure dns  No alerts detected
Quad9 DNS  No alerts detected


Files

No files detected



Passive DNS (37)

Passive DNS Source Fully Qualifying Domain Name Rank First Seen Last Seen IP Comment
mnemonic passive DNS firefox.settings.services.mozilla.com (2) 867 2020-05-27 20:08:30 UTC 2022-09-14 12:26:26 UTC 143.204.55.35
mnemonic passive DNS secure.trust-provider.com (1) 35173 2017-02-27 04:37:40 UTC 2022-09-14 07:17:24 UTC 91.199.212.148
mnemonic passive DNS ocsp.digicert.com (9) 86 2012-05-21 07:02:23 UTC 2022-09-14 07:25:26 UTC 93.184.220.29
mnemonic passive DNS cdnjs.cloudflare.com (1) 235 2020-10-20 10:17:36 UTC 2022-09-14 05:00:27 UTC 104.17.25.14
mnemonic passive DNS www.gstatic.com (1) 0 2016-07-26 09:37:06 UTC 2022-09-14 04:48:23 UTC 142.250.74.163 Domain (gstatic.com) ranked at: 540
mnemonic passive DNS scontent.cdninstagram.com (8) 1107 2015-03-24 22:31:41 UTC 2022-09-14 09:46:17 UTC 157.240.200.63
mnemonic passive DNS region1.google-analytics.com (1) 0 2022-03-17 11:26:33 UTC 2022-09-14 06:02:12 UTC 216.239.32.36 Domain (google-analytics.com) ranked at: 8401
mnemonic passive DNS fonts.gstatic.com (3) 0 2014-08-29 13:43:22 UTC 2022-09-14 04:48:25 UTC 142.250.74.163 Domain (gstatic.com) ranked at: 540
mnemonic passive DNS googleads.g.doubleclick.net (1) 42 2021-02-20 15:43:32 UTC 2022-09-14 11:57:29 UTC 142.250.74.98
mnemonic passive DNS cdn.jsdelivr.net (4) 439 2012-09-30 00:15:09 UTC 2022-09-14 06:59:24 UTC 151.101.85.229
mnemonic passive DNS ocsp.pki.goog (19) 175 2017-06-14 07:23:31 UTC 2022-09-14 04:48:23 UTC 142.250.74.3
mnemonic passive DNS www.googletagmanager.com (1) 75 2012-12-25 14:52:06 UTC 2022-09-14 04:47:55 UTC 142.250.74.72
mnemonic passive DNS cdn.commercev3.net (29) 185230 2021-01-09 12:52:56 UTC 2022-09-12 18:16:46 UTC 162.248.104.141
mnemonic passive DNS ocsp.usertrust.com (1) 899 2012-05-21 15:43:18 UTC 2022-09-14 04:49:29 UTC 172.64.155.188
mnemonic passive DNS ocsp.sectigo.com (6) 487 2018-12-17 11:31:55 UTC 2022-09-14 11:54:44 UTC 104.18.32.68
mnemonic passive DNS e1.o.lencr.org (1) 6159 2021-08-20 07:36:30 UTC 2022-09-14 04:47:54 UTC 23.36.76.226
mnemonic passive DNS r3.o.lencr.org (5) 344 2020-12-02 08:52:13 UTC 2022-09-14 04:47:59 UTC 23.36.76.226
mnemonic passive DNS ocsp.globalsign.com (1) 2075 2012-05-25 06:20:55 UTC 2022-09-14 04:48:22 UTC 104.18.20.226
mnemonic passive DNS snapwidget.com (13) 52354 2012-07-20 15:48:14 UTC 2022-09-14 15:05:00 UTC 104.26.8.123
mnemonic passive DNS stats.g.doubleclick.net (1) 96 2013-06-02 22:47:44 UTC 2022-09-14 04:47:56 UTC 142.251.1.157
mnemonic passive DNS static.doubleclick.net (1) 333 2012-08-18 22:20:49 UTC 2022-09-14 04:48:09 UTC 216.58.207.230
mnemonic passive DNS jnn-pa.googleapis.com (3) 2640 2021-11-16 06:12:21 UTC 2022-09-14 17:10:51 UTC 216.58.207.234
mnemonic passive DNS www.securityreports.net (1) 0 2022-08-16 18:18:26 UTC 2022-09-14 13:36:08 UTC 143.244.214.37 Unknown ranking
mnemonic passive DNS listgrowth.ctctcdn.com (1) 13906 2019-07-22 12:19:06 UTC 2022-09-14 10:32:42 UTC 54.230.111.19
mnemonic passive DNS content-signature-2.cdn.mozilla.net (1) 1152 2020-11-03 12:26:46 UTC 2022-09-14 04:47:55 UTC 143.204.55.35
mnemonic passive DNS www.countrysidecitrus.com (3) 0 2014-12-08 12:44:25 UTC 2022-09-14 17:26:03 UTC 162.248.104.124 Unknown ranking
mnemonic passive DNS code.jquery.com (2) 634 2012-05-21 17:28:02 UTC 2022-09-14 04:47:57 UTC 69.16.175.10
mnemonic passive DNS img-getpocket.cdn.mozilla.net (5) 1631 2017-09-01 03:40:57 UTC 2022-09-14 12:35:36 UTC 34.120.237.76
mnemonic passive DNS bam.nr-data.net (1) 630 2015-02-10 00:06:27 UTC 2022-09-14 04:48:27 UTC 162.247.241.14
mnemonic passive DNS www.youtube.com (1) 90 2013-05-30 23:21:49 UTC 2022-09-14 04:48:08 UTC 142.250.74.142
mnemonic passive DNS push.services.mozilla.com (1) 2140 2015-09-03 10:29:36 UTC 2022-09-14 04:48:23 UTC 52.42.74.230
mnemonic passive DNS static.ctctcdn.com (3) 7165 2013-10-29 17:44:52 UTC 2022-09-14 09:50:01 UTC 104.18.31.207
mnemonic passive DNS static.cloudflareinsights.com (1) 1294 2019-09-24 14:34:56 UTC 2022-09-14 05:17:42 UTC 172.64.156.26
mnemonic passive DNS stackpath.bootstrapcdn.com (1) 2467 2018-04-05 04:41:29 UTC 2022-09-14 08:39:45 UTC 104.18.10.207
mnemonic passive DNS fonts.googleapis.com (1) 8877 2014-07-21 13:19:55 UTC 2022-09-14 12:22:10 UTC 142.250.74.10
mnemonic passive DNS contile.services.mozilla.com (1) 1114 2021-05-27 18:32:35 UTC 2022-09-14 04:48:22 UTC 34.117.237.239
mnemonic passive DNS www.facebook.com (1) 99 2017-01-30 05:00:00 UTC 2022-09-14 04:32:01 UTC 157.240.200.35


Recent reports on same IP/ASN/Domain/Screenshot

Last 5 reports on IP: 162.248.104.124

Date UQ / IDS / BL URL IP
2022-11-26 01:03:35 +0000
0 - 0 - 19 www.hartvillehardware.com/product/sku-FS131R/ (...) 162.248.104.124
2022-11-24 08:19:10 +0000
0 - 0 - 4 www.wineofthemonthclub.com/ 162.248.104.124
2022-11-21 21:15:07 +0000
0 - 0 - 2 www.pfile.com/product/k-sf-46/Flip-Up-Page-Ph (...) 162.248.104.124
2022-11-15 00:13:32 +0000
0 - 0 - 2 www.valworx.com/ 162.248.104.124
2022-11-14 20:42:53 +0000
0 - 0 - 2 www.jungseed.com/product/J01005/592 162.248.104.124

Last 5 reports on ASN: FULLDUPLEX-DEN

Date UQ / IDS / BL URL IP
2022-11-26 01:03:35 +0000
0 - 0 - 19 www.hartvillehardware.com/product/sku-FS131R/ (...) 162.248.104.124
2022-11-24 08:19:10 +0000
0 - 0 - 4 www.wineofthemonthclub.com/ 162.248.104.124
2022-11-22 18:55:57 +0000
0 - 0 - 3 pfile.com/ 162.248.104.127
2022-11-21 21:15:07 +0000
0 - 0 - 2 www.pfile.com/product/k-sf-46/Flip-Up-Page-Ph (...) 162.248.104.124
2022-11-18 12:15:25 +0000
0 - 0 - 24 www.serrv.org/ 162.248.104.123

Last 1 reports on domain: countrysidecitrus.com

Date UQ / IDS / BL URL IP
2022-09-14 17:26:25 +0000
0 - 0 - 1 www.countrysidecitrus.com/ 162.248.104.124

No other reports with similar screenshot



JavaScript

Executed Scripts (72)


Executed Evals (126)

#1 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 3f5991cb1663936bf9af19cad087b39b2784862256898dbe9aec716d514e062b

                                        Mq
                                    

#2 JavaScript::Eval (size: 130, repeated: 1) - SHA256: 0c6c7c48c16f0c37811a0d2025339213fb967b9760f96b47f6ecc647cbd0bd20

                                        Mq = function(Z, N, Q, k, R) {
    if (3 == Z.length) {
        for (k = 0; 3 > k; k++) N[k] += Z[k];
        for (R = (Q = [13, 8, 13, 12, 16, 5, 3, 10, 15], 0); 9 > R; R++) N[3](N, R % 3, Q[R])
    }
}
                                    

#3 JavaScript::Eval (size: 256, repeated: 1) - SHA256: ff9cb24ec743158f22c8ae5f74df262cdb41e763a6a4a7f4267f4c0e8feefc92

                                        0, C = function(Z, N, Q) {
    if (120 == N || 380 == N) Z.u[N] ? Z.u[N].concat(Q) : Z.u[N] = z(Z, 56, Q);
    else {
        if (Z.aZ && 435 != N) return;
        184 == N || 328 == N || 501 == N || 55 == N || 52 == N ? Z.u[N] || (Z.u[N] = tS(Z, Q, 16, N, 10, 38, 35)) : Z.u[N] = tS(Z, Q, 16, N, 3, 121, 35)
    }
    435 == N && (Z.Z = SX(Z, false, 435, 32), Z.o = void 0)
}
                                    

#4 JavaScript::Eval (size: 4, repeated: 1) - SHA256: 74234e98afe7498fb5daf1f36ac2d78acc339464f950703b8c019892f982b90b

                                        null
                                    

#5 JavaScript::Eval (size: 186, repeated: 1) - SHA256: b98b82c364cf0a1c34b8ecf1aa18a6bf51bbd21631dd3794dad96c8ad3082a5f

                                        /((.+[.])?(google|youtube|youtubekids|ytimg|gstatic|googlesyndication|googleadservices|googletagservices|googletagmanager|google-analytics|doubleclick|cdn[.]ampproject)[.](com|net|org))/
                                    

#6 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 8ec5e9e6f70bf1a0b5692ef948d1194bdb074342ed14045f9e84820367a98c6a

                                        xz
                                    

#7 JavaScript::Eval (size: 419, repeated: 1) - SHA256: c6463673d16ce43fe47ed1155cd4d5e4a5800952ce132bb8fd7f8902e52903bd

                                        z = function(Z, N, Q, k, R, f, n) {
    if ((N & 29) == N) {
        for (R = z(Q, 6), f = 0; 0 < k; k--) f = f << 8 | P(435, Z, Q);
        C(Q, R, f)
    }
    return 3 == (((N + 1 ^ ((N ^ 5) >> 4 || (Z.K ? n = eX(Z.G, Z) : (Q = SX(Z, true, 435, 8), Q & 128 && (Q ^= 128, k = SX(Z, true, 435, 2), Q = (Q << 2) + (k | 0)), n = Q)), 26)) < N && (N - 8 ^ 14) >= N && (k = mJ[Z.R](Z.xA), k[Z.R] = function() {
        return Q
    }, k.concat = function(p) {
        Q = p
    }, n = k), N) ^ 61) >> 3 && (R = P(435, Z, Q), (R | 128) - ~(R & 128) + ~(R | 128) && (R = (f = R & 127, k = P(435, Z, Q) << 7, (f & k) + ~(f & k) - ~(f | k))), n = R), n
}
                                    

#8 JavaScript::Eval (size: 131, repeated: 1) - SHA256: 255acf2b26ab498813523e388835af1eb08b4b8da843309d651d8753af9811bd

                                        0, xz = function(Z, N, Q, k, R, f, n) {
    I(N, ((f = B(N, (R = (n = Z & (Q = Z & 4, 3), k = z(N, 11), z(N, 3)), k)), Q && (f = Nq("" + f, 12)), n) && I(N, F(2, f.length), R), f), R)
}
                                    

#9 JavaScript::Eval (size: 47, repeated: 1) - SHA256: 52acd9aa646be4c25f97b542c98210ff495ad539fb4f5dcffb9f9455347ad543

                                        0,
function(n, p) {
    iZ(120, (p = B(n, z(n, 10)), p), n.T)
}
                                    

#10 JavaScript::Eval (size: 345, repeated: 1) - SHA256: 464f5d505e8a7ef05dffa91025965ed1831984a6ca286f3f9d5b9411ab584187

                                        0, Al = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x) {
    N.push((x = (X = (b = Z[0] << 24, V = Z[1] << 16, -~(b | V) + (~b & V) + (b | ~V)), Q = Z[2] << 8, 2 * ~(X & Q) - ~X - 2 * ~Q + (X | ~Q)), f = Z[3], -~f + 2 * (x & ~f) + (~x | f))), N.push((n = (p = Z[4] << 24 | Z[5] << 16, l = Z[6] << 8, -(l | 0) + ~l - 3 * ~(p | l) + 2 * (~p | l)), k = Z[7], (n | 0) + (n & ~k) - (n ^ k) + 2 * (~n & k))), N.push((J = Z[8] << 24, R = Z[9] << 16, -(J & R) - 1 - 2 * ~(J | R) + (~J ^ R)) | Z[10] << 8 | Z[11])
}
                                    

#11 JavaScript::Eval (size: 78, repeated: 1) - SHA256: 348d80fbe0173261186171e5cb520818282308f362c839c4f44c12bbbeef07f1

                                        0,
function(n, p, J, V, l) {
    (V = B((l = (p = z(n, (J = z(n, 6), 14)), B(n, p)), n), J), C)(n, p, l - V)
}
                                    

#12 JavaScript::Eval (size: 2, repeated: 1) - SHA256: a0fc62a8386c41995782e02a7acbae7d45e922d96e98d19dbc6c9ceb708d6dc8

                                        iZ
                                    

#13 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 807f64899db2ba8326c1a8bb20f35873de18846dca3aeaefe6a775ff98d1798f

                                        0,
function(n) {
    xz(0, n)
}
                                    

#14 JavaScript::Eval (size: 134, repeated: 1) - SHA256: 416970762e628b3717b424d2cffe2108a34f43ecb358062f96d7a7d1adc1550e

                                        0, Xx = function(Z, N, Q, k) {
    try {
        k = Z[((N | 0) + 2) % 3], Z[N] = (Z[N] | 0) - (Z[(-2 - 2 * ~N - (N & -2) + (~N & 1)) % 3] | 0) - (k | 0) ^ (1 == N ? k << Q : k >>> Q)
    } catch (R) {
        throw R;
    }
}
                                    

#15 JavaScript::Eval (size: 35, repeated: 1) - SHA256: f2a353ed5469812b863c5fbeb58b4d46b864ba4e20a49f57f9c44c7cda45f46b

                                        document.createEvent('MouseEvents')
                                    

#16 JavaScript::Eval (size: 29, repeated: 1) - SHA256: 0da6a2011c5bf3e456865c776dd9e0dddfcc6d9269f9044ee2cd49b44b430712

                                        0,
function(n) {
    z(true, 20, n, 2)
}
                                    

#17 JavaScript::Eval (size: 78, repeated: 1) - SHA256: c46766c9bc13ad60be853dc42f04e560d46ab5ab08a802f416caddcc5504a58b

                                        0,
function(n, p, J, V) {
    C(n, (V = (p = (J = z(n, 3), P(435, true, n)), z)(n, 3), V), B(n, J) >>> p)
}
                                    

#18 JavaScript::Eval (size: 143, repeated: 1) - SHA256: 0a51e64b2f63ed0f045cb49c8f11e37f44120e6e1526fc368b7fbd7c3025aae2

                                        0,
function(n, p, J, V) {
    if (J = n.CY.pop()) {
        for (V = P(435, true, n); 0 < V; V--) p = z(n, 14), J[p] = n.u[p];
        n.u = (J[132] = n.u[J[55] = n.u[55], 132], J)
    } else C(n, 120, n.P)
}
                                    

#19 JavaScript::Eval (size: 9, repeated: 1) - SHA256: e8183224e440eb4578fd87c4c47735f9ede4c43b1c6ebbdcd7033e98aba6a009

                                        /[\d.]+/g
                                    

#20 JavaScript::Eval (size: 94, repeated: 1) - SHA256: f840a7949afd995a3f9305ea2f6e15cbd6353f75a554a07996090447bd30685b

                                        0,
function(n, p, J, V, l, b) {
    C(n, (J = B((l = B((V = z((b = z(n, (p = z(n, 6), 7)), n), 10), n), p), n), b), V), +(l > J))
}
                                    

#21 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 1af8ffa2785e9493acb0c9157f3f8b9fc194f7c5a756621882c1f04e11fb6eb1

                                        Al
                                    

#22 JavaScript::Eval (size: 543, repeated: 1) - SHA256: 66483fbcea1b9d6426612ca1d8b97bb7e8e969d8b7abae43b6ccef1726ffbb33

                                        0, Nq = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
    for (V = (b = (Q = Z.replace(/\r\n/g, "\n"), 0), []), l = 0; l < Q.length; l++) f = Q.charCodeAt(l), 128 > f ? V[b++] = f : (2048 > f ? V[b++] = f >> 6 | 192 : (55296 == (f & 64512) && l + 1 < Q.length && 56320 == (J = Q.charCodeAt(l + 1), -~J + (J ^ 64512) + 2 * (~J ^ 64512) - (J | -64513)) ? (f = (p = (f | 0) - (f ^ 1023) + (~f & 1023) << 10, 3 * (65536 & p) + ~(65536 & p) - (-65537 ^ p)) + (Q.charCodeAt(++l) & 1023), V[b++] = f >> 18 | 240, V[b++] = (R = f >> N & 63, -1 - ~R + (~R & 128))) : V[b++] = f >> N | 224, V[b++] = (n = (k = f >> 6, (k | 0) - ~(k & 63) + ~(k | 63) + (~k & 63)), -~(n | 128) + (n & -129) + (~n | 128))), V[b++] = (f | 0) + (~f ^ 63) - (f | -64) | 128);
    return V
}
                                    

#23 JavaScript::Eval (size: 35, repeated: 1) - SHA256: 1e3606d95ce27d593157594820335681a9380f51a96147303cd8000e60a95e12

                                        document.createElement('div').style
                                    

#24 JavaScript::Eval (size: 180990, repeated: 1) - SHA256: 9951f8825465bd22be9113672b285637cac9e2047eb33db7780abddadb6d47e7

                                        window.MagicScroll = (function() {
    var u, v;
    u = v = (function() {
        var S = {
            version: "v3.3.6",
            UUID: 0,
            storage: {},
            $uuid: function(W) {
                return (W.$J_UUID || (W.$J_UUID = ++M.UUID))
            },
            getStorage: function(W) {
                return (M.storage[W] || (M.storage[W] = {}))
            },
            $F: function() {},
            $false: function() {
                return false
            },
            $true: function() {
                return true
            },
            stylesId: "mjs-" + Math.floor(Math.random() * new Date().getTime()),
            defined: function(W) {
                return (W != null)
            },
            ifndef: function(X, W) {
                return (X != null) ? X : W
            },
            exists: function(W) {
                return !!(W)
            },
            jTypeOf: function(Y) {
                var W = 9007199254740991;

                function X(Z) {
                    return typeof Z === "number" && Z > -1 && Z % 1 === 0 && Z <= W
                }
                if (!M.defined(Y)) {
                    return false
                }
                if (Y.$J_TYPE) {
                    return Y.$J_TYPE
                }
                if (!!Y.nodeType) {
                    if (Y.nodeType === 1) {
                        return "element"
                    }
                    if (Y.nodeType === 3) {
                        return "textnode"
                    }
                }
                if (Y === window) {
                    return "window"
                }
                if (Y === document) {
                    return "document"
                }
                if (Y instanceof window.Function) {
                    return "function"
                }
                if (Y instanceof window.String) {
                    return "string"
                }
                if (Y instanceof window.Array) {
                    return "array"
                }
                if (Y instanceof window.Date) {
                    return "date"
                }
                if (Y instanceof window.RegExp) {
                    return "regexp"
                }
                if (X(Y.length) && Y.item) {
                    return "collection"
                }
                if (X(Y.length) && Y.callee) {
                    return "arguments"
                }
                if ((Y instanceof window.Object || Y instanceof window.Function) && Y.constructor === M.Class) {
                    return "class"
                }
                if (M.browser.trident) {
                    if (M.defined(Y.cancelBubble)) {
                        return "event"
                    }
                } else {
                    if (Y === window.event || Y.constructor === window.Event || Y.constructor === window.MouseEvent || Y.constructor === window.UIEvent || Y.constructor === window.KeyboardEvent || Y.constructor === window.KeyEvent) {
                        return "event"
                    }
                }
                return typeof(Y)
            },
            extend: function(ab, aa) {
                if (!(ab instanceof window.Array)) {
                    ab = [ab]
                }
                if (!aa) {
                    return ab[0]
                }
                for (var Z = 0, X = ab.length; Z < X; Z++) {
                    if (!M.defined(ab)) {
                        continue
                    }
                    for (var Y in aa) {
                        if (!Object.prototype.hasOwnProperty.call(aa, Y)) {
                            continue
                        }
                        try {
                            ab[Z][Y] = aa[Y]
                        } catch (W) {}
                    }
                }
                return ab[0]
            },
            implement: function(aa, Z) {
                if (!(aa instanceof window.Array)) {
                    aa = [aa]
                }
                for (var Y = 0, W = aa.length; Y < W; Y++) {
                    if (!M.defined(aa[Y])) {
                        continue
                    }
                    if (!aa[Y].prototype) {
                        continue
                    }
                    for (var X in (Z || {})) {
                        if (!aa[Y].prototype[X]) {
                            aa[Y].prototype[X] = Z[X]
                        }
                    }
                }
                return aa[0]
            },
            nativize: function(Y, X) {
                if (!M.defined(Y)) {
                    return Y
                }
                for (var W in (X || {})) {
                    if (!Y[W]) {
                        Y[W] = X[W]
                    }
                }
                return Y
            },
            $try: function() {
                for (var X = 0, W = arguments.length; X < W; X++) {
                    try {
                        return arguments[X]()
                    } catch (Y) {}
                }
                return null
            },
            $A: function(Y) {
                if (!M.defined(Y)) {
                    return M.$([])
                }
                if (Y.toArray) {
                    return M.$(Y.toArray())
                }
                if (Y.item) {
                    var X = Y.length || 0,
                        W = new Array(X);
                    while (X--) {
                        W[X] = Y[X]
                    }
                    return M.$(W)
                }
                return M.$(Array.prototype.slice.call(Y))
            },
            now: function() {
                return new Date().getTime()
            },
            detach: function(aa) {
                var Y;
                switch (M.jTypeOf(aa)) {
                    case "object":
                        Y = {};
                        for (var Z in aa) {
                            Y[Z] = M.detach(aa[Z])
                        }
                        break;
                    case "array":
                        Y = [];
                        for (var X = 0, W = aa.length; X < W; X++) {
                            Y[X] = M.detach(aa[X])
                        }
                        break;
                    default:
                        return aa
                }
                return M.$(Y)
            },
            $: function(Y) {
                var W = true;
                if (!M.defined(Y)) {
                    return null
                }
                if (Y.$J_EXT) {
                    return Y
                }
                switch (M.jTypeOf(Y)) {
                    case "array":
                        Y = M.nativize(Y, M.extend(M.Array, {
                            $J_EXT: M.$F
                        }));
                        Y.jEach = Y.forEach;
                        Y.contains = M.Array.contains;
                        return Y;
                        break;
                    case "string":
                        var X = document.getElementById(Y);
                        if (M.defined(X)) {
                            return M.$(X)
                        }
                        return null;
                        break;
                    case "window":
                    case "document":
                        M.$uuid(Y);
                        Y = M.extend(Y, M.Doc);
                        break;
                    case "element":
                        M.$uuid(Y);
                        Y = M.extend(Y, M.Element);
                        break;
                    case "event":
                        Y = M.extend(Y, M.Event);
                        break;
                    case "textnode":
                    case "function":
                    case "date":
                    default:
                        W = false;
                        break
                }
                if (W) {
                    return M.extend(Y, {
                        $J_EXT: M.$F
                    })
                } else {
                    return Y
                }
            },
            $new: function(W, Y, X) {
                return M.$(M.doc.createElement(W)).setProps(Y || {}).jSetCss(X || {})
            },
            addCSS: function(Z, aa, X) {
                var W, ac, Y, ae = [],
                    ad = -1;
                X || (X = M.stylesId);
                W = M.$(X) || M.$new("style", {
                    id: X,
                    type: "text/css"
                }).jAppendTo((document.head || document.body), "top");
                ac = W.sheet || W.styleSheet;
                if (M.jTypeOf(aa) !== "string") {
                    for (var Y in aa) {
                        ae.push(Y + ":" + aa[Y])
                    }
                    aa = ae.join(";")
                }
                if (ac.insertRule) {
                    ad = ac.insertRule(Z + " {" + aa + "}", ac.cssRules.length)
                } else {
                    try {
                        ad = ac.addRule(Z, aa, ac.rules.length)
                    } catch (ab) {}
                }
                return ad
            },
            removeCSS: function(Z, W) {
                var Y, X;
                Y = M.$(Z);
                if (M.jTypeOf(Y) !== "element") {
                    return
                }
                X = Y.sheet || Y.styleSheet;
                if (X.deleteRule) {
                    X.deleteRule(W)
                } else {
                    if (X.removeRule) {
                        X.removeRule(W)
                    }
                }
            },
            generateUUID: function() {
                return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(Y) {
                    var X = Math.random() * 16 | 0,
                        W = Y === "x" ? X : (X & 3 | 8);
                    return W.toString(16)
                }).toUpperCase()
            },
            getAbsoluteURL: (function() {
                var W;
                return function(X) {
                    if (!W) {
                        W = document.createElement("a")
                    }
                    W.setAttribute("href", X);
                    return ("!!" + W.href).replace("!!", "")
                }
            })(),
            getHashCode: function(Y) {
                var Z = 0,
                    W = Y.length;
                for (var X = 0; X < W; ++X) {
                    Z = 31 * Z + Y.charCodeAt(X);
                    Z %= 4294967296
                }
                return Z
            }
        };
        var M = S;
        var N = S.$;
        if (!window.magicJS) {
            window.magicJS = S;
            window.$mjs = S.$
        }
        M.Array = {
            $J_TYPE: "array",
            indexOf: function(Z, aa) {
                var W = this.length;
                for (var X = this.length, Y = (aa < 0) ? Math.max(0, X + aa) : aa || 0; Y < X; Y++) {
                    if (this[Y] === Z) {
                        return Y
                    }
                }
                return -1
            },
            contains: function(W, X) {
                return this.indexOf(W, X) != -1
            },
            forEach: function(W, Z) {
                for (var Y = 0, X = this.length; Y < X; Y++) {
                    if (Y in this) {
                        W.call(Z, this[Y], Y, this)
                    }
                }
            },
            filter: function(W, ab) {
                var aa = [];
                for (var Z = 0, X = this.length; Z < X; Z++) {
                    if (Z in this) {
                        var Y = this[Z];
                        if (W.call(ab, this[Z], Z, this)) {
                            aa.push(Y)
                        }
                    }
                }
                return aa
            },
            map: function(W, aa) {
                var Z = [];
                for (var Y = 0, X = this.length; Y < X; Y++) {
                    if (Y in this) {
                        Z[Y] = W.call(aa, this[Y], Y, this)
                    }
                }
                return Z
            }
        };
        M.implement(String, {
            $J_TYPE: "string",
            jTrim: function() {
                return this.replace(/^\s+|\s+$/g, "")
            },
            eq: function(W, X) {
                return (X || false) ? (this.toString() === W.toString()) : (this.toLowerCase().toString() === W.toLowerCase().toString())
            },
            jCamelize: function() {
                return this.replace(/-\D/g, function(W) {
                    return W.charAt(1).toUpperCase()
                })
            },
            dashize: function() {
                return this.replace(/[A-Z]/g, function(W) {
                    return ("-" + W.charAt(0).toLowerCase())
                })
            },
            jToInt: function(W) {
                return parseInt(this, W || 10)
            },
            toFloat: function() {
                return parseFloat(this)
            },
            jToBool: function() {
                return !this.replace(/true/i, "").jTrim()
            },
            has: function(X, W) {
                W = W || "";
                return (W + this + W).indexOf(W + X + W) > -1
            }
        });
        S.implement(Function, {
            $J_TYPE: "function",
            jBind: function() {
                var X = M.$A(arguments),
                    W = this,
                    Y = X.shift();
                return function() {
                    return W.apply(Y || null, X.concat(M.$A(arguments)))
                }
            },
            jBindAsEvent: function() {
                var X = M.$A(arguments),
                    W = this,
                    Y = X.shift();
                return function(Z) {
                    return W.apply(Y || null, M.$([Z || (M.browser.ieMode ? window.event : null)]).concat(X))
                }
            },
            jDelay: function() {
                var X = M.$A(arguments),
                    W = this,
                    Y = X.shift();
                return window.setTimeout(function() {
                    return W.apply(W, X)
                }, Y || 0)
            },
            jDefer: function() {
                var X = M.$A(arguments),
                    W = this;
                return function() {
                    return W.jDelay.apply(W, X)
                }
            },
            interval: function() {
                var X = M.$A(arguments),
                    W = this,
                    Y = X.shift();
                return window.setInterval(function() {
                    return W.apply(W, X)
                }, Y || 0)
            }
        });
        var T = {};
        var L = navigator.userAgent.toLowerCase();
        var K = L.match(/(webkit|gecko|trident|presto)\/(\d+\.?\d*)/i);
        var P = L.match(/(edge|opr)\/(\d+\.?\d*)/i) || L.match(/(crios|chrome|safari|firefox|opera|opr)\/(\d+\.?\d*)/i);
        var R = L.match(/version\/(\d+\.?\d*)/i);
        var G = document.documentElement.style;

        function H(X) {
            var W = X.charAt(0).toUpperCase() + X.slice(1);
            return X in G || ("Webkit" + W) in G || ("Moz" + W) in G || ("ms" + W) in G || ("O" + W) in G
        }
        M.browser = {
            features: {
                xpath: !!(document.evaluate),
                air: !!(window.runtime),
                query: !!(document.querySelector),
                fullScreen: !!(document.fullscreenEnabled || document.msFullscreenEnabled || document.exitFullscreen || document.cancelFullScreen || document.webkitexitFullscreen || document.webkitCancelFullScreen || document.mozCancelFullScreen || document.oCancelFullScreen || document.msCancelFullScreen),
                xhr2: !!(window.ProgressEvent) && !!(window.FormData) && (window.XMLHttpRequest && "withCredentials" in new XMLHttpRequest),
                transition: H("transition"),
                transform: H("transform"),
                perspective: H("perspective"),
                animation: H("animation"),
                requestAnimationFrame: false,
                multibackground: false,
                cssFilters: false,
                canvas: false,
                svg: (function() {
                    return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image", "1.1")
                }())
            },
            touchScreen: (function() {
                return "ontouchstart" in window || (window.DocumentTouch && document instanceof DocumentTouch) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)
            }()),
            mobile: !!L.match(/(android|bb\d+|meego).+|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/),
            engine: (K && K[1]) ? K[1].toLowerCase() : (window.opera) ? "presto" : !!(window.ActiveXObject) ? "trident" : (document.getBoxObjectFor !== undefined || window.mozInnerScreenY !== null) ? "gecko" : (window.WebKitPoint !== null || !navigator.taintEnabled) ? "webkit" : "unknown",
            version: (K && K[2]) ? parseFloat(K[2]) : 0,
            uaName: (P && P[1]) ? P[1].toLowerCase() : "",
            uaVersion: (P && P[2]) ? parseFloat(P[2]) : 0,
            cssPrefix: "",
            cssDomPrefix: "",
            domPrefix: "",
            ieMode: 0,
            platform: L.match(/ip(?:ad|od|hone)/) ? "ios" : (L.match(/(?:webos|android)/) || navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(),
            backCompat: document.compatMode && document.compatMode.toLowerCase() === "backcompat",
            scrollbarsWidth: 0,
            getDoc: function() {
                return (document.compatMode && document.compatMode.toLowerCase() === "backcompat") ? document.body : document.documentElement
            },
            requestAnimationFrame: window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || undefined,
            cancelAnimationFrame: window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || undefined,
            ready: false,
            onready: function() {
                if (M.browser.ready) {
                    return
                }
                var Z;
                var Y;
                M.browser.ready = true;
                M.body = M.$(document.body);
                M.win = M.$(window);
                try {
                    var X = M.$new("div").jSetCss({
                        width: 100,
                        height: 100,
                        overflow: "scroll",
                        position: "absolute",
                        top: -9999
                    }).jAppendTo(document.body);
                    M.browser.scrollbarsWidth = X.offsetWidth - X.clientWidth;
                    X.jRemove()
                } catch (W) {}
                try {
                    Z = M.$new("div");
                    Y = Z.style;
                    Y.cssText = "background:url(https://),url(https://),red url(https://)";
                    M.browser.features.multibackground = (/(url\s*\(.*?){3}/).test(Y.background);
                    Y = null;
                    Z = null
                } catch (W) {}
                if (!M.browser.cssTransformProp) {
                    M.browser.cssTransformProp = M.normalizeCSS("transform").dashize()
                }
                try {
                    Z = M.$new("div");
                    Z.style.cssText = M.normalizeCSS("filter").dashize() + ":blur(2px);";
                    M.browser.features.cssFilters = !!Z.style.length && (!M.browser.ieMode || M.browser.ieMode > 9);
                    Z = null
                } catch (W) {}
                if (!M.browser.features.cssFilters) {
                    M.$(document.documentElement).jAddClass("no-cssfilters-magic")
                }
                try {
                    M.browser.features.canvas = (function() {
                        var aa = M.$new("canvas");
                        return !!(aa.getContext && aa.getContext("2d"))
                    }())
                } catch (W) {}
                if (window.TransitionEvent === undefined && window.WebKitTransitionEvent !== undefined) {
                    T.transitionend = "webkitTransitionEnd"
                }
                M.Doc.jCallEvent.call(M.$(document), "domready")
            }
        };
        (function() {
            var X = [],
                aa, Z, ab;

            function W() {
                return !!(arguments.callee.caller)
            }
            switch (M.browser.engine) {
                case "trident":
                    if (!M.browser.version) {
                        M.browser.version = !!(window.XMLHttpRequest) ? 3 : 2
                    }
                    break;
                case "gecko":
                    M.browser.version = (P && P[2]) ? parseFloat(P[2]) : 0;
                    break
            }
            M.browser[M.browser.engine] = true;
            if (P && P[1] === "crios") {
                M.browser.uaName = "chrome"
            }
            if (!!window.chrome) {
                M.browser.chrome = true
            }
            if (P && P[1] === "opr") {
                M.browser.uaName = "opera";
                M.browser.opera = true
            }
            if (M.browser.uaName === "safari" && (R && R[1])) {
                M.browser.uaVersion = parseFloat(R[1])
            }
            if (M.browser.platform === "android" && M.browser.webkit && (R && R[1])) {
                M.browser.androidBrowser = true
            }
            aa = ({
                gecko: ["-moz-", "Moz", "moz"],
                webkit: ["-webkit-", "Webkit", "webkit"],
                trident: ["-ms-", "ms", "ms"],
                presto: ["-o-", "O", "o"]
            })[M.browser.engine] || ["", "", ""];
            M.browser.cssPrefix = aa[0];
            M.browser.cssDomPrefix = aa[1];
            M.browser.domPrefix = aa[2];
            M.browser.ieMode = !M.browser.trident ? undefined : (document.documentMode) ? document.documentMode : (function() {
                var ac = 0;
                if (M.browser.backCompat) {
                    return 5
                }
                switch (M.browser.version) {
                    case 2:
                        ac = 6;
                        break;
                    case 3:
                        ac = 7;
                        break
                }
                return ac
            }());
            if (!M.browser.mobile && M.browser.platform === "mac" && M.browser.touchScreen) {
                M.browser.mobile = true;
                M.browser.platform = "ios"
            }
            X.push(M.browser.platform + "-magic");
            if (M.browser.mobile) {
                X.push("mobile-magic")
            }
            if (M.browser.androidBrowser) {
                X.push("android-browser-magic")
            }
            if (M.browser.ieMode) {
                M.browser.uaName = "ie";
                M.browser.uaVersion = M.browser.ieMode;
                X.push("ie" + M.browser.ieMode + "-magic");
                for (Z = 11; Z > M.browser.ieMode; Z--) {
                    X.push("lt-ie" + Z + "-magic")
                }
            }
            if (M.browser.webkit && M.browser.version < 536) {
                M.browser.features.fullScreen = false
            }
            if (M.browser.requestAnimationFrame) {
                M.browser.requestAnimationFrame.call(window, function() {
                    M.browser.features.requestAnimationFrame = true
                })
            }
            if (M.browser.features.svg) {
                X.push("svg-magic")
            } else {
                X.push("no-svg-magic")
            }
            ab = (document.documentElement.className || "").match(/\S+/g) || [];
            document.documentElement.className = M.$(ab).concat(X).join(" ");
            try {
                document.documentElement.setAttribute("data-magic-ua", M.browser.uaName);
                document.documentElement.setAttribute("data-magic-ua-ver", M.browser.uaVersion);
                document.documentElement.setAttribute("data-magic-engine", M.browser.engine);
                document.documentElement.setAttribute("data-magic-engine-ver", M.browser.version)
            } catch (Y) {}
            if (M.browser.ieMode && M.browser.ieMode < 9) {
                document.createElement("figure");
                document.createElement("figcaption")
            }
            if (!window.navigator.pointerEnabled) {
                M.$(["Down", "Up", "Move", "Over", "Out"]).jEach(function(ac) {
                    T["pointer" + ac.toLowerCase()] = window.navigator.msPointerEnabled ? "MSPointer" + ac : -1
                })
            }
        }());
        (function() {
            M.browser.fullScreen = {
                capable: M.browser.features.fullScreen,
                enabled: function() {
                    return !!(document.fullscreenElement || document[M.browser.domPrefix + "FullscreenElement"] || document.fullScreen || document.webkitIsFullScreen || document[M.browser.domPrefix + "FullScreen"])
                },
                request: function(W, X) {
                    if (!X) {
                        X = {}
                    }
                    if (this.capable) {
                        M.$(document).jAddEvent(this.changeEventName, this.onchange = function(Y) {
                            if (this.enabled()) {
                                if (X.onEnter) {
                                    X.onEnter()
                                }
                            } else {
                                M.$(document).jRemoveEvent(this.changeEventName, this.onchange);
                                if (X.onExit) {
                                    X.onExit()
                                }
                            }
                        }.jBindAsEvent(this));
                        M.$(document).jAddEvent(this.errorEventName, this.onerror = function(Y) {
                            if (X.fallback) {
                                X.fallback()
                            }
                            M.$(document).jRemoveEvent(this.errorEventName, this.onerror)
                        }.jBindAsEvent(this));
                        (W.requestFullscreen || W[M.browser.domPrefix + "RequestFullscreen"] || W[M.browser.domPrefix + "RequestFullScreen"] || function() {}).call(W)
                    } else {
                        if (X.fallback) {
                            X.fallback()
                        }
                    }
                },
                cancel: (document.exitFullscreen || document.cancelFullScreen || document[M.browser.domPrefix + "ExitFullscreen"] || document[M.browser.domPrefix + "CancelFullScreen"] || function() {}).jBind(document),
                changeEventName: document.msExitFullscreen ? "MSFullscreenChange" : (document.exitFullscreen ? "" : M.browser.domPrefix) + "fullscreenchange",
                errorEventName: document.msExitFullscreen ? "MSFullscreenError" : (document.exitFullscreen ? "" : M.browser.domPrefix) + "fullscreenerror",
                prefix: M.browser.domPrefix,
                activeElement: null
            }
        }());
        var V = /\S+/g,
            J = /^(border(Top|Bottom|Left|Right)Width)|((padding|margin)(Top|Bottom|Left|Right))$/,
            O = {
                "float": ("undefined" === typeof(G.styleFloat)) ? "cssFloat" : "styleFloat"
            },
            Q = {
                fontWeight: true,
                lineHeight: true,
                opacity: true,
                zIndex: true,
                zoom: true
            },
            I = (window.getComputedStyle) ? function(Y, W) {
                var X = window.getComputedStyle(Y, null);
                return X ? X.getPropertyValue(W) || X[W] : null
            } : function(Z, X) {
                var Y = Z.currentStyle,
                    W = null;
                W = Y ? Y[X] : null;
                if (null == W && Z.style && Z.style[X]) {
                    W = Z.style[X]
                }
                return W
            };

        function U(Y) {
            var W, X;
            X = (M.browser.webkit && "filter" == Y) ? false : (Y in G);
            if (!X) {
                W = M.browser.cssDomPrefix + Y.charAt(0).toUpperCase() + Y.slice(1);
                if (W in G) {
                    return W
                }
            }
            return Y
        }
        M.normalizeCSS = U;
        M.Element = {
            jHasClass: function(W) {
                return !(W || "").has(" ") && (this.className || "").has(W, " ")
            },
            jAddClass: function(aa) {
                var X = (this.className || "").match(V) || [],
                    Z = (aa || "").match(V) || [],
                    W = Z.length,
                    Y = 0;
                for (; Y < W; Y++) {
                    if (!M.$(X).contains(Z[Y])) {
                        X.push(Z[Y])
                    }
                }
                this.className = X.join(" ");
                return this
            },
            jRemoveClass: function(ab) {
                var X = (this.className || "").match(V) || [],
                    aa = (ab || "").match(V) || [],
                    W = aa.length,
                    Z = 0,
                    Y;
                for (; Z < W; Z++) {
                    if ((Y = M.$(X).indexOf(aa[Z])) > -1) {
                        X.splice(Y, 1)
                    }
                }
                this.className = ab ? X.join(" ") : "";
                return this
            },
            jToggleClass: function(W) {
                return this.jHasClass(W) ? this.jRemoveClass(W) : this.jAddClass(W)
            },
            jGetCss: function(X) {
                var Y = X.jCamelize(),
                    W = null;
                X = O[Y] || (O[Y] = U(Y));
                W = I(this, X);
                if ("auto" === W) {
                    W = null
                }
                if (null !== W) {
                    if ("opacity" == X) {
                        return M.defined(W) ? parseFloat(W) : 1
                    }
                    if (J.test(X)) {
                        W = parseInt(W, 10) ? W : "0px"
                    }
                }
                return W
            },
            jSetCssProp: function(X, W) {
                var Z = X.jCamelize();
                try {
                    if ("opacity" == X) {
                        this.jSetOpacity(W);
                        return this
                    }
                    X = O[Z] || (O[Z] = U(Z));
                    this.style[X] = W + (("number" == M.jTypeOf(W) && !Q[Z]) ? "px" : "")
                } catch (Y) {}
                return this
            },
            jSetCss: function(X) {
                for (var W in X) {
                    this.jSetCssProp(W, X[W])
                }
                return this
            },
            jGetStyles: function() {
                var W = {};
                M.$A(arguments).jEach(function(X) {
                    W[X] = this.jGetCss(X)
                }, this);
                return W
            },
            jSetOpacity: function(Y, W) {
                var X;
                W = W || false;
                this.style.opacity = Y;
                Y = parseInt(parseFloat(Y) * 100);
                if (W) {
                    if (0 === Y) {
                        if ("hidden" != this.style.visibility) {
                            this.style.visibility = "hidden"
                        }
                    } else {
                        if ("visible" != this.style.visibility) {
                            this.style.visibility = "visible"
                        }
                    }
                }
                if (M.browser.ieMode && M.browser.ieMode < 9) {
                    if (!isNaN(Y)) {
                        if (!~this.style.filter.indexOf("Alpha")) {
                            this.style.filter += " progid:DXImageTransform.Microsoft.Alpha(Opacity=" + Y + ")"
                        } else {
                            this.style.filter = this.style.filter.replace(/Opacity=\d*/i, "Opacity=" + Y)
                        }
                    } else {
                        this.style.filter = this.style.filter.replace(/progid:DXImageTransform.Microsoft.Alpha\(Opacity=\d*\)/i, "").jTrim();
                        if ("" === this.style.filter) {
                            this.style.removeAttribute("filter")
                        }
                    }
                }
                return this
            },
            setProps: function(W) {
                for (var X in W) {
                    if ("class" === X) {
                        this.jAddClass("" + W[X])
                    } else {
                        this.setAttribute(X, "" + W[X])
                    }
                }
                return this
            },
            jGetTransitionDuration: function() {
                var X = 0,
                    W = 0;
                X = this.jGetCss("transition-duration");
                W = this.jGetCss("transition-delay");
                X = X.indexOf("ms") > -1 ? parseFloat(X) : X.indexOf("s") > -1 ? parseFloat(X) * 1000 : 0;
                W = W.indexOf("ms") > -1 ? parseFloat(W) : W.indexOf("s") > -1 ? parseFloat(W) * 1000 : 0;
                return X + W
            },
            hide: function() {
                return this.jSetCss({
                    display: "none",
                    visibility: "hidden"
                })
            },
            show: function() {
                return this.jSetCss({
                    display: "",
                    visibility: "visible"
                })
            },
            jGetSize: function() {
                return {
                    width: this.offsetWidth,
                    height: this.offsetHeight
                }
            },
            getInnerSize: function(X) {
                var W = this.jGetSize();
                W.width -= (parseFloat(this.jGetCss("border-left-width") || 0) + parseFloat(this.jGetCss("border-right-width") || 0));
                W.height -= (parseFloat(this.jGetCss("border-top-width") || 0) + parseFloat(this.jGetCss("border-bottom-width") || 0));
                if (!X) {
                    W.width -= (parseFloat(this.jGetCss("padding-left") || 0) + parseFloat(this.jGetCss("padding-right") || 0));
                    W.height -= (parseFloat(this.jGetCss("padding-top") || 0) + parseFloat(this.jGetCss("padding-bottom") || 0))
                }
                return W
            },
            jGetScroll: function() {
                return {
                    top: this.scrollTop,
                    left: this.scrollLeft
                }
            },
            jGetFullScroll: function() {
                var W = this,
                    X = {
                        top: 0,
                        left: 0
                    };
                do {
                    X.left += W.scrollLeft || 0;
                    X.top += W.scrollTop || 0;
                    W = W.parentNode
                } while (W);
                return X
            },
            jGetPosition: function() {
                var aa = this,
                    X = 0,
                    Z = 0;
                if (M.defined(document.documentElement.getBoundingClientRect)) {
                    var W = this.getBoundingClientRect(),
                        Y = M.$(document).jGetScroll(),
                        ab = M.browser.getDoc();
                    return {
                        top: W.top + Y.y - ab.clientTop,
                        left: W.left + Y.x - ab.clientLeft
                    }
                }
                do {
                    X += aa.offsetLeft || 0;
                    Z += aa.offsetTop || 0;
                    aa = aa.offsetParent
                } while (aa && !(/^(?:body|html)$/i).test(aa.tagName));
                return {
                    top: Z,
                    left: X
                }
            },
            jGetOffset: function() {
                var W = this;
                var Y = 0;
                var X = 0;
                do {
                    Y += W.offsetLeft || 0;
                    X += W.offsetTop || 0;
                    W = W.offsetParent
                } while (W && !(/^(?:body|html)$/i).test(W.tagName));
                return {
                    top: X,
                    left: Y
                }
            },
            jGetRect: function() {
                var X = this.jGetPosition();
                var W = this.jGetSize();
                return {
                    top: X.top,
                    bottom: X.top + W.height,
                    left: X.left,
                    right: X.left + W.width
                }
            },
            changeContent: function(X) {
                try {
                    this.innerHTML = X
                } catch (W) {
                    this.innerText = X
                }
                return this
            },
            jRemove: function() {
                return (this.parentNode) ? this.parentNode.removeChild(this) : this
            },
            kill: function() {
                M.$A(this.childNodes).jEach(function(W) {
                    if (3 == W.nodeType || 8 == W.nodeType) {
                        return
                    }
                    M.$(W).kill()
                });
                this.jRemove();
                this.jClearEvents();
                if (this.$J_UUID) {
                    M.storage[this.$J_UUID] = null;
                    delete M.storage[this.$J_UUID]
                }
                return null
            },
            append: function(Y, X) {
                X = X || "bottom";
                var W = this.firstChild;
                ("top" == X && W) ? this.insertBefore(Y, W): this.appendChild(Y);
                return this
            },
            jAppendTo: function(Y, X) {
                var W = M.$(Y).append(this, X);
                return this
            },
            enclose: function(W) {
                this.append(W.parentNode.replaceChild(this, W));
                return this
            },
            hasChild: function(W) {
                if ("element" !== M.jTypeOf("string" == M.jTypeOf(W) ? W = document.getElementById(W) : W)) {
                    return false
                }
                return (this == W) ? false : (this.contains && !(M.browser.webkit419)) ? (this.contains(W)) : (this.compareDocumentPosition) ? !!(this.compareDocumentPosition(W) & 16) : M.$A(this.byTag(W.tagName)).contains(W)
            }
        };
        M.Element.jGetStyle = M.Element.jGetCss;
        M.Element.jSetStyle = M.Element.jSetCss;
        if (!window.Element) {
            window.Element = M.$F;
            if (M.browser.engine.webkit) {
                window.document.createElement("iframe")
            }
            window.Element.prototype = (M.browser.engine.webkit) ? window["[[DOMElement.prototype]]"] : {}
        }
        M.implement(window.Element, {
            $J_TYPE: "element"
        });
        M.Doc = {
            jGetSize: function() {
                if (M.browser.touchScreen || M.browser.presto925 || M.browser.webkit419) {
                    return {
                        width: window.innerWidth,
                        height: window.innerHeight
                    }
                }
                return {
                    width: M.browser.getDoc().clientWidth,
                    height: M.browser.getDoc().clientHeight
                }
            },
            jGetScroll: function() {
                return {
                    x: window.pageXOffset || M.browser.getDoc().scrollLeft,
                    y: window.pageYOffset || M.browser.getDoc().scrollTop
                }
            },
            jGetFullSize: function() {
                var W = this.jGetSize();
                return {
                    width: Math.max(M.browser.getDoc().scrollWidth, W.width),
                    height: Math.max(M.browser.getDoc().scrollHeight, W.height)
                }
            }
        };
        M.extend(document, {
            $J_TYPE: "document"
        });
        M.extend(window, {
            $J_TYPE: "window"
        });
        M.extend([M.Element, M.Doc], {
            jFetch: function(Z, X) {
                var W = M.getStorage(this.$J_UUID),
                    Y = W[Z];
                if (undefined !== X && undefined === Y) {
                    Y = W[Z] = X
                }
                return (M.defined(Y) ? Y : null)
            },
            jStore: function(Y, X) {
                var W = M.getStorage(this.$J_UUID);
                W[Y] = X;
                return this
            },
            jDel: function(X) {
                var W = M.getStorage(this.$J_UUID);
                delete W[X];
                return this
            }
        });
        if (!(window.HTMLElement && window.HTMLElement.prototype && window.HTMLElement.prototype.getElementsByClassName)) {
            M.extend([M.Element, M.Doc], {
                getElementsByClassName: function(W) {
                    return M.$A(this.getElementsByTagName("*")).filter(function(Y) {
                        try {
                            return (1 == Y.nodeType && Y.className.has(W, " "))
                        } catch (X) {}
                    })
                }
            })
        }
        M.extend([M.Element, M.Doc], {
            byClass: function() {
                return this.getElementsByClassName(arguments[0])
            },
            byTag: function() {
                return this.getElementsByTagName(arguments[0])
            }
        });
        if (M.browser.fullScreen.capable && !document.requestFullScreen) {
            M.Element.requestFullScreen = function() {
                M.browser.fullScreen.request(this)
            }
        }
        M.Event = {
            $J_TYPE: "event",
            isQueueStopped: M.$false,
            stop: function() {
                return this.stopDistribution().stopDefaults()
            },
            stopDistribution: function() {
                if (this.stopPropagation) {
                    this.stopPropagation()
                } else {
                    this.cancelBubble = true
                }
                return this
            },
            stopDefaults: function() {
                if (this.preventDefault) {
                    this.preventDefault()
                } else {
                    this.returnValue = false
                }
                return this
            },
            stopQueue: function() {
                this.isQueueStopped = M.$true;
                return this
            },
            getClientXY: function() {
                var W = (/touch/i).test(this.type) ? this.changedTouches[0] : this;
                return !M.defined(W) ? {
                    x: 0,
                    y: 0
                } : {
                    x: W.clientX,
                    y: W.clientY
                }
            },
            jGetPageXY: function() {
                var W = (/touch/i).test(this.type) ? this.changedTouches[0] : this;
                return !M.defined(W) ? {
                    x: 0,
                    y: 0
                } : {
                    x: W.pageX || W.clientX + M.browser.getDoc().scrollLeft,
                    y: W.pageY || W.clientY + M.browser.getDoc().scrollTop
                }
            },
            getTarget: function() {
                var W = this.target || this.srcElement;
                while (W && W.nodeType === 3) {
                    W = W.parentNode
                }
                return W
            },
            getRelated: function() {
                var X = null;
                switch (this.type) {
                    case "mouseover":
                    case "pointerover":
                    case "MSPointerOver":
                        X = this.relatedTarget || this.fromElement;
                        break;
                    case "mouseout":
                    case "pointerout":
                    case "MSPointerOut":
                        X = this.relatedTarget || this.toElement;
                        break;
                    default:
                        return X
                }
                try {
                    while (X && X.nodeType === 3) {
                        X = X.parentNode
                    }
                } catch (W) {
                    X = null
                }
                return X
            },
            getButton: function() {
                if (!this.which && this.button !== undefined) {
                    return (this.button & 1 ? 1 : (this.button & 2 ? 3 : (this.button & 4 ? 2 : 0)))
                }
                return this.which
            },
            isTouchEvent: function() {
                return (this.pointerType && (this.pointerType === "touch" || this.pointerType === this.MSPOINTER_TYPE_TOUCH)) || (/touch/i).test(this.type)
            },
            isPrimaryTouch: function() {
                if (this.pointerType) {
                    return (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) && this.isPrimary
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches.length === 1 && (this.targetTouches.length ? this.targetTouches.length === 1 && this.targetTouches[0].identifier === this.changedTouches[0].identifier : true)
                    }
                }
                return false
            },
            getPrimaryTouch: function() {
                if (this.pointerType) {
                    return this.isPrimary && (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) ? this : null
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches[0]
                    }
                }
                return null
            },
            getPrimaryTouchId: function() {
                if (this.pointerType) {
                    return this.isPrimary && (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) ? this.pointerId : null
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches[0].identifier
                    }
                }
                return null
            }
        };
        M._event_add_ = "addEventListener";
        M._event_del_ = "removeEventListener";
        M._event_prefix_ = "";
        if (!document.addEventListener) {
            M._event_add_ = "attachEvent";
            M._event_del_ = "detachEvent";
            M._event_prefix_ = "on"
        }
        M.Event.Custom = {
            type: "",
            x: null,
            y: null,
            timeStamp: null,
            button: null,
            target: null,
            relatedTarget: null,
            $J_TYPE: "event.custom",
            isQueueStopped: M.$false,
            events: M.$([]),
            pushToEvents: function(W) {
                var X = W;
                this.events.push(X)
            },
            stop: function() {
                return this.stopDistribution().stopDefaults()
            },
            stopDistribution: function() {
                this.events.jEach(function(X) {
                    try {
                        X.stopDistribution()
                    } catch (W) {}
                });
                return this
            },
            stopDefaults: function() {
                this.events.jEach(function(X) {
                    try {
                        X.stopDefaults()
                    } catch (W) {}
                });
                return this
            },
            stopQueue: function() {
                this.isQueueStopped = M.$true;
                return this
            },
            getClientXY: function() {
                return {
                    x: this.clientX,
                    y: this.clientY
                }
            },
            jGetPageXY: function() {
                return {
                    x: this.x,
                    y: this.y
                }
            },
            getTarget: function() {
                return this.target
            },
            getRelated: function() {
                return this.relatedTarget
            },
            getButton: function() {
                return this.button
            },
            getOriginalTarget: function() {
                return this.events.length > 0 ? this.events[0].getTarget() : undefined
            },
            isTouchEvent: function() {
                return (this.pointerType && (this.pointerType === "touch" || this.pointerType === this.MSPOINTER_TYPE_TOUCH)) || (/touch/i).test(this.type)
            },
            isPrimaryTouch: function() {
                if (this.pointerType) {
                    return (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) && this.isPrimary
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches.length === 1 && (this.targetTouches.length ? this.targetTouches[0].identifier === this.changedTouches[0].identifier : true)
                    }
                }
                return false
            },
            getPrimaryTouch: function() {
                if (this.pointerType) {
                    return this.isPrimary && (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) ? this : null
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches[0]
                    }
                }
                return null
            },
            getPrimaryTouchId: function() {
                if (this.pointerType) {
                    return this.isPrimary && (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) ? this.pointerId : null
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches[0].identifier
                    }
                }
                return null
            }
        };
        M.extend([M.Element, M.Doc], {
            jAddEvent: function(Y, aa, ab, ae) {
                var ad, W, Z, ac, X;
                if (M.jTypeOf(Y) === "string") {
                    X = Y.split(" ");
                    if (X.length > 1) {
                        Y = X
                    }
                }
                if (M.jTypeOf(Y) === "array") {
                    M.$(Y).jEach(this.jAddEvent.jBindAsEvent(this, aa, ab, ae));
                    return this
                }
                Y = T[Y] || Y;
                if (!Y || !aa || M.jTypeOf(Y) !== "string" || M.jTypeOf(aa) !== "function") {
                    return this
                }
                if (Y === "domready" && M.browser.ready) {
                    aa.call(this);
                    return this
                }
                ab = parseInt(ab || 50, 10);
                if (!aa.$J_EUID) {
                    aa.$J_EUID = Math.floor(Math.random() * M.now())
                }
                ad = M.Doc.jFetch.call(this, "_EVENTS_", {});
                W = ad[Y];
                if (!W) {
                    ad[Y] = W = M.$([]);
                    Z = this;
                    if (M.Event.Custom[Y]) {
                        M.Event.Custom[Y].handler.add.call(this, ae)
                    } else {
                        W.handle = function(af) {
                            af = M.extend(af || window.e, {
                                $J_TYPE: "event"
                            });
                            M.Doc.jCallEvent.call(Z, Y, M.$(af))
                        };
                        this[M._event_add_](M._event_prefix_ + Y, W.handle, false)
                    }
                }
                ac = {
                    type: Y,
                    fn: aa,
                    priority: ab,
                    euid: aa.$J_EUID
                };
                W.push(ac);
                W.sort(function(ag, af) {
                    return ag.priority - af.priority
                });
                return this
            },
            jRemoveEvent: function(ac) {
                var aa = M.Doc.jFetch.call(this, "_EVENTS_", {});
                var Y;
                var W;
                var X;
                var ad;
                var ab;
                var Z;
                ab = arguments.length > 1 ? arguments[1] : -100;
                if (M.jTypeOf(ac) === "string") {
                    Z = ac.split(" ");
                    if (Z.length > 1) {
                        ac = Z
                    }
                }
                if (M.jTypeOf(ac) === "array") {
                    M.$(ac).jEach(this.jRemoveEvent.jBindAsEvent(this, ab));
                    return this
                }
                ac = T[ac] || ac;
                if (!ac || M.jTypeOf(ac) !== "string" || !aa || !aa[ac]) {
                    return this
                }
                Y = aa[ac] || [];
                for (X = 0; X < Y.length; X++) {
                    W = Y[X];
                    if (ab === -100 || !!ab && ab.$J_EUID === W.euid) {
                        ad = Y.splice(X--, 1)
                    }
                }
                if (Y.length === 0) {
                    if (M.Event.Custom[ac]) {
                        M.Event.Custom[ac].handler.jRemove.call(this)
                    } else {
                        this[M._event_del_](M._event_prefix_ + ac, Y.handle, false)
                    }
                    delete aa[ac]
                }
                return this
            },
            jCallEvent: function(Z, ab) {
                var Y = M.Doc.jFetch.call(this, "_EVENTS_", {});
                var X;
                var W;
                Z = T[Z] || Z;
                if (!Z || M.jTypeOf(Z) !== "string" || !Y || !Y[Z]) {
                    return this
                }
                try {
                    ab = M.extend(ab || {}, {
                        type: Z
                    })
                } catch (aa) {}
                if (ab.timeStamp === undefined) {
                    ab.timeStamp = M.now()
                }
                X = Y[Z] || [];
                for (W = 0; W < X.length && !(ab.isQueueStopped && ab.isQueueStopped()); W++) {
                    X[W].fn.call(this, ab)
                }
            },
            jRaiseEvent: function(X, W) {
                var aa = (X !== "domready");
                var Z = this;
                var Y;
                X = T[X] || X;
                if (!aa) {
                    M.Doc.jCallEvent.call(this, X);
                    return this
                }
                if (Z === document && document.createEvent && !Z.dispatchEvent) {
                    Z = document.documentElement
                }
                if (document.createEvent) {
                    Y = document.createEvent(X);
                    Y.initEvent(W, true, true)
                } else {
                    Y = document.createEventObject();
                    Y.eventType = X
                }
                if (document.createEvent) {
                    Z.dispatchEvent(Y)
                } else {
                    Z.fireEvent("on" + W, Y)
                }
                return Y
            },
            jClearEvents: function() {
                var X = M.Doc.jFetch.call(this, "_EVENTS_");
                if (!X) {
                    return this
                }
                for (var W in X) {
                    M.Doc.jRemoveEvent.call(this, W)
                }
                M.Doc.jDel.call(this, "_EVENTS_");
                return this
            }
        });
        (function(W) {
            if (document.readyState === "complete") {
                return W.browser.onready.jDelay(1)
            }
            if (W.browser.webkit && W.browser.version < 420) {
                (function() {
                    if (W.$(["loaded", "complete"]).contains(document.readyState)) {
                        W.browser.onready()
                    } else {
                        arguments.callee.jDelay(50)
                    }
                }())
            } else {
                if (W.browser.trident && W.browser.ieMode < 9 && window === top) {
                    (function() {
                        if (W.$try(function() {
                                W.browser.getDoc().doScroll("left");
                                return true
                            })) {
                            W.browser.onready()
                        } else {
                            arguments.callee.jDelay(50)
                        }
                    }())
                } else {
                    W.Doc.jAddEvent.call(W.$(document), "DOMContentLoaded", W.browser.onready);
                    W.Doc.jAddEvent.call(W.$(window), "load", W.browser.onready)
                }
            }
        }(S));
        M.Class = function() {
            var aa = null,
                X = M.$A(arguments);
            if ("class" == M.jTypeOf(X[0])) {
                aa = X.shift()
            }
            var W = function() {
                for (var ad in this) {
                    this[ad] = M.detach(this[ad])
                }
                if (this.constructor.$parent) {
                    this.$parent = {};
                    var af = this.constructor.$parent;
                    for (var ae in af) {
                        var ac = af[ae];
                        switch (M.jTypeOf(ac)) {
                            case "function":
                                this.$parent[ae] = M.Class.wrap(this, ac);
                                break;
                            case "object":
                                this.$parent[ae] = M.detach(ac);
                                break;
                            case "array":
                                this.$parent[ae] = M.detach(ac);
                                break
                        }
                    }
                }
                var ab = (this.init) ? this.init.apply(this, arguments) : this;
                delete this.caller;
                return ab
            };
            if (!W.prototype.init) {
                W.prototype.init = M.$F
            }
            if (aa) {
                var Z = function() {};
                Z.prototype = aa.prototype;
                W.prototype = new Z;
                W.$parent = {};
                for (var Y in aa.prototype) {
                    W.$parent[Y] = aa.prototype[Y]
                }
            } else {
                W.$parent = null
            }
            W.constructor = M.Class;
            W.prototype.constructor = W;
            M.extend(W.prototype, X[0]);
            M.extend(W, {
                $J_TYPE: "class"
            });
            return W
        };
        S.Class.wrap = function(W, X) {
            return function() {
                var Z = this.caller;
                var Y = X.apply(W, arguments);
                return Y
            }
        };
        (function(Z) {
            var Y = Z.$;
            var W = 5,
                X = 300;
            Z.Event.Custom.btnclick = new Z.Class(Z.extend(Z.Event.Custom, {
                type: "btnclick",
                init: function(ac, ab) {
                    var aa = ab.jGetPageXY();
                    this.x = aa.x;
                    this.y = aa.y;
                    this.clientX = ab.clientX;
                    this.clientY = ab.clientY;
                    this.timeStamp = ab.timeStamp;
                    this.button = ab.getButton();
                    this.target = ac;
                    this.pushToEvents(ab)
                }
            }));
            Z.Event.Custom.btnclick.handler = {
                options: {
                    threshold: X,
                    button: 1
                },
                add: function(aa) {
                    this.jStore("event:btnclick:options", Z.extend(Z.detach(Z.Event.Custom.btnclick.handler.options), aa || {}));
                    this.jAddEvent("mousedown", Z.Event.Custom.btnclick.handler.handle, 1);
                    this.jAddEvent("mouseup", Z.Event.Custom.btnclick.handler.handle, 1);
                    this.jAddEvent("click", Z.Event.Custom.btnclick.handler.onclick, 1);
                    if (Z.browser.trident && Z.browser.ieMode < 9) {
                        this.jAddEvent("dblclick", Z.Event.Custom.btnclick.handler.handle, 1)
                    }
                },
                jRemove: function() {
                    this.jRemoveEvent("mousedown", Z.Event.Custom.btnclick.handler.handle);
                    this.jRemoveEvent("mouseup", Z.Event.Custom.btnclick.handler.handle);
                    this.jRemoveEvent("click", Z.Event.Custom.btnclick.handler.onclick);
                    if (Z.browser.trident && Z.browser.ieMode < 9) {
                        this.jRemoveEvent("dblclick", Z.Event.Custom.btnclick.handler.handle)
                    }
                },
                onclick: function(aa) {
                    aa.stopDefaults()
                },
                handle: function(ad) {
                    var ac, aa, ab;
                    aa = this.jFetch("event:btnclick:options");
                    if (ad.type != "dblclick" && ad.getButton() != aa.button) {
                        return
                    }
                    if (this.jFetch("event:btnclick:ignore")) {
                        this.jDel("event:btnclick:ignore");
                        return
                    }
                    if ("mousedown" == ad.type) {
                        ac = new Z.Event.Custom.btnclick(this, ad);
                        this.jStore("event:btnclick:btnclickEvent", ac)
                    } else {
                        if ("mouseup" == ad.type) {
                            ac = this.jFetch("event:btnclick:btnclickEvent");
                            if (!ac) {
                                return
                            }
                            ab = ad.jGetPageXY();
                            this.jDel("event:btnclick:btnclickEvent");
                            ac.pushToEvents(ad);
                            if (ad.timeStamp - ac.timeStamp <= aa.threshold && Math.sqrt(Math.pow(ab.x - ac.x, 2) + Math.pow(ab.y - ac.y, 2)) <= W) {
                                this.jCallEvent("btnclick", ac)
                            }
                            document.jCallEvent("mouseup", ad)
                        } else {
                            if (ad.type == "dblclick") {
                                ac = new Z.Event.Custom.btnclick(this, ad);
                                this.jCallEvent("btnclick", ac)
                            }
                        }
                    }
                }
            }
        })(S);
        (function(X) {
            var W = X.$;
            X.Event.Custom.mousedrag = new X.Class(X.extend(X.Event.Custom, {
                type: "mousedrag",
                state: "dragstart",
                dragged: false,
                init: function(ab, aa, Z) {
                    var Y = aa.jGetPageXY();
                    this.x = Y.x;
                    this.y = Y.y;
                    this.clientX = aa.clientX;
                    this.clientY = aa.clientY;
                    this.timeStamp = aa.timeStamp;
                    this.button = aa.getButton();
                    this.target = ab;
                    this.pushToEvents(aa);
                    this.state = Z
                }
            }));
            X.Event.Custom.mousedrag.handler = {
                add: function() {
                    var Z = X.Event.Custom.mousedrag.handler.handleMouseMove.jBindAsEvent(this);
                    var Y = X.Event.Custom.mousedrag.handler.handleMouseUp.jBindAsEvent(this);
                    this.jAddEvent("mousedown", X.Event.Custom.mousedrag.handler.handleMouseDown, 1);
                    this.jAddEvent("mouseup", X.Event.Custom.mousedrag.handler.handleMouseUp, 1);
                    document.jAddEvent("mousemove", Z, 1);
                    document.jAddEvent("mouseup", Y, 1);
                    this.jStore("event:mousedrag:listeners:document:move", Z);
                    this.jStore("event:mousedrag:listeners:document:end", Y)
                },
                jRemove: function() {
                    this.jRemoveEvent("mousedown", X.Event.Custom.mousedrag.handler.handleMouseDown);
                    this.jRemoveEvent("mouseup", X.Event.Custom.mousedrag.handler.handleMouseUp);
                    W(document).jRemoveEvent("mousemove", this.jFetch("event:mousedrag:listeners:document:move") || X.$F);
                    W(document).jRemoveEvent("mouseup", this.jFetch("event:mousedrag:listeners:document:end") || X.$F);
                    this.jDel("event:mousedrag:listeners:document:move");
                    this.jDel("event:mousedrag:listeners:document:end")
                },
                handleMouseDown: function(Z) {
                    var Y;
                    if (Z.getButton() !== 1) {
                        return
                    }
                    Y = new X.Event.Custom.mousedrag(this, Z, "dragstart");
                    this.jStore("event:mousedrag:dragstart", Y)
                },
                handleMouseUp: function(Z) {
                    var Y;
                    Y = this.jFetch("event:mousedrag:dragstart");
                    if (!Y) {
                        return
                    }
                    if (Y.dragged) {
                        Z.stopDefaults()
                    }
                    Y = new X.Event.Custom.mousedrag(this, Z, "dragend");
                    this.jDel("event:mousedrag:dragstart");
                    this.jCallEvent("mousedrag", Y)
                },
                handleMouseMove: function(Z) {
                    var Y;
                    Y = this.jFetch("event:mousedrag:dragstart");
                    if (!Y) {
                        return
                    }
                    Z.stopDefaults();
                    if (!Y.dragged) {
                        Y.dragged = true;
                        this.jCallEvent("mousedrag", Y)
                    }
                    Y = new X.Event.Custom.mousedrag(this, Z, "dragmove");
                    this.jCallEvent("mousedrag", Y)
                }
            }
        })(S);
        (function(X) {
            var W = X.$;
            X.Event.Custom.dblbtnclick = new X.Class(X.extend(X.Event.Custom, {
                type: "dblbtnclick",
                timedout: false,
                tm: null,
                init: function(aa, Z) {
                    var Y = Z.jGetPageXY();
                    this.x = Y.x;
                    this.y = Y.y;
                    this.clientX = Z.clientX;
                    this.clientY = Z.clientY;
                    this.timeStamp = Z.timeStamp;
                    this.button = Z.getButton();
                    this.target = aa;
                    this.pushToEvents(Z)
                }
            }));
            X.Event.Custom.dblbtnclick.handler = {
                options: {
                    threshold: 200
                },
                add: function(Y) {
                    this.jStore("event:dblbtnclick:options", X.extend(X.detach(X.Event.Custom.dblbtnclick.handler.options), Y || {}));
                    this.jAddEvent("btnclick", X.Event.Custom.dblbtnclick.handler.handle, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent("btnclick", X.Event.Custom.dblbtnclick.handler.handle)
                },
                handle: function(aa) {
                    var Z, Y;
                    Z = this.jFetch("event:dblbtnclick:event");
                    Y = this.jFetch("event:dblbtnclick:options");
                    if (!Z) {
                        Z = new X.Event.Custom.dblbtnclick(this, aa);
                        Z.tm = setTimeout(function() {
                            Z.timedout = true;
                            aa.isQueueStopped = X.$false;
                            this.jCallEvent("btnclick", aa);
                            this.jDel("event:dblbtnclick:event")
                        }.jBind(this), Y.threshold + 10);
                        this.jStore("event:dblbtnclick:event", Z);
                        aa.stopQueue()
                    } else {
                        clearTimeout(Z.tm);
                        this.jDel("event:dblbtnclick:event");
                        if (!Z.timedout) {
                            Z.pushToEvents(aa);
                            aa.stopQueue().stop();
                            this.jCallEvent("dblbtnclick", Z)
                        } else {}
                    }
                }
            }
        })(S);
        (function(Z) {
            var Y = Z.$;
            var W = 10;
            var X = 200;
            Z.Event.Custom.tap = new Z.Class(Z.extend(Z.Event.Custom, {
                type: "tap",
                id: null,
                init: function(ab, aa) {
                    var ac = aa.getPrimaryTouch();
                    this.id = ac.pointerId || ac.identifier;
                    this.x = ac.pageX;
                    this.y = ac.pageY;
                    this.pageX = ac.pageX;
                    this.pageY = ac.pageY;
                    this.clientX = ac.clientX;
                    this.clientY = ac.clientY;
                    this.timeStamp = aa.timeStamp;
                    this.button = 0;
                    this.target = ab;
                    this.pushToEvents(aa)
                }
            }));
            Z.Event.Custom.tap.handler = {
                add: function(aa) {
                    this.jAddEvent(["touchstart", "pointerdown"], Z.Event.Custom.tap.handler.onTouchStart, 1);
                    this.jAddEvent(["touchend", "pointerup"], Z.Event.Custom.tap.handler.onTouchEnd, 1);
                    this.jAddEvent("click", Z.Event.Custom.tap.handler.onClick, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent(["touchstart", "pointerdown"], Z.Event.Custom.tap.handler.onTouchStart);
                    this.jRemoveEvent(["touchend", "pointerup"], Z.Event.Custom.tap.handler.onTouchEnd);
                    this.jRemoveEvent("click", Z.Event.Custom.tap.handler.onClick)
                },
                onClick: function(aa) {
                    aa.stopDefaults()
                },
                onTouchStart: function(aa) {
                    if (!aa.isPrimaryTouch()) {
                        this.jDel("event:tap:event");
                        return
                    }
                    this.jStore("event:tap:event", new Z.Event.Custom.tap(this, aa));
                    this.jStore("event:btnclick:ignore", true)
                },
                onTouchEnd: function(ad) {
                    var ab = Z.now();
                    var ac = this.jFetch("event:tap:event");
                    var aa = this.jFetch("event:tap:options");
                    if (!ac || !ad.isPrimaryTouch()) {
                        return
                    }
                    this.jDel("event:tap:event");
                    if (ac.id === ad.getPrimaryTouchId() && ad.timeStamp - ac.timeStamp <= X && Math.sqrt(Math.pow(ad.getPrimaryTouch().pageX - ac.x, 2) + Math.pow(ad.getPrimaryTouch().pageY - ac.y, 2)) <= W) {
                        this.jDel("event:btnclick:btnclickEvent");
                        ad.stop();
                        ac.pushToEvents(ad);
                        this.jCallEvent("tap", ac)
                    }
                }
            }
        }(S));
        M.Event.Custom.dbltap = new M.Class(M.extend(M.Event.Custom, {
            type: "dbltap",
            timedout: false,
            tm: null,
            init: function(X, W) {
                this.x = W.x;
                this.y = W.y;
                this.clientX = W.clientX;
                this.clientY = W.clientY;
                this.timeStamp = W.timeStamp;
                this.button = 0;
                this.target = X;
                this.pushToEvents(W)
            }
        }));
        M.Event.Custom.dbltap.handler = {
            options: {
                threshold: 300
            },
            add: function(W) {
                this.jStore("event:dbltap:options", M.extend(M.detach(M.Event.Custom.dbltap.handler.options), W || {}));
                this.jAddEvent("tap", M.Event.Custom.dbltap.handler.handle, 1)
            },
            jRemove: function() {
                this.jRemoveEvent("tap", M.Event.Custom.dbltap.handler.handle)
            },
            handle: function(Y) {
                var X, W;
                X = this.jFetch("event:dbltap:event");
                W = this.jFetch("event:dbltap:options");
                if (!X) {
                    X = new M.Event.Custom.dbltap(this, Y);
                    X.tm = setTimeout(function() {
                        X.timedout = true;
                        Y.isQueueStopped = M.$false;
                        this.jCallEvent("tap", Y)
                    }.jBind(this), W.threshold + 10);
                    this.jStore("event:dbltap:event", X);
                    Y.stopQueue()
                } else {
                    clearTimeout(X.tm);
                    this.jDel("event:dbltap:event");
                    if (!X.timedout) {
                        X.pushToEvents(Y);
                        Y.stopQueue().stop();
                        this.jCallEvent("dbltap", X)
                    } else {}
                }
            }
        };
        (function(Y) {
            var X = Y.$;
            var W = 10;
            Y.Event.Custom.touchdrag = new Y.Class(Y.extend(Y.Event.Custom, {
                type: "touchdrag",
                state: "dragstart",
                id: null,
                dragged: false,
                init: function(ab, aa, Z) {
                    var ac = aa.getPrimaryTouch();
                    this.id = ac.pointerId || ac.identifier;
                    this.clientX = ac.clientX;
                    this.clientY = ac.clientY;
                    this.pageX = ac.pageX;
                    this.pageY = ac.pageY;
                    this.x = ac.pageX;
                    this.y = ac.pageY;
                    this.timeStamp = aa.timeStamp;
                    this.button = 0;
                    this.target = ab;
                    this.pushToEvents(aa);
                    this.state = Z
                }
            }));
            Y.Event.Custom.touchdrag.handler = {
                add: function() {
                    var aa = Y.Event.Custom.touchdrag.handler.onTouchMove.jBind(this);
                    var Z = Y.Event.Custom.touchdrag.handler.onTouchEnd.jBind(this);
                    this.jAddEvent(["touchstart", "pointerdown"], Y.Event.Custom.touchdrag.handler.onTouchStart, 1);
                    this.jAddEvent(["touchend", "pointerup"], Y.Event.Custom.touchdrag.handler.onTouchEnd, 1);
                    this.jAddEvent(["touchmove", "pointermove"], Y.Event.Custom.touchdrag.handler.onTouchMove, 1);
                    this.jStore("event:touchdrag:listeners:document:move", aa);
                    this.jStore("event:touchdrag:listeners:document:end", Z);
                    X(document).jAddEvent("pointermove", aa, 1);
                    X(document).jAddEvent("pointerup", Z, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent(["touchstart", "pointerdown"], Y.Event.Custom.touchdrag.handler.onTouchStart);
                    this.jRemoveEvent(["touchend", "pointerup"], Y.Event.Custom.touchdrag.handler.onTouchEnd);
                    this.jRemoveEvent(["touchmove", "pointermove"], Y.Event.Custom.touchdrag.handler.onTouchMove);
                    X(document).jRemoveEvent("pointermove", this.jFetch("event:touchdrag:listeners:document:move") || Y.$F, 1);
                    X(document).jRemoveEvent("pointerup", this.jFetch("event:touchdrag:listeners:document:end") || Y.$F, 1);
                    this.jDel("event:touchdrag:listeners:document:move");
                    this.jDel("event:touchdrag:listeners:document:end")
                },
                onTouchStart: function(aa) {
                    var Z;
                    if (!aa.isPrimaryTouch()) {
                        return
                    }
                    Z = new Y.Event.Custom.touchdrag(this, aa, "dragstart");
                    this.jStore("event:touchdrag:dragstart", Z)
                },
                onTouchEnd: function(aa) {
                    var Z;
                    Z = this.jFetch("event:touchdrag:dragstart");
                    if (!Z || !Z.dragged || Z.id !== aa.getPrimaryTouchId()) {
                        return
                    }
                    Z = new Y.Event.Custom.touchdrag(this, aa, "dragend");
                    this.jDel("event:touchdrag:dragstart");
                    this.jCallEvent("touchdrag", Z)
                },
                onTouchMove: function(aa) {
                    var Z;
                    Z = this.jFetch("event:touchdrag:dragstart");
                    if (!Z || !aa.isPrimaryTouch()) {
                        return
                    }
                    if (Z.id !== aa.getPrimaryTouchId()) {
                        this.jDel("event:touchdrag:dragstart");
                        return
                    }
                    if (!Z.dragged && Math.sqrt(Math.pow(aa.getPrimaryTouch().pageX - Z.x, 2) + Math.pow(aa.getPrimaryTouch().pageY - Z.y, 2)) > W) {
                        Z.dragged = true;
                        this.jCallEvent("touchdrag", Z)
                    }
                    if (!Z.dragged) {
                        return
                    }
                    Z = new Y.Event.Custom.touchdrag(this, aa, "dragmove");
                    this.jCallEvent("touchdrag", Z)
                }
            }
        }(S));
        (function(Z) {
            var ad = Z.$;
            var aa = null;

            function W(am, al) {
                var ak = al.x - am.x;
                var an = al.y - am.y;
                return Math.sqrt(ak * ak + an * an)
            }

            function af(aq, ar) {
                var ap = Array.prototype.slice.call(aq);
                var ao = Math.abs(ap[1].pageX - ap[0].pageX);
                var am = Math.abs(ap[1].pageY - ap[0].pageY);
                var an = Math.min(ap[1].pageX, ap[0].pageX) + ao / 2;
                var al = Math.min(ap[1].pageY, ap[0].pageY) + am / 2;
                var ak = 0;
                ar.points = [ap[0], ap[1]];
                ak = Math.pow(W({
                    x: ap[0].pageX,
                    y: ap[0].pageY
                }, {
                    x: ap[1].pageX,
                    y: ap[1].pageY
                }), 2);
                ar.centerPoint = {
                    x: an,
                    y: al
                };
                ar.x = ar.centerPoint.x;
                ar.y = ar.centerPoint.y;
                return ak
            }

            function ai(ak) {
                return ak / aa
            }

            function X(am, al) {
                var ak;
                if (am.targetTouches && am.changedTouches) {
                    if (am.targetTouches) {
                        ak = am.targetTouches
                    } else {
                        ak = am.changedTouches
                    }
                    ak = Array.prototype.slice.call(ak)
                } else {
                    ak = [];
                    if (al) {
                        al.forEach(function(an) {
                            ak.push(an)
                        })
                    }
                }
                return ak
            }

            function Y(an, am, al) {
                var ak = false;
                if (an.pointerId && an.pointerType === "touch" && (!al || am.has(an.pointerId))) {
                    am.set(an.pointerId, an);
                    ak = true
                }
                return ak
            }

            function ae(al, ak) {
                if (al.pointerId && al.pointerType === "touch" && ak && ak.has(al.pointerId)) {
                    ak["delete"](al.pointerId)
                }
            }

            function ah(al) {
                var ak;
                if (al.pointerId && al.pointerType === "touch") {
                    ak = al.pointerId
                } else {
                    ak = al.identifier
                }
                return ak
            }

            function ac(an, al) {
                var am;
                var ao;
                var ak = false;
                for (am = 0; am < an.length; am++) {
                    if (al.length === 2) {
                        break
                    } else {
                        ao = ah(an[am]);
                        if (!al.contains(ao)) {
                            al.push(ao);
                            ak = true
                        }
                    }
                }
                return ak
            }

            function ag(al) {
                var ak = ad([]);
                al.forEach(function(am) {
                    ak.push(ah(am))
                });
                return ak
            }

            function aj(ao, al) {
                var am;
                var an;
                var ak = false;
                if (al) {
                    an = ag(ao);
                    for (am = 0; am < al.length; am++) {
                        if (!an.contains(al[am])) {
                            al.splice(am, 1);
                            ak = true;
                            break
                        }
                    }
                }
                return ak
            }

            function ab(an, al) {
                var am;
                var ak = ad([]);
                for (am = 0; am < an.length; am++) {
                    if (al.contains(ah(an[am]))) {
                        ak.push(an[am]);
                        if (ak.length === 2) {
                            break
                        }
                    }
                }
                return ak
            }
            Z.Event.Custom.pinch = new Z.Class(Z.extend(Z.Event.Custom, {
                type: "pinch",
                state: "pinchstart",
                init: function(am, al, ak, an) {
                    this.target = am;
                    this.state = ak;
                    this.x = an.x;
                    this.y = an.y;
                    this.timeStamp = al.timeStamp;
                    this.scale = an.scale;
                    this.space = an.space;
                    this.zoom = an.zoom;
                    this.state = ak;
                    this.centerPoint = an.centerPoint;
                    this.points = an.points;
                    this.pushToEvents(al)
                }
            }));
            Z.Event.Custom.pinch.handler = {
                variables: {
                    x: 0,
                    y: 0,
                    space: 0,
                    scale: 1,
                    zoom: 0,
                    startSpace: 0,
                    startScale: 1,
                    started: false,
                    dragged: false,
                    points: [],
                    centerPoint: {
                        x: 0,
                        y: 0
                    }
                },
                add: function(am) {
                    if (!aa) {
                        aa = (function() {
                            var an = ad(window).jGetSize();
                            an.width = Math.min(an.width, an.height);
                            an.height = an.width;
                            return Math.pow(W({
                                x: 0,
                                y: 0
                            }, {
                                x: an.width,
                                y: an.height
                            }), 2)
                        })()
                    }
                    var al = Z.Event.Custom.pinch.handler.onTouchMove.jBind(this);
                    var ak = Z.Event.Custom.pinch.handler.onTouchEnd.jBind(this);
                    this.jAddEvent(["click", "tap"], Z.Event.Custom.pinch.handler.onClick, 1);
                    this.jAddEvent(["touchstart", "pointerdown"], Z.Event.Custom.pinch.handler.onTouchStart, 1);
                    this.jAddEvent(["touchend", "pointerup"], Z.Event.Custom.pinch.handler.onTouchEnd, 1);
                    this.jAddEvent(["touchmove", "pointermove"], Z.Event.Custom.pinch.handler.onTouchMove, 1);
                    this.jStore("event:pinch:listeners:touchmove", al);
                    this.jStore("event:pinch:listeners:touchend", ak);
                    Z.doc.jAddEvent("pointermove", al, 1);
                    Z.doc.jAddEvent("pointerup", ak, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent(["click", "tap"], Z.Event.Custom.pinch.handler.onClick);
                    this.jRemoveEvent(["touchstart", "pointerdown"], Z.Event.Custom.pinch.handler.onTouchStart);
                    this.jRemoveEvent(["touchend", "pointerup"], Z.Event.Custom.pinch.handler.onTouchEnd);
                    this.jRemoveEvent(["touchmove", "pointermove"], Z.Event.Custom.pinch.handler.onTouchMove);
                    Z.doc.jRemoveEvent("pointermove", this.jFetch("event:pinch:listeners:touchmove"));
                    Z.doc.jRemoveEvent("pointerup", this.jFetch("event:pinch:listeners:touchend"));
                    this.jDel("event:pinch:listeners:touchmove");
                    this.jDel("event:pinch:listeners:touchend");
                    this.jDel("event:pinch:pinchstart");
                    this.jDel("event:pinch:variables");
                    this.jDel("event:pinch:activepoints");
                    var ak = this.jFetch("event:pinch:cache");
                    if (ak) {
                        ak.clear()
                    }
                    this.jDel("event:pinch:cache")
                },
                onClick: function(ak) {
                    ak.stop()
                },
                setVariables: function(al, am) {
                    var ak = am.space;
                    if (al.length > 1) {
                        am.space = af(al, am);
                        if (!am.startSpace) {
                            am.startSpace = am.space
                        }
                        if (ak > am.space) {
                            am.zoom = -1
                        } else {
                            if (ak < am.space) {
                                am.zoom = 1
                            } else {
                                am.zoom = 0
                            }
                        }
                        am.scale = ai(am.space)
                    } else {
                        am.points = Array.prototype.slice.call(al, 0, 2)
                    }
                },
                onTouchMove: function(am) {
                    var al;
                    var ak = this.jFetch("event:pinch:cache");
                    var ao = this.jFetch("event:pinch:variables") || Z.extend({}, Z.Event.Custom.pinch.handler.variables);
                    var an = this.jFetch("event:pinch:activepoints");
                    if (ao.started) {
                        if (am.pointerId && !Y(am, ak, true)) {
                            return
                        }
                        am.stop();
                        Z.Event.Custom.pinch.handler.setVariables(ab(X(am, ak), an), ao);
                        al = new Z.Event.Custom.pinch(this, am, "pinchmove", ao);
                        this.jCallEvent("pinch", al)
                    }
                },
                onTouchStart: function(an) {
                    var al;
                    var ap;
                    var am;
                    var ak = this.jFetch("event:pinch:cache");
                    var ao = this.jFetch("event:pinch:activepoints");
                    if (an.pointerType === "mouse") {
                        return
                    }
                    if (!ao) {
                        ao = ad([]);
                        this.jStore("event:pinch:activepoints", ao)
                    }
                    if (!ao.length) {
                        ad(an.target).jAddEvent(["touchend", "pointerup"], this.jFetch("event:pinch:listeners:touchend"), 1)
                    }
                    if (!ak) {
                        ak = new Map();
                        this.jStore("event:pinch:cache", ak)
                    }
                    Y(an, ak);
                    am = X(an, ak);
                    ac(am, ao);
                    if (am.length === 2) {
                        al = this.jFetch("event:pinch:pinchstart");
                        ap = this.jFetch("event:pinch:variables") || Z.extend({}, Z.Event.Custom.pinch.handler.variables);
                        Z.Event.Custom.pinch.handler.setVariables(ab(am, ao), ap);
                        if (!al) {
                            al = new Z.Event.Custom.pinch(this, an, "pinchstart", ap);
                            this.jStore("event:pinch:pinchstart", al);
                            this.jStore("event:pinch:variables", ap);
                            aa = ap.space;
                            this.jCallEvent("pinch", al);
                            ap.started = true
                        }
                    }
                },
                onTouchEnd: function(ap) {
                    var ao;
                    var an;
                    var ar;
                    var al;
                    var am = this.jFetch("event:pinch:cache");
                    var aq;
                    var ak;
                    if (ap.pointerType === "mouse" || ap.pointerId && (!am || !am.has(ap.pointerId))) {
                        return
                    }
                    an = this.jFetch("event:pinch:pinchstart");
                    ar = this.jFetch("event:pinch:variables");
                    aq = this.jFetch("event:pinch:activepoints");
                    ao = X(ap, am);
                    ae(ap, am);
                    ak = aj(ao, aq);
                    if (!an || !ar || !ar.started || !ak || !aq) {
                        return
                    }
                    if (ak) {
                        ac(ao, aq)
                    }
                    al = "pinchend";
                    if (ao.length > 1) {
                        al = "pinchresize"
                    } else {
                        ap.target.jRemoveEvent(["touchend", "pointerup"], this.jFetch("event:pinch:listeners:touchend"));
                        if (am) {
                            am.clear()
                        }
                        this.jDel("event:pinch:pinchstart");
                        this.jDel("event:pinch:variables");
                        this.jDel("event:pinch:cache");
                        this.jDel("event:pinch:activepoints")
                    }
                    Z.Event.Custom.pinch.handler.setVariables(ab(ao, aq), ar);
                    an = new Z.Event.Custom.pinch(this, ap, al, ar);
                    this.jCallEvent("pinch", an)
                }
            }
        }(S));
        (function(ab) {
            var Z = ab.$;
            ab.Event.Custom.mousescroll = new ab.Class(ab.extend(ab.Event.Custom, {
                type: "mousescroll",
                init: function(ah, ag, aj, ad, ac, ai, ae) {
                    var af = ag.jGetPageXY();
                    this.x = af.x;
                    this.y = af.y;
                    this.timeStamp = ag.timeStamp;
                    this.target = ah;
                    this.delta = aj || 0;
                    this.deltaX = ad || 0;
                    this.deltaY = ac || 0;
                    this.deltaZ = ai || 0;
                    this.deltaFactor = ae || 0;
                    this.deltaMode = ag.deltaMode || 0;
                    this.isMouse = false;
                    this.pushToEvents(ag)
                }
            }));
            var aa, X;

            function W() {
                aa = null
            }

            function Y(ac, ad) {
                return (ac > 50) || (1 === ad && !("win" == ab.browser.platform && ac < 1)) || (0 === ac % 12) || (0 == ac % 4.000244140625)
            }
            ab.Event.Custom.mousescroll.handler = {
                eventType: "onwheel" in document || ab.browser.ieMode > 8 ? "wheel" : "mousewheel",
                add: function() {
                    this.jAddEvent(ab.Event.Custom.mousescroll.handler.eventType, ab.Event.Custom.mousescroll.handler.handle, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent(ab.Event.Custom.mousescroll.handler.eventType, ab.Event.Custom.mousescroll.handler.handle, 1)
                },
                handle: function(ah) {
                    var ai = 0,
                        af = 0,
                        ad = 0,
                        ac = 0,
                        ag, ae;
                    if (ah.detail) {
                        ad = ah.detail * -1
                    }
                    if (ah.wheelDelta !== undefined) {
                        ad = ah.wheelDelta
                    }
                    if (ah.wheelDeltaY !== undefined) {
                        ad = ah.wheelDeltaY
                    }
                    if (ah.wheelDeltaX !== undefined) {
                        af = ah.wheelDeltaX * -1
                    }
                    if (ah.deltaY) {
                        ad = -1 * ah.deltaY
                    }
                    if (ah.deltaX) {
                        af = ah.deltaX
                    }
                    if (0 === ad && 0 === af) {
                        return
                    }
                    ai = 0 === ad ? af : ad;
                    ac = Math.max(Math.abs(ad), Math.abs(af));
                    if (!aa || ac < aa) {
                        aa = ac
                    }
                    ag = ai > 0 ? "floor" : "ceil";
                    ai = Math[ag](ai / aa);
                    af = Math[ag](af / aa);
                    ad = Math[ag](ad / aa);
                    if (X) {
                        clearTimeout(X)
                    }
                    X = setTimeout(W, 200);
                    ae = new ab.Event.Custom.mousescroll(this, ah, ai, af, ad, 0, aa);
                    ae.isMouse = Y(aa, ah.deltaMode || 0);
                    this.jCallEvent("mousescroll", ae)
                }
            }
        })(S);
        M.win = M.$(window);
        M.doc = M.$(document);
        return S
    })();
    (function(I) {
        if (!I) {
            throw "MagicJS not found"
        }
        var H = I.$;
        var G = window.URL || window.webkitURL || null;
        u.ImageLoader = new I.Class({
            img: null,
            ready: false,
            options: {
                onprogress: I.$F,
                onload: I.$F,
                onabort: I.$F,
                onerror: I.$F,
                oncomplete: I.$F,
                onxhrerror: I.$F,
                xhr: false,
                progressiveLoad: true
            },
            size: null,
            _timer: null,
            loadedBytes: 0,
            _handlers: {
                onprogress: function(J) {
                    if (J.target && (200 === J.target.status || 304 === J.target.status) && J.lengthComputable) {
                        this.options.onprogress.jBind(null, (J.loaded - (this.options.progressiveLoad ? this.loadedBytes : 0)) / J.total).jDelay(1);
                        this.loadedBytes = J.loaded
                    }
                },
                onload: function(J) {
                    if (J) {
                        H(J).stop()
                    }
                    this._unbind();
                    if (this.ready) {
                        return
                    }
                    this.ready = true;
                    this._cleanup();
                    !this.options.xhr && this.options.onprogress.jBind(null, 1).jDelay(1);
                    this.options.onload.jBind(null, this).jDelay(1);
                    this.options.oncomplete.jBind(null, this).jDelay(1)
                },
                onabort: function(J) {
                    if (J) {
                        H(J).stop()
                    }
                    this._unbind();
                    this.ready = false;
                    this._cleanup();
                    this.options.onabort.jBind(null, this).jDelay(1);
                    this.options.oncomplete.jBind(null, this).jDelay(1)
                },
                onerror: function(J) {
                    if (J) {
                        H(J).stop()
                    }
                    this._unbind();
                    this.ready = false;
                    this._cleanup();
                    this.options.onerror.jBind(null, this).jDelay(1);
                    this.options.oncomplete.jBind(null, this).jDelay(1)
                }
            },
            _bind: function() {
                H(["load", "abort", "error"]).jEach(function(J) {
                    this.img.jAddEvent(J, this._handlers["on" + J].jBindAsEvent(this).jDefer(1))
                }, this)
            },
            _unbind: function() {
                if (this._timer) {
                    try {
                        clearTimeout(this._timer)
                    } catch (J) {}
                    this._timer = null
                }
                H(["load", "abort", "error"]).jEach(function(K) {
                    this.img.jRemoveEvent(K)
                }, this)
            },
            _cleanup: function() {
                this.jGetSize();
                if (this.img.jFetch("new")) {
                    var J = this.img.parentNode;
                    this.img.jRemove().jDel("new").jSetCss({
                        position: "static",
                        top: "auto"
                    });
                    J.kill()
                }
            },
            loadBlob: function(K) {
                var L = new XMLHttpRequest(),
                    J;
                H(["abort", "progress"]).jEach(function(M) {
                    L["on" + M] = H(function(N) {
                        this._handlers["on" + M].call(this, N)
                    }).jBind(this)
                }, this);
                L.onerror = H(function() {
                    this.options.onxhrerror.jBind(null, this).jDelay(1);
                    this.options.xhr = false;
                    this._bind();
                    this.img.src = K
                }).jBind(this);
                L.onload = H(function() {
                    if (200 !== L.status && 304 !== L.status) {
                        this._handlers.onerror.call(this);
                        return
                    }
                    J = L.response;
                    this._bind();
                    if (G && !I.browser.trident && !("ios" === I.browser.platform && I.browser.version < 537)) {
                        this.img.setAttribute("src", G.createObjectURL(J))
                    } else {
                        this.img.src = K
                    }
                }).jBind(this);
                L.open("GET", K);
                L.responseType = "blob";
                L.send()
            },
            init: function(K, J) {
                this.options = I.extend(this.options, J);
                this.img = H(K) || I.$new("img", {}, {
                    "max-width": "none",
                    "max-height": "none"
                }).jAppendTo(I.$new("div").jAddClass("magic-temporary-img").jSetCss({
                    position: "absolute",
                    top: -10000,
                    width: 10,
                    height: 10,
                    overflow: "hidden"
                }).jAppendTo(document.body)).jStore("new", true);
                if (I.browser.features.xhr2 && this.options.xhr && "string" == I.jTypeOf(K)) {
                    this.loadBlob(K);
                    return
                }
                var L = function() {
                    if (this.isReady()) {
                        this._handlers.onload.call(this)
                    } else {
                        this._handlers.onerror.call(this)
                    }
                    L = null
                }.jBind(this);
                this._bind();
                if ("string" == I.jTypeOf(K)) {
                    this.img.src = K
                } else {
                    if (I.browser.trident && 5 == I.browser.version && I.browser.ieMode < 9) {
                        this.img.onreadystatechange = function() {
                            if (/loaded|complete/.test(this.img.readyState)) {
                                this.img.onreadystatechange = null;
                                L && L()
                            }
                        }.jBind(this)
                    }
                    this.img.src = K.getAttribute("src")
                }
                this.img && this.img.complete && L && (this._timer = L.jDelay(100))
            },
            destroy: function() {
                this._unbind();
                this._cleanup();
                this.ready = false;
                return this
            },
            isReady: function() {
                var J = this.img;
                return (J.naturalWidth) ? (J.naturalWidth > 0) : (J.readyState) ? ("complete" == J.readyState) : J.width > 0
            },
            jGetSize: function() {
                return this.size || (this.size = {
                    width: this.img.naturalWidth || this.img.width,
                    height: this.img.naturalHeight || this.img.height
                })
            }
        })
    })(u);
    (function(H) {
        if (!H) {
            throw "MagicJS not found"
        }
        if (H.FX) {
            return
        }
        var G = H.$;
        H.FX = new H.Class({
            init: function(J, I) {
                var K;
                this.el = H.$(J);
                this.options = H.extend(this.options, I);
                this.timer = false;
                this.easeFn = this.cubicBezierAtTime;
                K = H.FX.Transition[this.options.transition] || this.options.transition;
                if ("function" === H.jTypeOf(K)) {
                    this.easeFn = K
                } else {
                    this.cubicBezier = this.parseCubicBezier(K) || this.parseCubicBezier("ease")
                }
                if ("string" == H.jTypeOf(this.options.cycles)) {
                    this.options.cycles = "infinite" === this.options.cycles ? Infinity : parseInt(this.options.cycles) || 1
                }
            },
            options: {
                fps: 60,
                duration: 600,
                transition: "ease",
                cycles: 1,
                direction: "normal",
                onStart: H.$F,
                onComplete: H.$F,
                onBeforeRender: H.$F,
                onAfterRender: H.$F,
                forceAnimation: false,
                roundCss: false
            },
            styles: null,
            cubicBezier: null,
            easeFn: null,
            setTransition: function(I) {
                this.options.transition = I;
                I = H.FX.Transition[this.options.transition] || this.options.transition;
                if ("function" === H.jTypeOf(I)) {
                    this.easeFn = I
                } else {
                    this.easeFn = this.cubicBezierAtTime;
                    this.cubicBezier = this.parseCubicBezier(I) || this.parseCubicBezier("ease")
                }
            },
            start: function(K) {
                var I = /\%$/,
                    J;
                this.styles = K || {};
                this.cycle = 0;
                this.state = 0;
                this.curFrame = 0;
                this.pStyles = {};
                this.alternate = "alternate" === this.options.direction || "alternate-reverse" === this.options.direction;
                this.continuous = "continuous" === this.options.direction || "continuous-reverse" === this.options.direction;
                for (J in this.styles) {
                    I.test(this.styles[J][0]) && (this.pStyles[J] = true);
                    if ("reverse" === this.options.direction || "alternate-reverse" === this.options.direction || "continuous-reverse" === this.options.direction) {
                        this.styles[J].reverse()
                    }
                }
                this.startTime = H.now();
                this.finishTime = this.startTime + this.options.duration;
                this.options.onStart.call();
                if (0 === this.options.duration) {
                    this.render(1);
                    this.options.onComplete.call()
                } else {
                    this.loopBind = this.loop.jBind(this);
                    if (!this.options.forceAnimation && H.browser.features.requestAnimationFrame) {
                        this.timer = H.browser.requestAnimationFrame.call(window, this.loopBind)
                    } else {
                        this.timer = this.loopBind.interval(Math.round(1000 / this.options.fps))
                    }
                }
                return this
            },
            stopAnimation: function() {
                if (this.timer) {
                    if (!this.options.forceAnimation && H.browser.features.requestAnimationFrame && H.browser.cancelAnimationFrame) {
                        H.browser.cancelAnimationFrame.call(window, this.timer)
                    } else {
                        clearInterval(this.timer)
                    }
                    this.timer = false
                }
            },
            stop: function(I) {
                I = H.defined(I) ? I : false;
                this.stopAnimation();
                if (I) {
                    this.render(1);
                    this.options.onComplete.jDelay(10)
                }
                return this
            },
            calc: function(K, J, I) {
                K = parseFloat(K);
                J = parseFloat(J);
                return (J - K) * I + K
            },
            loop: function() {
                var J = H.now(),
                    I = (J - this.startTime) / this.options.duration,
                    K = Math.floor(I);
                if (J >= this.finishTime && K >= this.options.cycles) {
                    this.stopAnimation();
                    this.render(1);
                    this.options.onComplete.jDelay(10);
                    return this
                }
                if (this.alternate && this.cycle < K) {
                    for (var L in this.styles) {
                        this.styles[L].reverse()
                    }
                }
                this.cycle = K;
                if (!this.options.forceAnimation && H.browser.features.requestAnimationFrame) {
                    this.timer = H.browser.requestAnimationFrame.call(window, this.loopBind)
                }
                this.render((this.continuous ? K : 0) + this.easeFn(I % 1))
            },
            render: function(I) {
                var J = {},
                    L = I;
                for (var K in this.styles) {
                    if ("opacity" === K) {
                        J[K] = Math.round(this.calc(this.styles[K][0], this.styles[K][1], I) * 100) / 100
                    } else {
                        J[K] = this.calc(this.styles[K][0], this.styles[K][1], I);
                        this.pStyles[K] && (J[K] += "%")
                    }
                }
                this.options.onBeforeRender(J, this.el);
                this.set(J);
                this.options.onAfterRender(J, this.el)
            },
            set: function(I) {
                return this.el.jSetCss(I)
            },
            parseCubicBezier: function(I) {
                var J, K = null;
                if ("string" !== H.jTypeOf(I)) {
                    return null
                }
                switch (I) {
                    case "linear":
                        K = G([0, 0, 1, 1]);
                        break;
                    case "ease":
                        K = G([0.25, 0.1, 0.25, 1]);
                        break;
                    case "ease-in":
                        K = G([0.42, 0, 1, 1]);
                        break;
                    case "ease-out":
                        K = G([0, 0, 0.58, 1]);
                        break;
                    case "ease-in-out":
                        K = G([0.42, 0, 0.58, 1]);
                        break;
                    case "easeInSine":
                        K = G([0.47, 0, 0.745, 0.715]);
                        break;
                    case "easeOutSine":
                        K = G([0.39, 0.575, 0.565, 1]);
                        break;
                    case "easeInOutSine":
                        K = G([0.445, 0.05, 0.55, 0.95]);
                        break;
                    case "easeInQuad":
                        K = G([0.55, 0.085, 0.68, 0.53]);
                        break;
                    case "easeOutQuad":
                        K = G([0.25, 0.46, 0.45, 0.94]);
                        break;
                    case "easeInOutQuad":
                        K = G([0.455, 0.03, 0.515, 0.955]);
                        break;
                    case "easeInCubic":
                        K = G([0.55, 0.055, 0.675, 0.19]);
                        break;
                    case "easeOutCubic":
                        K = G([0.215, 0.61, 0.355, 1]);
                        break;
                    case "easeInOutCubic":
                        K = G([0.645, 0.045, 0.355, 1]);
                        break;
                    case "easeInQuart":
                        K = G([0.895, 0.03, 0.685, 0.22]);
                        break;
                    case "easeOutQuart":
                        K = G([0.165, 0.84, 0.44, 1]);
                        break;
                    case "easeInOutQuart":
                        K = G([0.77, 0, 0.175, 1]);
                        break;
                    case "easeInQuint":
                        K = G([0.755, 0.05, 0.855, 0.06]);
                        break;
                    case "easeOutQuint":
                        K = G([0.23, 1, 0.32, 1]);
                        break;
                    case "easeInOutQuint":
                        K = G([0.86, 0, 0.07, 1]);
                        break;
                    case "easeInExpo":
                        K = G([0.95, 0.05, 0.795, 0.035]);
                        break;
                    case "easeOutExpo":
                        K = G([0.19, 1, 0.22, 1]);
                        break;
                    case "easeInOutExpo":
                        K = G([1, 0, 0, 1]);
                        break;
                    case "easeInCirc":
                        K = G([0.6, 0.04, 0.98, 0.335]);
                        break;
                    case "easeOutCirc":
                        K = G([0.075, 0.82, 0.165, 1]);
                        break;
                    case "easeInOutCirc":
                        K = G([0.785, 0.135, 0.15, 0.86]);
                        break;
                    case "easeInBack":
                        K = G([0.6, -0.28, 0.735, 0.045]);
                        break;
                    case "easeOutBack":
                        K = G([0.175, 0.885, 0.32, 1.275]);
                        break;
                    case "easeInOutBack":
                        K = G([0.68, -0.55, 0.265, 1.55]);
                        break;
                    default:
                        I = I.replace(/\s/g, "");
                        if (I.match(/^cubic-bezier\((?:-?[0-9\.]{0,}[0-9]{1,},){3}(?:-?[0-9\.]{0,}[0-9]{1,})\)$/)) {
                            K = I.replace(/^cubic-bezier\s*\(|\)$/g, "").split(",");
                            for (J = K.length - 1; J >= 0; J--) {
                                K[J] = parseFloat(K[J])
                            }
                        }
                }
                return G(K)
            },
            cubicBezierAtTime: function(U) {
                var I = 0,
                    T = 0,
                    Q = 0,
                    V = 0,
                    S = 0,
                    O = 0,
                    P = this.options.duration;

                function N(W) {
                    return ((I * W + T) * W + Q) * W
                }

                function M(W) {
                    return ((V * W + S) * W + O) * W
                }

                function K(W) {
                    return (3 * I * W + 2 * T) * W + Q
                }

                function R(W) {
                    return 1 / (200 * W)
                }

                function J(W, X) {
                    return M(L(W, X))
                }

                function L(ad, ae) {
                    var ac, ab, aa, X, W, Z;

                    function Y(af) {
                        if (af >= 0) {
                            return af
                        } else {
                            return 0 - af
                        }
                    }
                    for (aa = ad, Z = 0; Z < 8; Z++) {
                        X = N(aa) - ad;
                        if (Y(X) < ae) {
                            return aa
                        }
                        W = K(aa);
                        if (Y(W) < 0.000001) {
                            break
                        }
                        aa = aa - X / W
                    }
                    ac = 0;
                    ab = 1;
                    aa = ad;
                    if (aa < ac) {
                        return ac
                    }
                    if (aa > ab) {
                        return ab
                    }
                    while (ac < ab) {
                        X = N(aa);
                        if (Y(X - ad) < ae) {
                            return aa
                        }
                        if (ad > X) {
                            ac = aa
                        } else {
                            ab = aa
                        }
                        aa = (ab - ac) * 0.5 + ac
                    }
                    return aa
                }
                Q = 3 * this.cubicBezier[0];
                T = 3 * (this.cubicBezier[2] - this.cubicBezier[0]) - Q;
                I = 1 - Q - T;
                O = 3 * this.cubicBezier[1];
                S = 3 * (this.cubicBezier[3] - this.cubicBezier[1]) - O;
                V = 1 - O - S;
                return J(U, R(P))
            }
        });
        H.FX.Transition = {
            linear: "linear",
            sineIn: "easeInSine",
            sineOut: "easeOutSine",
            expoIn: "easeInExpo",
            expoOut: "easeOutExpo",
            quadIn: "easeInQuad",
            quadOut: "easeOutQuad",
            cubicIn: "easeInCubic",
            cubicOut: "easeOutCubic",
            backIn: "easeInBack",
            backOut: "easeOutBack",
            elasticIn: function(J, I) {
                I = I || [];
                return Math.pow(2, 10 * --J) * Math.cos(20 * J * Math.PI * (I[0] || 1) / 3)
            },
            elasticOut: function(J, I) {
                return 1 - H.FX.Transition.elasticIn(1 - J, I)
            },
            bounceIn: function(K) {
                for (var J = 0, I = 1; 1; J += I, I /= 2) {
                    if (K >= (7 - 4 * J) / 11) {
                        return I * I - Math.pow((11 - 6 * J - 11 * K) / 4, 2)
                    }
                }
            },
            bounceOut: function(I) {
                return 1 - H.FX.Transition.bounceIn(1 - I)
            },
            none: function(I) {
                return 0
            }
        }
    })(u);
    (function(H) {
        if (!H) {
            throw "MagicJS not found"
        }
        if (H.PFX) {
            return
        }
        var G = H.$;
        H.PFX = new H.Class(H.FX, {
            init: function(I, J) {
                this.el_arr = I;
                this.options = H.extend(this.options, J);
                this.timer = false;
                this.$parent.init()
            },
            start: function(M) {
                var I = /\%$/,
                    L, K, J = M.length;
                this.styles_arr = M;
                this.pStyles_arr = new Array(J);
                for (K = 0; K < J; K++) {
                    this.pStyles_arr[K] = {};
                    for (L in M[K]) {
                        I.test(M[K][L][0]) && (this.pStyles_arr[K][L] = true);
                        if ("reverse" === this.options.direction || "alternate-reverse" === this.options.direction || "continuous-reverse" === this.options.direction) {
                            this.styles_arr[K][L].reverse()
                        }
                    }
                }
                this.$parent.start({});
                return this
            },
            render: function(I) {
                for (var J = 0; J < this.el_arr.length; J++) {
                    this.el = H.$(this.el_arr[J]);
                    this.styles = this.styles_arr[J];
                    this.pStyles = this.pStyles_arr[J];
                    this.$parent.render(I)
                }
            }
        })
    })(u);
    (function(H) {
        if (!H) {
            throw "MagicJS not found";
            return
        }
        if (H.Tooltip) {
            return
        }
        var G = H.$;
        H.Tooltip = function(J, K) {
            var I = this.tooltip = H.$new("div", null, {
                position: "absolute",
                "z-index": 999
            }).jAddClass("MagicToolboxTooltip");
            H.$(J).jAddEvent("mouseover", function() {
                I.jAppendTo(document.body)
            });
            H.$(J).jAddEvent("mouseout", function() {
                I.jRemove()
            });
            H.$(J).jAddEvent("mousemove", function(P) {
                var R = 20,
                    O = H.$(P).jGetPageXY(),
                    N = I.jGetSize(),
                    M = H.$(window).jGetSize(),
                    Q = H.$(window).jGetScroll();

                function L(U, S, T) {
                    return (T < (U - S) / 2) ? T : ((T > (U + S) / 2) ? (T - S) : (U - S) / 2)
                }
                I.jSetCss({
                    left: Q.x + L(M.width, N.width + 2 * R, O.x - Q.x) + R,
                    top: Q.y + L(M.height, N.height + 2 * R, O.y - Q.y) + R
                })
            });
            this.text(K)
        };
        H.Tooltip.prototype.text = function(I) {
            this.tooltip.firstChild && this.tooltip.removeChild(this.tooltip.firstChild);
            this.tooltip.append(document.createTextNode(I))
        }
    })(u);
    (function(H) {
        if (!H) {
            throw "MagicJS not found";
            return
        }
        if (H.MessageBox) {
            return
        }
        var G = H.$;
        H.Message = function(L, K, J, I) {
            this.hideTimer = null;
            this.messageBox = H.$new("span", null, {
                position: "absolute",
                "z-index": 999,
                visibility: "hidden",
                opacity: 0.8
            }).jAddClass(I || "").jAppendTo(J || document.body);
            this.setMessage(L);
            this.show(K)
        };
        H.Message.prototype.show = function(I) {
            this.messageBox.show();
            this.hideTimer = this.hide.jBind(this).jDelay(H.ifndef(I, 5000))
        };
        H.Message.prototype.hide = function(I) {
            clearTimeout(this.hideTimer);
            this.hideTimer = null;
            if (this.messageBox && !this.hideFX) {
                this.hideFX = new u.FX(this.messageBox, {
                    duration: H.ifndef(I, 500),
                    onComplete: function() {
                        this.messageBox.kill();
                        delete this.messageBox;
                        this.hideFX = null
                    }.jBind(this)
                }).start({
                    opacity: [this.messageBox.jGetCss("opacity"), 0]
                })
            }
        };
        H.Message.prototype.setMessage = function(I) {
            this.messageBox.firstChild && this.tooltip.removeChild(this.messageBox.firstChild);
            this.messageBox.append(document.createTextNode(I))
        }
    })(u);
    (function(H) {
        if (!H) {
            throw "MagicJS not found"
        }
        if (H.Options) {
            return
        }
        var K = H.$,
            G = null,
            O = {
                "boolean": 1,
                array: 2,
                number: 3,
                "function": 4,
                string: 100
            },
            I = {
                "boolean": function(R, Q, P) {
                    if ("boolean" != H.jTypeOf(Q)) {
                        if (P || "string" != H.jTypeOf(Q)) {
                            return false
                        } else {
                            if (!/^(true|false)$/.test(Q)) {
                                return false
                            } else {
                                Q = Q.jToBool()
                            }
                        }
                    }
                    if (R.hasOwnProperty("enum") && !K(R["enum"]).contains(Q)) {
                        return false
                    }
                    G = Q;
                    return true
                },
                string: function(R, Q, P) {
                    if ("string" !== H.jTypeOf(Q)) {
                        return false
                    } else {
                        if (R.hasOwnProperty("enum") && !K(R["enum"]).contains(Q)) {
                            return false
                        } else {
                            G = "" + Q;
                            return true
                        }
                    }
                },
                number: function(S, R, Q) {
                    var P = false,
                        U = /%$/,
                        T = (H.jTypeOf(R) == "string" && U.test(R));
                    if (Q && !"number" == typeof R) {
                        return false
                    }
                    R = parseFloat(R);
                    if (isNaN(R)) {
                        return false
                    }
                    if (isNaN(S.minimum)) {
                        S.minimum = Number.NEGATIVE_INFINITY
                    }
                    if (isNaN(S.maximum)) {
                        S.maximum = Number.POSITIVE_INFINITY
                    }
                    if (S.hasOwnProperty("enum") && !K(S["enum"]).contains(R)) {
                        return false
                    }
                    if (S.minimum > R || R > S.maximum) {
                        return false
                    }
                    G = T ? (R + "%") : R;
                    return true
                },
                array: function(S, Q, P) {
                    if ("string" === H.jTypeOf(Q)) {
                        try {
                            Q = window.JSON.parse(Q)
                        } catch (R) {
                            return false
                        }
                    }
                    if (H.jTypeOf(Q) === "array") {
                        G = Q;
                        return true
                    } else {
                        return false
                    }
                },
                "function": function(R, Q, P) {
                    if (H.jTypeOf(Q) === "function") {
                        G = Q;
                        return true
                    } else {
                        return false
                    }
                }
            },
            J = function(U, T, Q) {
                var S;
                S = U.hasOwnProperty("oneOf") ? U.oneOf : [U];
                if ("array" != H.jTypeOf(S)) {
                    return false
                }
                for (var R = 0, P = S.length - 1; R <= P; R++) {
                    if (I[S[R].type](S[R], T, Q)) {
                        return true
                    }
                }
                return false
            },
            M = function(U) {
                var S, R, T, P, Q;
                if (U.hasOwnProperty("oneOf")) {
                    P = U.oneOf.length;
                    for (S = 0; S < P; S++) {
                        for (R = S + 1; R < P; R++) {
                            if (O[U.oneOf[S]["type"]] > O[U.oneOf[R].type]) {
                                Q = U.oneOf[S];
                                U.oneOf[S] = U.oneOf[R];
                                U.oneOf[R] = Q
                            }
                        }
                    }
                }
                return U
            },
            N = function(S) {
                var R;
                R = S.hasOwnProperty("oneOf") ? S.oneOf : [S];
                if ("array" != H.jTypeOf(R)) {
                    return false
                }
                for (var Q = R.length - 1; Q >= 0; Q--) {
                    if (!R[Q].type || !O.hasOwnProperty(R[Q].type)) {
                        return false
                    }
                    if (H.defined(R[Q]["enum"])) {
                        if ("array" !== H.jTypeOf(R[Q]["enum"])) {
                            return false
                        }
                        for (var P = R[Q]["enum"].length - 1; P >= 0; P--) {
                            if (!I[R[Q].type]({
                                    type: R[Q].type
                                }, R[Q]["enum"][P], true)) {
                                return false
                            }
                        }
                    }
                }
                if (S.hasOwnProperty("default") && !J(S, S["default"], true)) {
                    return false
                }
                return true
            },
            L = function(P) {
                this.schema = {};
                this.options = {};
                this.parseSchema(P)
            };
        H.extend(L.prototype, {
            parseSchema: function(R) {
                var Q, P, S;
                for (Q in R) {
                    if (!R.hasOwnProperty(Q)) {
                        continue
                    }
                    P = (Q + "").jTrim().jCamelize();
                    if (!this.schema.hasOwnProperty(P)) {
                        this.schema[P] = M(R[Q]);
                        if (!N(this.schema[P])) {
                            throw "Incorrect definition of the '" + Q + "' parameter in " + R
                        }
                        this.options[P] = undefined
                    }
                }
            },
            set: function(Q, P) {
                Q = (Q + "").jTrim().jCamelize();
                if (H.jTypeOf(P) == "string") {
                    P = P.jTrim()
                }
                if (this.schema.hasOwnProperty(Q)) {
                    G = P;
                    if (J(this.schema[Q], P)) {
                        this.options[Q] = G
                    }
                    G = null
                }
            },
            get: function(P) {
                P = (P + "").jTrim().jCamelize();
                if (this.schema.hasOwnProperty(P)) {
                    return H.defined(this.options[P]) ? this.options[P] : this.schema[P]["default"]
                }
            },
            fromJSON: function(Q) {
                for (var P in Q) {
                    this.set(P, Q[P])
                }
            },
            getJSON: function() {
                var Q = H.extend({}, this.options);
                for (var P in Q) {
                    if (undefined === Q[P] && undefined !== this.schema[P]["default"]) {
                        Q[P] = this.schema[P]["default"]
                    }
                }
                return Q
            },
            fromString: function(P) {
                K(P.split(";")).jEach(K(function(Q) {
                    Q = Q.split(":");
                    this.set(Q.shift().jTrim(), Q.join(":"))
                }).jBind(this))
            },
            exists: function(P) {
                P = (P + "").jTrim().jCamelize();
                return this.schema.hasOwnProperty(P)
            },
            isset: function(P) {
                P = (P + "").jTrim().jCamelize();
                return this.exists(P) && H.defined(this.options[P])
            },
            jRemove: function(P) {
                P = (P + "").jTrim().jCamelize();
                if (this.exists(P)) {
                    delete this.options[P];
                    delete this.schema[P]
                }
            }
        });
        H.Options = L
    })(u);
    v.$AA = function(G) {
        var I = [],
            H;
        for (H in G) {
            if (!G.hasOwnProperty(H) || (H + "").substring(0, 2) == "$J") {
                continue
            }
            I.push(G[H])
        }
        return v.$A(I)
    };
    v.nativeEvents = {
        click: 2,
        dblclick: 2,
        mouseup: 2,
        mousedown: 2,
        contextmenu: 2,
        mousewheel: 2,
        DOMMouseScroll: 2,
        mouseover: 2,
        mouseout: 2,
        mousemove: 2,
        selectstart: 2,
        selectend: 2,
        keydown: 2,
        keypress: 2,
        keyup: 2,
        focus: 2,
        blur: 2,
        change: 2,
        reset: 2,
        select: 2,
        submit: 2,
        load: 1,
        unload: 1,
        beforeunload: 2,
        resize: 1,
        move: 1,
        DOMContentLoaded: 1,
        readystatechange: 1,
        error: 1,
        abort: 1
    };
    v.customEventsAllowed = {
        document: true,
        element: true,
        "class": true,
        object: true
    };
    v.customEvents = {
        bindEvent: function(K, J, H) {
            if (v.jTypeOf(K) == "array") {
                k(K).jEach(this.bindEvent.jBindAsEvent(this, J, H));
                return this
            }
            if (!K || !J || v.jTypeOf(K) != "string" || v.jTypeOf(J) != "function") {
                return this
            }
            if (K == "domready" && v.browser.ready) {
                J.call(this);
                return this
            }
            H = parseInt(H || 10);
            if (!J.$J_EUID) {
                J.$J_EUID = Math.floor(Math.random() * v.now())
            }
            var I = this.jFetch("_events", {});
            I[K] || (I[K] = {});
            I[K][H] || (I[K][H] = {});
            I[K]["orders"] || (I[K]["orders"] = {});
            if (I[K][H][J.$J_EUID]) {
                return this
            }
            if (I[K]["orders"][J.$J_EUID]) {
                this.unbindEvent(K, J)
            }
            var G = this,
                L = function(M) {
                    return J.call(G, k(M))
                };
            if (v.nativeEvents[K] && !I[K]["function"]) {
                if (v.nativeEvents[K] == 2) {
                    L = function(M) {
                        M = v.extend(M || window.e, {
                            $J_TYPE: "event"
                        });
                        return J.call(G, k(M))
                    }
                }
                I[K]["function"] = function(M) {
                    G.jCallEvent(K, M)
                };
                this[v._event_add_](v._event_prefix_ + K, I[K]["function"], false)
            }
            I[K][H][J.$J_EUID] = L;
            I[K]["orders"][J.$J_EUID] = H;
            return this
        },
        jCallEvent: function(H, J) {
            try {
                J = v.extend(J || {}, {
                    type: H
                })
            } catch (I) {}
            if (!H || v.jTypeOf(H) != "string") {
                return this
            }
            var G = this.jFetch("_events", {});
            G[H] || (G[H] = {});
            G[H]["orders"] || (G[H]["orders"] = {});
            v.$AA(G[H]).jEach(function(K) {
                if (K != G[H]["orders"] && K != G[H]["function"]) {
                    v.$AA(K).jEach(function(L) {
                        L(this)
                    }, this)
                }
            }, J);
            return this
        },
        unbindEvent: function(J, I) {
            if (!J || !I || v.jTypeOf(J) != "string" || v.jTypeOf(I) != "function") {
                return this
            }
            if (!I.$J_EUID) {
                I.$J_EUID = Math.floor(Math.random() * v.now())
            }
            var H = this.jFetch("_events", {});
            H[J] || (H[J] = {});
            H[J]["orders"] || (H[J]["orders"] = {});
            order = H[J]["orders"][I.$J_EUID];
            H[J][order] || (H[J][order] = {});
            if (order >= 0 && H[J][order][I.$J_EUID]) {
                delete H[J][order][I.$J_EUID];
                delete H[J]["orders"][I.$J_EUID];
                if (v.$AA(H[J][order]).length == 0) {
                    delete H[J][order];
                    if (v.nativeEvents[J] && v.$AA(H[J]).length == 0) {
                        var G = this;
                        this[v._event_del_](v._event_prefix_ + J, H[J]["function"], false)
                    }
                }
            }
            return this
        },
        destroyEvent: function(I) {
            if (!I || v.jTypeOf(I) != "string") {
                return this
            }
            var H = this.jFetch("_events", {});
            if (v.nativeEvents[I]) {
                var G = this;
                this[v._event_del_](v._event_prefix_ + I, H[I]["function"], false)
            }
            H[I] = {};
            return this
        },
        cloneEvents: function(I, H) {
            var G = this.jFetch("_events", {});
            for (t in G) {
                if (H && t != H) {
                    continue
                }
                for (order in G[t]) {
                    if (order == "orders" || order == "function") {
                        continue
                    }
                    for (f in G[t][order]) {
                        k(I).bindEvent(t, G[t][order][f], order)
                    }
                }
            }
            return this
        },
        jCopyEvents: function(J, I) {
            if (1 !== J.nodeType) {
                return this
            }
            var H = this.jFetch("events");
            if (!H) {
                return this
            }
            for (var G in H) {
                if (I && G != I) {
                    continue
                }
                for (var K in H[G]) {
                    k(J).bindEvent(G, H[G][K])
                }
            }
            return this
        },
        jFetch: v.Element.jFetch,
        jStore: v.Element.jStore
    };
    (function(G) {
        if (!G) {
            throw "MagicJS not found";
            return
        }
        G.extend = function(O, N) {
            if (!(O instanceof window.Array)) {
                O = [O]
            }
            if (!(N instanceof window.Array)) {
                N = [N]
            }
            for (var L = 0, I = O.length; L < I; L++) {
                if (!G.defined(O[L])) {
                    continue
                }
                for (var K = 0, M = N.length; K < M; K++) {
                    if (!G.defined(N[K])) {
                        continue
                    }
                    for (var J in (N[K] || {})) {
                        try {
                            O[L][J] = N[K][J]
                        } catch (H) {}
                    }
                }
            }
            return O[0]
        };
        G.inherit = function(J, I) {
            function H() {}
            H.prototype = I.prototype;
            J.$parent = I.prototype;
            J.prototype = new H();
            J.prototype.constructor = J
        };
        G.extend([G.Element, window.magicJS.Element], {
            jGetSize_: G.Element.jGetSize,
            jGetSize: function(H, J) {
                var I, K = {
                    width: 0,
                    height: 0
                };
                if (J) {
                    K = this.jGetSize_()
                } else {
                    I = this.getBoundingClientRect();
                    K.width = I.width;
                    K.height = I.height
                }
                if (H) {
                    K.width += (parseInt(this.jGetCss("margin-left") || 0) + parseInt(this.jGetCss("margin-right") || 0));
                    K.height += (parseInt(this.jGetCss("margin-top") || 0) + ((this.jGetCss("display") != "block") ? parseInt(this.jGetCss("margin-bottom") || 0) : 0))
                }
                return K
            }
        })
    })(u);
    v.Modules || (v.Modules = {});
    v.Modules.ArrowsPair = (function() {
        var G = ["next", "prev"],
            J;

        function K(M, L) {
            return v.$new("button", {
                type: "button"
            }, {
                display: "inline-block"
            }).jAddClass(J["class"]).jAddClass(J.orientation).jAddClass(J["class"] + "-arrow").jAddClass(J["class"] + "-arrow-" + M).jAppendTo(L)
        }

        function H(L, M) {
            M.stopDistribution();
            this.jCallEvent(L)
        }
        var I = function(M, L) {
            v.$uuid(this);
            this.options = {
                "class": "",
                classHidden: "",
                classDisabled: "",
                position: "inside",
                orientation: "ms-horizontal",
                form: "button"
            };
            J = this.o = this.options;
            v.extend(this.o, M);
            this.prev = K("prev", L);
            this.next = K("next", L);
            this.next.jAddEvent("click", function(N) {
                N.stop()
            }).jAddEvent("btnclick tap", H.jBind(this, "forward"));
            this.prev.jAddEvent("click", function(N) {
                N.stop()
            }).jAddEvent("btnclick tap", H.jBind(this, "backward"))
        };
        I.prototype = {
            disable: function(L) {
                j(L && [L] || G).jEach(function(M) {
                    this[M].jAddClass(J.classDisabled)
                }, this)
            },
            enable: function(L) {
                j(L && [L] || G).jEach(function(M) {
                    this[M].jRemoveClass(J.classDisabled)
                }, this)
            },
            hide: function(L) {
                j(L && [L] || G).jEach(function(M) {
                    this[M].jAddClass(J.classHidden)
                }, this)
            },
            show: function(L) {
                j(L && [L] || G).jEach(function(M) {
                    this[M].jRemoveClass(J.classHidden)
                }, this)
            },
            jRemove: function(L) {
                j(L && [L] || G).jEach(function(M) {
                    this[M].kill()
                }, this)
            },
            setOrientation: function(L) {
                j(G).jEach(function(M) {
                    this[M].jRemoveClass("mcs-" + J.orientation);
                    this[M].jAddClass("mcs-" + L)
                }, this);
                this.o.orientation = "mcs-" + L
            }
        };
        v.extend(I.prototype, v.customEvents);
        return I
    })();
    v.Modules || (v.Modules = {});
    v.Modules.Bullets = (function() {
        var H = "active",
            G = function(K, J, I) {
                v.$uuid(this);
                this._options = {};
                this.o = this._options;
                v.extend(this.o, K);
                this.bullets = v.$([]);
                this.callback = I;
                this.activeBullet = {};
                this.ban = false;
                this.container = v.$new("div", {
                    "class": "mcs-bullets"
                });
                this.container.jAppendTo(J)
            };
        G.prototype = {
            push: function(I) {
                var J = j(function(L) {
                    var K = this.bullets.length;
                    this.bullets.push({
                        index: K,
                        enable: false,
                        jump: L,
                        node: v.$new("div", {
                            "class": "mcs-bullet mcs-bullet-" + K
                        })
                    });
                    if (!K) {
                        this.activeBullet = this.bullets[K];
                        this.activate(this.bullets[K]);
                        this.bullets[K].enable = true
                    }
                    this.bullets[K].node.jAddEvent("click", j(function(M) {
                        M.stop();
                        if (this.bullets[K].index == this.activeBullet.index) {
                            return
                        }
                        this.ban = this.callback();
                        !this.ban && this.jCallEvent("bullets-click", {
                            direction: this.getDirection(this.bullets[K]),
                            jumpIndex: this.bullets[K].jump
                        })
                    }).jBind(this));
                    this.bullets[K].node.jAppendTo(this.container)
                }).jBind(this);
                this.reset();
                I.jEach(j(function(K) {
                    J(K)
                }).jBind(this))
            },
            setActiveBullet: function(I, J) {
                this.activate(this.getBulletIndex(I, J))
            },
            show: function() {
                this.container.jAddClass("show")
            },
            update: function() {
                if (this.activeBullet.node) {
                    this.deactivate();
                    this.activate(this.bullets[0])
                }
            },
            jRemove: function() {
                this.bullets.jEach(function(I) {
                    I.node.kill()
                });
                this.container.kill()
            },
            deactivate: function() {
                this.activeBullet.enable = false;
                this.activeBullet.node.jRemoveClass(H)
            },
            activate: function(I) {
                this.deactivate();
                this.activeBullet = I;
                I.enable = true;
                I.node.jAddClass(H)
            },
            getDirection: function(I) {
                var J = this.activeBullet.index > I.index ? "backward" : "forward";
                this.activate(I);
                return J
            },
            getBulletIndex: function(I, L) {
                var M, K = this.bullets.length - 1,
                    J = this.activeBullet;
                for (var M = K; M >= 0; M--) {
                    if (this.bullets[M].jump <= I[0]) {
                        J = this.bullets[M];
                        break
                    }
                }
                if (L) {
                    if (this.o.items - 1 == I[I.length - 1]) {
                        J = this.bullets[K]
                    }
                }
                return J
            },
            reset: function() {
                this.ban = false;
                this.activeBullet = {};
                this.bullets.jEach(function(I) {
                    I.node.kill()
                });
                this.bullets.length = 0
            }
        };
        v.extend(G.prototype, v.customEvents);
        return G
    })();
    v.Modules || (v.Modules = {});
    v.Modules.Progress = (function() {
        var H = 300,
            G = function(I, J) {
                this.flag = "none";
                this.node = v.$new("div", {
                    "class": "mcs-loader"
                });
                if (v.browser.ieMode && v.browser.ieMode < 10) {
                    this.node.append(v.$new("div", {
                        "class": "mcs-loader-text"
                    }).append(v.doc.createTextNode("Loading...")))
                } else {
                    if (J) {
                        this.node.append(v.$new("div", {
                            "class": "mcs-loader-circles"
                        }).append(v.$new("div", {
                            "class": "mcs-item-loader"
                        }, {
                            "z-index": 100000
                        })))
                    } else {
                        this.node.append(v.$new("div", {
                            "class": "mcs-loader-circles"
                        }).append(v.$new("div", {
                            "class": "mcs-loader-circle mcs-loader-circle_01"
                        })).append(v.$new("div", {
                            "class": "mcs-loader-circle mcs-loader-circle_02"
                        })).append(v.$new("div", {
                            "class": "mcs-loader-circle mcs-loader-circle_03"
                        })).append(v.$new("div", {
                            "class": "mcs-loader-circle mcs-loader-circle_04"
                        })).append(v.$new("div", {
                            "class": "mcs-loader-circle mcs-loader-circle_05"
                        })).append(v.$new("div", {
                            "class": "mcs-loader-circle mcs-loader-circle_06"
                        })).append(v.$new("div", {
                            "class": "mcs-loader-circle mcs-loader-circle_07"
                        })).append(v.$new("div", {
                            "class": "mcs-loader-circle mcs-loader-circle_08"
                        })))
                    }
                }
                this.node.jAppendTo(I);
                this.node.hide()
            };
        G.prototype = {
            show: function() {
                if (this.flag === "show") {
                    return
                }
                if (this.node) {
                    this.flag = "show";
                    this.node.jSetOpacity(1);
                    this.node.show()
                }
            },
            hide: function(I) {
                if (this.flag === "hide") {
                    return
                }
                if (this.node) {
                    this.flag = "hide";
                    this.node.jSetOpacity(0);
                    this.node.hide()
                }
            },
            jRemove: function() {
                this.node && this.node.kill()
            }
        };
        return G
    })();
    v.Modules || (v.Modules = {});
    v.Modules.ShowItems = (function() {
        var G = function() {
            var N = [],
                I = 300,
                K = 0,
                L = 0,
                O = false,
                M = this;
            v.$uuid(this);

            function J() {
                var R;
                if (N.length == 0) {
                    M.jCallEvent("complete");
                    return
                }
                if (!O && N.length > 0) {
                    O = true;
                    R = N.shift();
                    var Q = j([]);
                    Q.push(R.item);
                    if (R.item.clone && R.item.clone.length > 0) {
                        j(R.item.clone).jEach(j(function(S) {
                            Q.push(S)
                        }).jBind(this))
                    }
                    Q.jEach(function(T, S) {
                        L += 1;
                        if (R.visible) {
                            if (S) {
                                R.visible = false
                            }
                        }
                        P(T, !!S, R.visible, R.callback, function() {
                            O = false;
                            J()
                        }, R.showReflection)
                    })
                }
            }

            function H(R, T, Q, S) {
                if (R.progress) {
                    R.progress.hide(true)
                }
                K++;
                if (K == L) {
                    L = K = 0;
                    Q();
                    S()
                }
            }

            function P(W, V, S, T, R, Q) {
                var X, Y, U = j(W.content);
                if (W.load == "loaded") {
                    H(W, V, T, R);
                    return
                }
                if (S) {
                    if (v.browser.ieMode && v.browser.ieMode < 10) {
                        Y = j(U).jGetSize();
                        X = {
                            opacity: [0, 1],
                            top: [Y.height / 2, 0],
                            left: [Y.width / 2, 0],
                            width: [0, Y.width],
                            height: [0, Y.height]
                        };
                        this.itemFX = new v.FX(U, {
                            duration: I,
                            onComplete: j(function(aa, Z) {
                                U.jSetCss({
                                    overflow: "",
                                    position: "",
                                    top: "",
                                    left: "",
                                    width: "",
                                    height: ""
                                });
                                V && (W.load = "loaded");
                                H(W, V, aa, Z)
                            }).jBind(this, T, R),
                            onStart: j(function() {
                                U.jSetCss({
                                    position: "relative",
                                    overflow: "hidden"
                                })
                            }).jBind(this)
                        });
                        this.itemFX.start(X)
                    } else {
                        U.jSetCssProp(g, "scale(0.2, 0.2)");
                        U.jSetCssProp("transition", "none");
                        U.jSetOpacity(0);
                        U.offsetHeight;
                        U.parentNode.offsetHeight;
                        U.jAddEvent("transitionend", j(function(Z) {
                            if (Z.target == U) {
                                this.jRemoveEvent(Z.type);
                                this.jSetCssProp(g, "");
                                this.jSetCssProp("transition", "")
                            }
                        }).jBind(U));
                        if (!V && Q) {
                            Q(W)
                        }
                        U.jSetCssProp("transition", g + " " + I + "ms cubic-bezier(.5,.5,.69,1.9), opacity " + I + "ms linear");
                        U.offsetHeight;
                        U.parentNode.offsetHeight;
                        U.jSetCssProp(g, "scale(1.0, 1.0)");
                        U.jSetOpacity(1);
                        V && (W.load = "loaded");
                        H(W, V, T, R)
                    }
                } else {
                    U.jSetOpacity(1);
                    if (V) {
                        W.load = "loaded"
                    } else {
                        Q(W)
                    }
                    H(W, V, T, R)
                }
            }
            this.push = function(S, R, Q, T) {
                N.push({
                    item: S,
                    visible: R,
                    callback: Q,
                    showReflection: T
                });
                J()
            }
        };
        v.extend(G.prototype, v.customEvents);
        return G
    })();
    (function(G) {
        G.QImageLoader = function(N, I) {
            var H = 0,
                M = this,
                L, J;

            function Q(R) {
                return function(S) {
                    (I[R] || G.$F).call(M, S, S.origItem);
                    H--;
                    P()
                }
            }

            function P() {
                var R;
                if (!N.length) {} else {
                    if (H < (I.queue || 3)) {
                        L = N.shift();
                        R = K(L.node);
                        if (R) {
                            J = new G.ImageLoader(R, {
                                onload: Q("onload"),
                                onerror: Q("onerror"),
                                onabort: Q("onabort"),
                                oncomplete: Q("oncomplete")
                            });
                            J.origItem = L
                        } else {
                            (I.onload || G.$F).call(M, {
                                size: j(L.node).jGetSize(),
                                img: R
                            }, L);
                            H--;
                            P()
                        }
                        H++
                    }
                }
            }

            function O(R) {
                var S, T;
                S = (R && R instanceof HTMLImageElement);
                if (S) {
                    T = R.getAttribute("data-src") || null;
                    if (T) {
                        R.setAttribute("src", T)
                    }
                }
                return (S && R.getAttribute("src")) ? R : null
            }

            function K(R) {
                return G.jTypeOf(L) == "string" ? R : (G.jTypeOf(R) == "object" ? O(R.img) : ((R.tagName == "A" || R.tagName.toLowerCase() == "figure") ? O(j(R).byTag("IMG")[0] || R.firstChild) : (R.tagName == "IMG" ? O(R) : null)))
            }
            this.push = function(R, S) {
                N[S ? "unshift" : "push"](R);
                I.delay || P();
                return this
            };
            this.abort = function() {
                J.destroy();
                count--
            };
            this.load = P;
            I.delay || N.length && P()
        }
    })(u);
    var m, j = v.$,
        E = j,
        k = j;
    var o;
    var p = function() {
        return "mgctlbxN$MSC mgctlbxV$" + "v2.0.52".replace("v", "") + " mgctlbxL$" + "c".toUpperCase() + ((window.mgctlbx$Pltm && "string" == v.jTypeOf(window.mgctlbx$Pltm)) ? " mgctlbxP$" + window.mgctlbx$Pltm.toLowerCase() : "")
    };

    function c() {
        v.addCSS(".msc-tmp-hdn-holder", {
            display: "block !important",
            "min-height": "0 !important",
            "min-width": "0 !important",
            "max-height": "none !important",
            "max-width": "none !important",
            width: "10px !important",
            height: "10px !important",
            position: "absolute !important",
            top: "-10000px !important",
            left: "0 !important",
            overflow: "hidden !important",
            "-webkit-transform": "none !important",
            transform: "none !important",
            "-webkit-transition": "none !important",
            transition: "none !important"
        }, "magicsroll-reset-css")
    }
    v.Scroll = {};
    m = {
        width: {
            oneOf: [{
                type: "number",
                minimum: 1
            }, {
                type: "string",
                "enum": ["auto"]
            }],
            "default": "auto"
        },
        height: {
            oneOf: [{
                type: "number",
                minimum: 1
            }, {
                type: "string",
                "enum": ["auto"]
            }],
            "default": "auto"
        },
        rwd: {
            type: "boolean",
            "default": false
        },
        items: {
            oneOf: [{
                type: "number",
                minimum: 1
            }, {
                type: "array"
            }, {
                type: "string",
                "enum": ["auto", "fit"]
            }],
            "default": "auto"
        },
        scrollOnWheel: {
            oneOf: [{
                type: "boolean"
            }, {
                type: "string",
                "enum": ["auto"]
            }],
            "default": "auto"
        },
        arrows: {
            oneOf: [{
                type: "boolean"
            }, {
                type: "string",
                "enum": ["inside", "outside", "off"]
            }],
            "default": "outside"
        },
        autoplay: {
            type: "number",
            "default": 0
        },
        speed: {
            type: "number",
            "default": 600
        },
        loop: {
            oneOf: [{
                type: "string",
                "enum": ["infinite", "rewind", "off"]
            }, {
                type: "boolean",
                "enum": [false]
            }],
            "default": "infinite"
        },
        lazyLoad: {
            type: "boolean",
            "default": false
        },
        orientation: {
            type: "string",
            "enum": ["horizontal", "vertical"],
            "default": "horizontal"
        },
        step: {
            oneOf: [{
                type: "number",
                minimum: 0
            }, {
                type: "string",
                "enum": ["auto"]
            }],
            "default": "auto"
        },
        draggable: {
            type: "boolean",
            "default": true
        },
        mode: {
            type: "string",
            "enum": ["scroll", "animation", "carousel", "cover-flow"],
            "default": "scroll"
        },
        pagination: {
            type: "boolean",
            "default": false
        },
        easing: {
            type: "string",
            "default": "cubic-bezier(.8, 0, .5, 1)"
        },
        keyboard: {
            type: "boolean",
            "default": false
        },
        autostart: {
            type: "boolean",
            "default": true
        },
        onItemHover: {
            type: "function",
            "default": v.$F
        },
        onItemOut: {
            type: "function",
            "default": v.$F
        },
        onReady: {
            type: "function",
            "default": v.$F
        },
        onStop: {
            type: "function",
            "default": v.$F
        },
        onMoveStart: {
            type: "function",
            "default": v.$F
        },
        onMoveEnd: {
            type: "function",
            "default": v.$F
        }
    };
    document.createElement("figure");
    document.createElement("figcaption");
    var n = function(G) {
            return {
                width: ((parseInt(G.jGetCss("margin-left")) || 0) + (parseInt(G.jGetCss("margin-right")) || 0)),
                height: ((parseInt(G.jGetCss("margin-top")) || 0) + (parseInt(G.jGetCss("margin-bottom")) || 0))
            }
        },
        i = function(G) {
            return {
                width: ((parseInt(G.jGetCss("padding-left")) || 0) + (parseInt(G.jGetCss("padding-right")) || 0)),
                height: ((parseInt(G.jGetCss("padding-top")) || 0) + (parseInt(G.jGetCss("padding-bottom")) || 0))
            }
        },
        r = function(G) {
            return {
                width: ((parseInt(G.jGetCss("border-left-width")) || 0) + (parseInt(G.jGetCss("border-right-width")) || 0)),
                height: ((parseInt(G.jGetCss("border-top-width")) || 0) + (parseInt(G.jGetCss("border-bottom-width")) || 0))
            }
        },
        F = function(G) {
            return {
                width: j(G).jGetCss("width"),
                height: j(G).jGetCss("height")
            }
        },
        w = v.browser.domPrefix,
        g = v.normalizeCSS("transform").dashize(),
        b = function(H, I) {
            var G = false,
                J = 0;
            v.$uuid(this);
            this._options = {
                stopDownload: true,
                timingFunction: "cubic-bezier(.8, 0, .5, 1)",
                effect: "scroll",
                continuous: false,
                progress: false,
                debug: false,
                orientation: "horizontal",
                duration: 500,
                loop: true,
                lazyLoad: true,
                step: "auto",
                draggable: true,
                keyboard: false
            };
            this.o = this._options;
            v.extend(this.o, I);
            this.container = j(H).jSetCssProp("white-space", "nowrap");
            this.loop = {
                firstItem: false,
                lastItem: false
            };
            this._setProperties();
            this.keyboardCallback = j(function(M) {
                var L = {},
                    K = true;
                if (37 === M.keyCode || 39 === M.keyCode) {
                    L.direction = M.keyCode == 39 ? "forward" : "backward";
                    if (!this.o.loop) {
                        if ("forward" === L.direction) {
                            if (this.loop.lastItem) {
                                K = false
                            }
                        } else {
                            if (this.loop.firstItem) {
                                K = false
                            }
                        }
                    }
                    K && this.jCallEvent("key_down", L)
                }
            }).jBind(this);
            this.name = "scroll";
            this.items = j([]);
            this.fullscreenChanged = false;
            this.itemsFirstClones = j([]);
            this.itemsLastClones = j([]);
            this.exitItems = j([]);
            this.enterItems = j([]);
            this.last = 0;
            this.globalIndex = 0;
            this.itemStep = this.o.step;
            this.containerPosition = 0;
            this.l = null;
            this.globalLength = null;
            this.distance = null;
            this.allSize = 0;
            this.correctPosition = 0;
            this.containerWidth = 0;
            this.direction = "forward";
            this.callback = v.$F;
            this.fullViewedItems = 0;
            this.stopScroll = false;
            this.moveTimer = null;
            this.wheelDiff = 0;
            this.tempArray = null;
            this.prevIndex = this.last;
            this.wheel_ = false;
            this.preloadAllFlag = false;
            this.disableReflection = false;
            this.loadAll = false;
            this.allNodes = null;
            this.doneFlag = {};
            this.wrapperPosition = 0;
            this.moveSettings = {
                direction: "forward",
                disableEffect: false
            };
            this.onDrag = null;
            this.queue = new v.QImageLoader([], {
                queue: 1,
                onerror: j(function(L, M) {
                    var K = this.items[M.index];
                    K.load = "error";
                    if (K.progress) {
                        K.progress.jRemove();
                        K.progress = null
                    }
                    K.node.jAddClass("mcs-noimg");
                    this.performedOnClones(j(function(O, N) {
                        if (O.index == K.index) {
                            O.append = true;
                            if (O.progress) {
                                O.progress.jRemove();
                                O.progress = null
                            }
                            O.node.load = "error";
                            O.node.jAddClass("mcs-noimg")
                        }
                    }).jBind(this));
                    J++;
                    if (this.o.lazyLoad) {
                        if (this.checkLoadingVisibleItems()) {
                            if (this.o.stopDownload || !this.doneFlag.two) {
                                this.jCallEvent("hideProgress");
                                this.jCallEvent("groupLoad")
                            }
                            if (!this.move_) {
                                this.changeClones()
                            }!this.doneFlag.two && this.jCallEvent("complete")
                        }
                    } else {
                        if (J == this.l && !this.o.lazyLoad) {
                            this.loadAll = true;
                            !this.doneFlag.two && this.jCallEvent("complete")
                        }
                    }
                    this.checkLoadedItems()
                }).jBind(this),
                onload: (function(O, P) {
                    var N = [];
                    var M = this.items[P.index];
                    var K;
                    var L = O.origItem;
                    if (L && L.originItem) {
                        M = this.items[L.originItem.index]
                    }
                    if (!M) {
                        return
                    }
                    M.node.append(M.content);
                    try {
                        this.setReflection(M)
                    } catch (O) {}
                    if (!this.disableReflection) {
                        try {
                            this.setCanvasPosition(M)
                        } catch (O) {
                            this.disableReflection = true
                        }
                    }
                    this.addCloneContent(M, j(function() {
                        var Q = true;
                        if (j(["scroll", "animation"]).contains(this.name)) {
                            if (!this.doneFlag.two && !this.o.lazyLoad) {
                                Q = P.index < this.fullViewedItems
                            }
                        }
                        this.showItem(M, Q, this.showReflection);
                        M.load = "loaded";
                        J++;
                        if (this.o.lazyLoad) {
                            this.onLazyLoad(J)
                        } else {
                            if (J == this.l) {
                                this.loadAll = true;
                                !this.doneFlag.two && this.jCallEvent("complete")
                            }
                        }
                        this.checkLoadedItems()
                    }).jBind(this))
                }).jBind(this)
            })
        };
    b.prototype = {
        constructor: b,
        showReflection: v.$F,
        setCanvasPosition: v.$F,
        setReflection: v.$F,
        onLazyLoad: function(G) {
            if (this.checkLoadingVisibleItems()) {
                if (this.o.stopDownload || !this.doneFlag.two) {
                    this.jCallEvent("hideProgress");
                    this.jCallEvent("groupLoad")
                }
                if (!this.doneFlag.two) {
                    this.jCallEvent("complete")
                }
            }
        },
        showItem: function(K, N, M) {
            var G;
            var J;
            var I;
            var L = 500;
            var H = K.content;
            if (N) {
                if (v.browser.ieMode && v.browser.ieMode < 10) {
                    G = j(H).jGetSize();
                    J = {
                        opacity: [0, 1],
                        top: [G.height / 2, 0],
                        left: [G.width / 2, 0],
                        width: [0, G.width],
                        height: [0, G.height]
                    };
                    I = new v.FX(H, {
                        duration: L,
                        onComplete: j(function(P, O) {
                            H.jSetCss({
                                overflow: "",
                                position: "",
                                top: "",
                                left: "",
                                width: "",
                                height: ""
                            });
                            if (K.progress) {
                                K.progress.jRemove();
                                K.progress = null
                            }
                        }).jBind(this),
                        onStart: j(function() {
                            H.jSetCss({
                                position: "relative",
                                overflow: "hidden"
                            })
                        }).jBind(this)
                    });
                    I.start(J)
                } else {
                    H.jSetCssProp("transition", "none");
                    H.jSetOpacity(0);
                    H.offsetHeight;
                    H.parentNode.offsetHeight;
                    H.jAddEvent("transitionend", j(function(O) {
                        if (O.target == H) {
                            this.jRemoveEvent(O.type);
                            this.jSetCssProp(g, "");
                            this.jSetCssProp("transition", "");
                            if (K.progress) {
                                K.progress.jRemove();
                                K.progress = null
                            }
                        }
                    }).jBind(H));
                    H.jSetCssProp("transition", g + " " + L + "ms cubic-bezier(.5,.5,.69,1.9), opacity " + L + "ms linear");
                    H.offsetHeight;
                    H.parentNode.offsetHeight;
                    H.jSetOpacity(1);
                    M && M(K)
                }
            } else {
                H.jSetOpacity(1);
                if (K.progress) {
                    K.progress.jRemove();
                    K.progress = null
                }
            }
            K.clone.length > 0 && j(K.clone).jEach(j(function(O) {
                if (O) {
                    j(O.content).jSetOpacity(1);
                    O.load = "loaded";
                    if (O.progress) {
                        O.progress.jRemove();
                        O.progress = null
                    }
                }
            }).jBind(this))
        },
        checkLoadedItems: function() {
            var G = 0;
            this.items.jEach(j(function(H) {
                if (H.load == "loaded" || H.load == "error") {
                    G++
                }
                if (this.l == G) {
                    this.loadAll = true;
                    this.jCallEvent("hideProgress")
                }
            }).jBind(this))
        },
        checkLoadingVisibleItems: function() {
            var G = 0;
            var H = 0;
            if (this.loadAll) {
                return true
            }
            for (; G < this.fullViewedItems; G++) {
                if (this.items[this._getItemIndex(this.last + G)].load == "loaded" || this.items[this._getItemIndex(this.last + G)].load == "error") {
                    H += 1
                }
            }
            return H == this.fullViewedItems
        },
        _sWidth: function() {
            return this.container.parentNode.jGetSize()[this.p_.size]
        },
        _setProperties: function() {
            var G = {
                horizontal: {
                    size: "width",
                    pos: "left",
                    otherSize: "height"
                },
                vertical: {
                    size: "height",
                    pos: "top",
                    otherSize: "width"
                }
            };
            this.p_ = G[this.o.orientation];
            if (this.o.step == 0) {
                this.o.step = "auto"
            }
            if (!this.o.loop || "rewind" === this.o.loop) {
                this.loop.firstItem = true
            }
            if (v.browser.ieMode && v.browser.ieMode < 10) {
                this.container.jSetCssProp(this.p_.pos, 0)
            } else {
                this.container.jSetCssProp(g, "translate3d(0, 0, 0)")
            }
        },
        _render: function() {
            this.container.offsetHeight
        },
        preloadAll: function() {
            if (this.loadAll || this.preloadAllFlag) {
                return
            }
            this.preloadAllFlag = true;
            this.jCallEvent("showProgress");
            this.items.jEach(j(function(G) {
                if (G.load == "notLoaded") {
                    if (G.progress) {
                        G.progress.jRemove();
                        G.progress = null
                    }
                    G.clone.length > 0 && j(G.clone).jEach(function(H) {
                        if (H.progress) {
                            H.progress.jRemove();
                            H.progress = null
                        }
                    });
                    this.queue.push({
                        node: G.content,
                        index: G.index
                    })
                }
            }).jBind(this));
            this.loadAll = true
        },
        preloadItem: function(H) {
            var K = this.last;
            var G = j([]);
            var J;
            var L;
            if (this.loadAll) {
                return
            }
            if (this.o.lazyLoad) {
                H && (K = (H == "forward") ? this._getItemIndex(K + this.fullViewedItems) : this._getItemIndex(K - this.fullViewedItems));
                L = j(function(M) {
                    if (M.load == "notLoaded") {
                        if (this.o.stopDownload) {
                            !H && this.jCallEvent("showProgress")
                        } else {
                            M.progress && M.progress.show()
                        }
                        M.load = "load";
                        this.queue.push({
                            node: M.content,
                            index: M.index
                        })
                    }
                }).jBind(this);
                for (var I = 0; I < this.fullViewedItems; I++) {
                    J = this.items[this._getItemIndex(K + I)];
                    L(J);
                    if (!H) {
                        L(this.items[this._getItemIndex(J.index + this.fullViewedItems)]);
                        L(this.items[this._getItemIndex(J.index - this.fullViewedItems)])
                    }
                }
            }
        },
        loadItem: function(H) {
            var G = this.items[H];
            if (G.load === "notLoaded") {
                this.jCallEvent("showProgress");
                G.load = "load";
                this.queue.push({
                    node: G.content,
                    index: G.index,
                    originItem: G
                });
                this.doneFlag.one = false
            }
        },
        freeTouchPreload: function(L) {
            var M;
            var H;
            var J;
            var I;
            var G = 0;
            var K = this.allNodes.length;
            if (L == "backward") {
                G = K - 1;
                K = -1
            }
            if (!this.loadAll) {
                while (G != K) {
                    I = this.allNodes[G];
                    M = I.jGetPosition();
                    H = I.getAttribute("data-item");
                    if (M[this.p_.pos] + this.items[0].size[this.p_.size] > this.wrapperPosition[this.p_.pos] && M[this.p_.pos] < this.wrapperPosition[this.p_.pos] + this.containerWidth) {
                        J = this.items[H];
                        if (J.load == "notLoaded") {
                            J.load = "load";
                            J.progress && J.progress.show();
                            j(J.clone).jEach(j(function(N) {
                                N.progress && N.progress.show()
                            }).jBind(this));
                            this.queue.push({
                                node: J.content,
                                index: J.index
                            })
                        }
                    }
                    L == "forward" ? G++ : G--
                }
            }
        },
        done: function(K) {
            var G;
            var J;
            var I;
            if (this.doneFlag.one) {
                return
            }
            this.doneFlag.one = true;
            G = this.l = this.items.length;
            this.containerWidth = this._sWidth();
            J = j(this.container.parentNode).jGetPosition();
            for (var H = 0; H < this.l; H++) {
                I = this.items[H];
                I.size = I.node.jGetSize(true);
                this.allSize += I.size[this.p_.size]
            }
            this.onResize()
        },
        done2: function(H) {
            this.doneFlag.two = true;
            this.setItemStep();
            if (!v.browser.ieMode || v.browser.ieMode && v.browser.ieMode > 9) {
                if (this.o.draggable) {
                    this._initDragOnScroll()
                }
            }
            this.itemEvent();
            if ((!v.browser.ieMode || v.browser.ieMode && v.browser.ieMode > 9) && "scroll" === this.o.effect && this.o.scrollOnWheel) {
                this._initOnWheel()
            }
            if (j(["scroll", "animation"]).contains(this.name)) {
                for (var G = 0; G < this.items.length; G++) {
                    if (G >= this.fullViewedItems) {
                        this.items[G].progress && this.items[G].progress.show()
                    }
                }
            }
            this.last = 0;
            this.globalIndex = this.itemsFirstClones.length;
            j(window).jAddEvent("resize", this.onResize.jBind(this));
            if (this.o.keyboard) {
                j(document).jAddEvent("keydown", this.keyboardCallback)
            }
            this.onResize();
            this.addFullscreenEvent();
            H && H()
        },
        addItem: function(H, G) {
            this.loadItem(G);
            this.done()
        },
        removeItem: function(G) {
            var I = this.items[G];
            this.removeEventByIndex(G);
            this.removeByIndex(G);
            for (var H = 0; H < I.clone.length; H++) {
                I.clone[H].node.jRemove()
            }
            I.node.jRemove();
            this.clearClones(j(function() {
                this._prepareClones();
                this.globalLength = this.container.childNodes.length;
                this.rightQueue()
            }).jBind(this));
            this.onResize()
        },
        removeByIndex: function(G) {
            var I = this.items.length;
            var H = j(function(O) {
                var M = j([]);
                var L = 0;
                var J = true;
                for (var K = 0; K < I; K++) {
                    if (K !== O) {
                        var N = this.items[K];
                        N.index = L;
                        N.node.setAttribute("data-item", L);
                        M.push(N);
                        L++
                    }
                }
                return M
            }).jBind(this);
            if (G === 0) {
                this.items = H(G)
            } else {
                if (G === I - 1) {
                    this.items.pop()
                } else {
                    if (G > 0 && G < I - 1) {
                        this.items = H(G)
                    }
                }
            }
            this.l = this.items.length;
            if (this.last >= this.l) {
                this.last = this.l - 1
            }
        },
        afterAddItem: function(G, I) {
            this.setItemStep();
            this.itemEventByIndex(G);
            if (j(["scroll", "animation"]).contains(this.name)) {
                for (var H = 0; H < this.items.length; H++) {
                    if (H >= this.fullViewedItems) {
                        this.items[H].progress && this.items[H].progress.show()
                    }
                }
            }
            this.last = 0;
            this.globalIndex = this.itemsFirstClones.length;
            this.clearClones(j(function() {
                this._prepareClones();
                this.rightQueue()
            }).jBind(this));
            this.onResize();
            I && I()
        },
        jGetSizeItems: function() {
            return this.items.length
        },
        getItems: function() {
            return this.items
        },
        addFullscreenEvent: function() {
            if (this.o.effect === "animation") {
                return
            }
            var G = this.container.querySelectorAll("iframe");
            v.$A(G).jEach(j(function(H) {
                j(H).jAddEvent(v.browser.fullScreen.prefix + v.browser.fullScreen.changeEventName, j(function(I) {
                    I.stop();
                    this.fullscreenChanged = false;
                    if (v.browser.fullScreen.enabled()) {
                        this.fullscreenChanged = true
                    }
                }).jBind(this))
            }).jBind(this))
        },
        itemEvent: function() {
            this.items.jEach(j(function(G) {
                G.content.showThis = j(function() {
                    this.jCallEvent("show-this", {
                        index: G.index
                    })
                }).jBind(this);
                G.content.jAddEvent("click", j(function(H) {
                    if (this.move_) {
                        H.stop()
                    }
                }).jBind(this))
            }).jBind(this))
        },
        itemEventByIndex: function(G) {
            var H = this.items[G];
            if (H) {
                H.content.showThis = j(function() {
                    this.jCallEvent("show-this", {
                        index: H.index
                    })
                }).jBind(this);
                H.content.jAddEvent("click", j(function(I) {
                    if (this.move_) {
                        I.stop()
                    }
                }).jBind(this))
            }
        },
        removeEventByIndex: function(G) {
            var H = this.items[G];
            if (H) {
                H.content.jRemoveEvent("click")
            }
        },
        setItemStep: function(I) {
            var H = 0;
            if (this.stopScroll) {
                return
            }
            if (this.o.continuous) {
                this.itemStep = this.fullViewedItems;
                return
            }
            for (var G = 0; G < this.l; G++) {
                H += this.items[G].size[this.p_.size];
                if (H >= this.containerWidth) {
                    if (this.itemStep == "auto" || this.itemStep >= G) {
                        if (this.o.effect == "animation" && H - this.items[G].size[this.p_.size] + 5 < this.containerWidth || H == this.containerWidth) {
                            G += 1
                        }
                        this.itemStep = G;
                        if (this.o.step != "auto" && this.o.step < this.itemStep) {
                            this.itemStep = this.o.step
                        }
                    }
                    break
                }
            }!this.itemStep && (this.itemStep = 1)
        },
        cloneFigure: function(H) {
            var G = H.cloneNode();
            figure = document.createElement("figure"), figcaption = document.createElement("figcaption");
            v.$A(H.firstChild.childNodes).jEach(j(function(I) {
                if (I.tagName.toLowerCase() == "figcaption") {
                    v.$A(I.childNodes).jEach(j(function(J) {
                        j(figcaption).append(J.cloneNode(true))
                    }).jBind(this));
                    v.$A(I.attributes).jEach(j(function(J) {
                        figure.setAttribute(J, J.nodeValue)
                    }).jBind(this));
                    figure.append(figcaption)
                } else {
                    j(figure).append(I.cloneNode(true))
                }
            }).jBind(this));
            v.$A(H.firstChild.attributes).jEach(j(function(I) {
                figure.setAttribute(I, I.nodeValue)
            }).jBind(this));
            G.append(figure);
            return G
        },
        performedOnClones: function(G) {
            if (this.itemsFirstClones.length > 0) {
                j([this.itemsFirstClones, this.itemsLastClones]).jEach(j(function(H) {
                    H.jEach(j(function(J, I) {
                        G(J, I)
                    }).jBind(this))
                }).jBind(this))
            }
        },
        addCloneContent: function(H, I) {
            if (this.itemsFirstClones.length > 0) {
                var G = j(function() {
                    var J;
                    if (v.browser.ieMode && v.browser.ieMode < 9 && H.node.firstChild.tagName.toLowerCase() == "figure") {
                        J = this.cloneFigure(H.content.cloneNode(true))
                    } else {
                        J = H.content.cloneNode(true)
                    }
                    j(J).jAddEvent("dragstart mousedown selectstart", function(K) {
                        K.stopDefaults()
                    });
                    J.childNodes && v.$A(J.childNodes).jEach(j(function(K) {
                        if (j(K).jHasClass && j(K).jHasClass("MagicScroll-progress-bar")) {
                            K.kill()
                        }
                    }).jBind(this));
                    return J
                }).jBind(this);
                this.performedOnClones(j(function(K, J) {
                    if (K.index == H.index && !K.append) {
                        K.content = G();
                        this.items[H.index].clone.push(K);
                        K.append = true;
                        K.node.append(K.content)
                    }
                }).jBind(this))
            }
            I && I()
        },
        clearClones: function(J) {
            if (this.itemsFirstClones.length > 0) {
                for (var I = 0; I < this.itemsFirstClones.length; I++) {
                    this.itemsFirstClones[I].node.jRemove()
                }
                this.itemsFirstClones = j([])
            }
            if (this.itemsLastClones.length > 0) {
                for (var H = 0; H < this.itemsLastClones.length; H++) {
                    this.itemsLastClones[H].node.jRemove()
                }
                this.itemsLastClones = j([])
            }
            for (var G = 0; G < this.items.length; G++) {
                this.items[G].clone = j([])
            }
            J && J()
        },
        _prepareClones: function() {
            var G;
            var H = 0;
            var K = 0;
            var M = 0;
            var J = {
                left: 0,
                top: 0
            };
            var L;
            var I;
            if (this.stopScroll) {
                return
            }
            for (G = 0; G < this.l; G++) {
                H += this.items[G].size[this.p_.size];
                M++;
                if (this.containerWidth <= H) {
                    break
                }
            }
            if (this.l > 1 && (M > this.fullViewedItems || this.itemsFirstClones.length == 0)) {
                K = this.itemsFirstClones.length;
                for (G = K; G < M; G++) {
                    L = {
                        node: this.items[this.l - 1 - G].node.cloneNode(),
                        load: "notLoaded",
                        append: false
                    };
                    j(L.node).setAttribute("data-item", this.l - 1 - G);
                    L.index = this.items[this.l - 1 - G].index;
                    if (this.o.lazyLoad && this.o.progress) {
                        L.progress = new v.Modules.Progress(L.node);
                        L.progress.show()
                    }
                    this.itemsFirstClones.push(L);
                    I = {
                        node: this.items[G].node.cloneNode(),
                        load: "notLoaded",
                        append: false
                    };
                    j(I.node).setAttribute("data-item", G);
                    I.index = this.items[G].index;
                    if (this.o.lazyLoad && this.o.progress) {
                        I.progress = new v.Modules.Progress(I.node);
                        I.progress.show()
                    }
                    this.itemsLastClones.push(I);
                    j([I.node, L.node]).jEach(j(function(N) {
                        N.jAddEvent("click", j(function(O) {
                            if (this.move_) {
                                O.stop()
                            }
                        }).jBind(this))
                    }).jBind(this));
                    this.container.append(I.node);
                    this.container.append(L.node, "top");
                    j([this.items[this.l - 1 - G], this.items[G]]).jEach(j(function(N) {
                        if (N.load == "loaded") {
                            this.addCloneContent(N, j(function() {
                                var O = true;
                                if (j(["scroll", "animation"]).contains(this.name)) {
                                    if (!this.doneFlag.two && !this.o.lazyLoad) {
                                        O = N.index < this.fullViewedItems
                                    }
                                }
                                this.showItem(N, O);
                                N.clone.length > 0 && j(N.clone).jEach(function(P) {
                                    if (P.progress) {
                                        P.progress.jRemove();
                                        P.progress = null
                                    }
                                })
                            }).jBind(this))
                        }
                    }).jBind(this))
                }
                if (K) {
                    this.fullViewedItems += M - K
                } else {
                    this.fullViewedItems = M
                }
            } else {
                this.fullViewedItems = M
            }
            this.correctPosition = this.containerPosition = 0;
            H = 0;
            for (G = 0; G < this.itemsFirstClones.length; G++) {
                H += this.items[this.l - 1 - G].size[this.p_.size]
            }
            this.correctPosition += H;
            this.containerPosition -= H;
            J[this.p_.pos] = this.containerPosition;
            if (v.browser.ieMode && v.browser.ieMode < 10) {
                this.container.jSetCssProp(this.p_.pos, J[this.p_.pos])
            } else {
                this.correctContainerPosition()
            }
        },
        push: function(G) {
            this.l = this.items.length;
            G.index = this.l;
            G.load = "notLoaded";
            G.clone = [];
            this.itemProcessing(G);
            this.items.push(G)
        },
        pushByIndex: function(N, K) {
            var J = this.items.length;
            var L = K;
            N.load = "notLoaded";
            N.clone = [];
            if (L >= J) {
                N.index = J;
                this.items.push(N)
            } else {
                if (L <= 0) {
                    L = 0;
                    N.index = L;
                    this.items.unshift(N);
                    for (var M = 1; M < this.items.length; M++) {
                        this.items[M].index = M;
                        this.items[M].node.setAttribute("data-item", this.items[M].index)
                    }
                } else {
                    if (L > 0 && L < J) {
                        var I = 0;
                        var G = new Array(J + 1);
                        G = j(G);
                        for (var H = 0; H < G.length; H++) {
                            if (H === L) {
                                N.index = H;
                                G[H] = N
                            } else {
                                G[H] = this.items[I];
                                G[H].index = H;
                                G[H].node.setAttribute("data-item", G[H].index);
                                I++
                            }
                        }
                        this.items = G
                    }
                }
            }
            this.itemProcessing(N)
        },
        itemProcessing: function(G) {
            G.content.jAddEvent("dragstart mousedown selectstart", function(H) {
                H.preventDefault()
            });
            if (this.o.progress && this.o.lazyLoad) {
                G.progress = new v.Modules.Progress(G.node, true);
                if (!this.o.stopDownload) {
                    G.progress.show()
                }
            }
            G.node.setAttribute("data-item", G.index);
            G.node.jAddEvent("mouseover mouseout", j(function(I) {
                var H = I.getRelated();
                while (H && H !== G.node) {
                    H = H.parentNode
                }
                if (H == G.node) {
                    return
                }
                if ("mouseover" === I.type) {
                    this.jCallEvent("on-item-hover", {
                        itemIndex: G.index
                    })
                } else {
                    this.jCallEvent("on-item-out", {
                        itemIndex: G.index
                    })
                }
            }).jBind(this))
        },
        _getItemIndex: function(G) {
            G %= this.l;
            G < 0 && (G = G + this.l);
            return G
        },
        jump: function(H, I) {
            var G;
            if (H == "forward" || H == "backward") {
                this.direction = H
            }
            if (this.move_ || this.wheel_) {
                return
            }
            this.move_ = true;
            if (v.jTypeOf(H) == "object") {
                this.direction = H.direction;
                H.disableEffect = false;
                H.defaultMove = false
            } else {
                if (/forward|backward|^\+|^\-/.test(H)) {
                    if (/^\+|^\-/.test(H)) {
                        G = /^\+/.test(H) ? "forward" : "backward";
                        H = {
                            goTo: Math.abs(parseInt(H)),
                            direction: G
                        };
                        H.goTo > this.l && (H.goTo = this.l);
                        H.target = this._getItemIndex(H.direction == "forward" ? (this.last + H.goTo) : (this.last - H.goTo))
                    } else {
                        H = {
                            direction: H
                        };
                        H.target = this._getItemIndex(H.direction == "forward" ? (this.last + this.itemStep) : (this.last - this.itemStep))
                    }
                    H.disableEffect = false;
                    H.defaultMove = true
                } else {
                    if (v.jTypeOf(parseInt(H)) == "number") {
                        H = {
                            target: this._getItemIndex(H),
                            disableEffect: true,
                            defaultMove: false
                        }
                    }
                }
            }
            H.callback = I;
            if (!this.o.loop) {
                if (this.loop.firstItem || this.loop.lastItem) {
                    if (this.loop.firstItem) {
                        if ("backward" === H.direction) {
                            this.move_ = false;
                            I(null, true);
                            return
                        }
                    } else {
                        if ("forward" === H.direction) {
                            this.move_ = false;
                            I(null, true);
                            return
                        }
                    }
                }
            }
            this["_" + this.name](H)
        },
        _shiftContainer: function(J, H) {
            var I = {
                left: 0,
                top: 0
            };
            var K = false;
            var G = H || this.containerPosition;
            if (J == "forward") {
                if (G + this.correctPosition - this.distance + this.allSize < 0) {
                    this.containerPosition = G + this.allSize;
                    I[this.p_.pos] = this.containerPosition;
                    K = true
                }
            } else {
                if (G + this.distance > 0) {
                    this.containerPosition = G - this.allSize;
                    I[this.p_.pos] = this.containerPosition;
                    K = true
                }
            }
            if (K) {
                if (v.browser.ieMode && v.browser.ieMode < 10) {
                    this.container.jSetCssProp(this.p_.pos, I[this.p_.pos] + "px")
                } else {
                    this.container.jSetCssProp(g, "translate3d(" + I.left + "px, " + I.top + "px, 0)");
                    this.container.jSetCssProp("transition", g + " 0ms " + this.o.timingFunction);
                    this._render();
                    if (this.o.effect == "animation") {
                        this.previous = this.globalIndex = this._getGlobalIndex();
                        if (J == "forward") {
                            this.globalIndex += this.itemStep
                        } else {
                            this.globalIndex -= this.itemStep
                        }
                    }
                }
            }
            return K
        },
        _calcDistance: function(J, I) {
            var G = true;
            if (!I) {
                if (this.o.step == "auto") {
                    this.itemStep = "auto";
                    this.setItemStep(J == "backward")
                }
                G = false;
                I = this.itemStep
            } else {
                this.o.stopDownload = false
            }
            for (var H = I; H > 0; H--) {
                this.last = this._getItemIndex((J == "forward") ? (this.last + 1) : (this.last - 1));
                this.globalIndex = (J == "forward") ? (this.globalIndex + 1) : (this.globalIndex - 1);
                this.distance += this.items[(J == "forward") ? this._getItemIndex(this.last - 1) : this.last].size[this.p_.size]
            }
            if ("infinite" === this.o.loop) {
                if (!this.o.continuous) {
                    this.jCallEvent("on-start-effect", {
                        arr: this.getVisibleIndexes()
                    })
                }
            } else {
                if ("scroll" === this.o.effect && this.loop.lastItem && J == "backward") {
                    if (G) {
                        this.last -= (this.itemsVisible - 1)
                    } else {
                        this.last -= (I - 1)
                    }
                    if (this.last < 0) {
                        this.last = 0
                    }
                }
                this.jCallEvent("enable");
                if (this.loop.lastItem && J == "forward") {
                    this.loop.lastItem = false;
                    this.loop.firstItem = true;
                    this.containerPosition = 0;
                    this.distance = 0;
                    this.last = 0;
                    this.globalIndex = 0;
                    this.jCallEvent("first-frame");
                    this.jCallEvent("on-start-effect", {
                        arr: this.getVisibleIndexes()
                    })
                } else {
                    if (this.loop.firstItem && J == "backward") {
                        this.loop.firstItem = false;
                        this.loop.lastItem = true;
                        this.distance = 0;
                        this.last = this.l - 1;
                        if (this.o.effect == "scroll") {
                            this.globalIndex = this.l - this.itemsVisible;
                            this.containerPosition = (this.allSize - this.containerWidth) * (-1)
                        } else {
                            this.globalIndex = this.l - this.l % this.itemsVisible;
                            this.containerPosition = (Math.ceil(this.l / this.itemStep) - 1) * this.containerWidth * (-1)
                        }
                        this.jCallEvent("last-frame");
                        this.jCallEvent("on-start-effect", {
                            arr: this.getVisibleIndexes(true)
                        })
                    } else {
                        this.loop.lastItem = false;
                        this.loop.firstItem = false;
                        if (J == "forward") {
                            if (this.containerPosition - this.distance <= this.containerWidth - this.allSize || this.containerPosition - this.distance + 1 <= this.containerWidth - this.allSize) {
                                this.jCallEvent("last-frame");
                                if (this.o.effect == "scroll" || this.o.effect == "animation" && "infinite" === this.o.loop) {
                                    this.distance = this.containerPosition - (this.containerWidth - this.allSize)
                                } else {
                                    this.distance = this.containerWidth
                                }
                                this.loop.lastItem = true;
                                this.last = this.l - 1;
                                this.jCallEvent("on-start-effect", {
                                    arr: this.getVisibleIndexes(true)
                                })
                            } else {
                                this.jCallEvent("on-start-effect", {
                                    arr: this.getVisibleIndexes()
                                })
                            }
                        } else {
                            if (Math.ceil(this.containerPosition + this.distance) >= 0 || this.containerPosition + this.distance === -1) {
                                this.jCallEvent("first-frame");
                                this.distance = Math.abs(this.containerPosition);
                                this.loop.firstItem = true;
                                this.globalIndex = 0;
                                this.last = 0;
                                this.jCallEvent("on-start-effect", {
                                    arr: this.getVisibleIndexes()
                                })
                            } else {
                                this.jCallEvent("on-start-effect", {
                                    arr: this.getVisibleIndexes()
                                })
                            }
                        }
                    }
                }
            }
        },
        jumpToNumber: function(K) {
            var I = 0;
            var J;
            if (!K.direction) {
                I = Math.floor(this.fullViewedItems / 2);
                if (this.fullViewedItems % 2 == 0) {
                    I -= 1
                }
                I < 0 && (I = 0)
            }
            if ("infinite" === this.o.loop) {
                K.target = this._getItemIndex(K.target - I)
            }
            if (this.last != K.target) {
                this.o.stopDownload = false;
                J = j(function(O) {
                    var M = this.last,
                        N = 0,
                        L;
                    do {
                        N++;
                        !O ? M++ : M--;
                        L = this._getItemIndex(M)
                    } while (L != K.target);
                    return N
                }).jBind(this);
                if (!K.direction) {
                    if ("infinite" === this.o.loop) {
                        K.direction = J() <= J(true) ? "forward" : "backward"
                    } else {
                        K.direction = K.target > this.last ? "forward" : "backward"
                    }
                }
                this.jCallEvent("enable");
                if ("infinite" === this.o.loop) {
                    while (this.last != K.target) {
                        this.last = this._getItemIndex(K.direction == "forward" ? ++this.last : --this.last);
                        this.globalIndex = K.direction == "forward" ? ++this.globalIndex : --this.globalIndex;
                        this.distance += this.items[this.last].size[this.p_.size]
                    }
                    this.jCallEvent("on-start-effect", {
                        arr: this.getVisibleIndexes()
                    })
                } else {
                    this.loop.lastItem = false;
                    this.loop.firstItem = false;
                    this.last = K.target;
                    var H = 0;
                    for (var G = 0; G < K.target - I; G++) {
                        H += this.items[G].size[this.p_.size]
                    }
                    this.globalIndex = K.target;
                    this.containerPosition = 0 - this.correctPosition - H;
                    if (this.o.effect == "scroll" && this.containerPosition <= 0 - (this.allSize - this.containerWidth) || this.containerPosition <= 0 - ((this.allSize + (this.l % this.itemStep) * this.items[0].size[this.p_.size]) - this.containerWidth)) {
                        if (this.o.effect == "scroll") {
                            this.containerPosition = 0 - (this.allSize - this.containerWidth)
                        }
                        this.loop.lastItem = true;
                        this.jCallEvent("last-frame");
                        this.last = this.l - 1;
                        this.jCallEvent("on-start-effect", {
                            arr: this.getVisibleIndexes(true)
                        })
                    } else {
                        this.jCallEvent("on-start-effect", {
                            arr: this.getVisibleIndexes()
                        })
                    }
                    if (this.containerPosition >= 0) {
                        this.containerPosition = 0;
                        this.jCallEvent("first-frame");
                        this.loop.firstItem = true;
                        this.last = 0;
                        this.jCallEvent("on-start-effect", {
                            arr: this.getVisibleIndexes()
                        })
                    }
                }
            } else {
                this.move_ = false;
                this.wheel_ = false;
                this.jCallEvent("disableHold")
            }
        },
        _scroll: function(J) {
            var G = this.containerPosition;
            var H = false;
            var I;
            this.previous = this.globalIndex;
            this.distance = 0;
            if ((!this.o.loop || "rewind" === this.o.loop) && this.o.effect == "animation") {
                if (this.loop.lastItem && J.direction == "forward" || this.loop.firstItem && J.direction == "backward") {
                    H = true
                }
            }
            if (J.defaultMove) {
                this._calcDistance(J.direction, J.goTo)
            } else {
                this.jumpToNumber(J);
                if (!this.o.loop) {
                    if (G === this.containerPosition) {
                        this.move_ = false;
                        this.wheel_ = false;
                        this.jCallEvent("disableHold")
                    }
                }
            }
            if (H) {
                J.direction = J.direction == "forward" ? "backward" : "forward"
            }
            if (0 !== this.wheelDiff) {
                I = this.items[this.prevIndex].size[this.p_.size] - this.wheelDiff;
                if (J.direction == "forward") {
                    this.distance -= I
                } else {
                    this.distance += I
                }
                this.wheelDiff = 0
            }
            "infinite" === this.o.loop && this._shiftContainer(J.direction);
            if (J.direction == "forward") {
                this.containerPosition -= this.distance
            } else {
                this.containerPosition += this.distance
            }
            if ((!this.o.loop || this.o.loop === "rewind") && this.o.effect === "scroll") {
                var K = 0;
                j(this.getVisibleIndexes(this.loop.lastItem)).jEach(function(L) {
                    K += this.items[L].size.width
                }.jBind(this));
                if (this.containerPosition > 0) {
                    this.containerPosition = 0
                } else {
                    if (Math.abs(G) + K >= this.allSize - this.containerWidth && J.direction === "forward") {
                        if (this.containerPosition !== 0 || !this.o.loop) {
                            this.containerPosition = (this.allSize - this.containerWidth) * (-1)
                        }
                    }
                }
            }
            this.moveSettings.direction = J.direction;
            this.moveSettings.disableEffect = J.disableEffect;
            if (G != this.containerPosition) {
                this.callback = J.callback;
                if (this.o.stopDownload && !this.loadAll && !this.checkLoadingVisibleItems()) {
                    this.jCallEvent("showProgress");
                    this.preloadItem();
                    this.bindEvent("groupLoad", j(function(L) {
                        this.move_ && this._move(null, L.direction, L.disableEffect)
                    }).jBind(this, this.moveSettings))
                } else {
                    if (!this.loadAll) {
                        this.preloadItem()
                    }
                    this._move(null, J.direction, J.disableEffect)
                }
            } else {
                this.move_ = false;
                this.wheel_ = false;
                this.jCallEvent("hold")
            }
        },
        _move: function(H, G, J) {
            var I = {
                left: 0,
                top: 0
            };
            this.move_ = true;
            if (v.browser.ieMode && v.browser.ieMode < 10) {
                I = {};
                I[this.p_.pos] = [parseInt(this.container.jGetCss(this.p_.pos)), this.containerPosition];
                this.fx = new v.FX(this.container, {
                    transition: this.o.timingFunction,
                    duration: H || this.o.duration,
                    onComplete: this._onComplete.jBind(this),
                    onStart: j(function() {
                        this.stop_ = false
                    }).jBind(this)
                }).start(I)
            } else {
                I[this.p_.pos] = this.containerPosition;
                if (this.o.effect == "animation" && !J) {
                    this._moveEffect(G, I)
                } else {
                    this.container.jRemoveEvent("transitionend");
                    this.container.jAddEvent("transitionend", j(function(K) {
                        if (K.target == this.container) {
                            this.container.jRemoveEvent(K.type);
                            if (J) {
                                this.globalIndex = this._getGlobalIndex();
                                this._cleansingStyles()
                            }
                            this._onComplete()
                        }
                    }).jBind(this));
                    this.container.jSetCssProp(g, "translate3d(" + I.left + "px, " + I.top + "px, 0)");
                    this.container.jSetCssProp("transition", g + " " + (H || this.o.duration) + "ms " + this.o.timingFunction)
                }
            }
        },
        _moveEffect: function(M, L) {
            var H;
            var J;
            var I = this.container.childNodes;
            var G = I.length;
            var N = j(function(O) {
                O %= this.globalLength;
                O < 0 && (O = O + this.globalLength);
                return O
            }).jBind(this);
            this.exitItems.length = 0;
            this.enterItems.length = 0;
            for (var K = 0; K < this.itemStep; K++) {
                if ("infinite" === this.o.loop) {
                    H = N(this.previous + K)
                } else {
                    H = this.previous + K < G ? this.previous + K : null
                }
                H != null && this.exitItems.push(I[H]);
                if ("infinite" === this.o.loop) {
                    J = N(this.globalIndex + K)
                } else {
                    J = this.globalIndex + K < G ? this.globalIndex + K : null
                }
                J != null && this.enterItems.push(I[J])
            }
            if (M == "backward") {
                this.exitItems.reverse();
                this.enterItems.reverse()
            }
            this.container.setAttribute("data-" + M, "");
            this.exitItems.jEach(j(function(P, O) {
                P.jAddEvent(w + "AnimationEnd animationend", j(function(Q, R, S) {
                    if (Q == this.exitItems[R]) {
                        Q.jRemoveEvent(w + "AnimationEnd animationend").setAttribute("data-exited", "");
                        if (R == this.exitItems.length - 1) {
                            this.exitItems.jEach(j(function(U, T) {
                                U.removeAttribute("data-animation-nth");
                                U.removeAttribute("data-action")
                            }).jBind(this));
                            this.enterItems.jEach(j(function(U, T) {
                                if (T == this.enterItems.length - 1) {
                                    U.jAddEvent(w + "AnimationEnd animationend", j(function(V) {
                                        if (V.target == U) {
                                            U.jRemoveEvent(w + "AnimationEnd animationend");
                                            this.enterItems.jEach(j(function(W, X) {
                                                W.removeAttribute("data-animation-nth");
                                                W.removeAttribute("data-action")
                                            }).jBind(this));
                                            this.exitItems.jEach(j(function(W, X) {
                                                W.removeAttribute("data-exited")
                                            }).jBind(this));
                                            this.container.removeAttribute("data-" + M);
                                            this._render();
                                            this._onComplete()
                                        }
                                    }).jBind(this))
                                }
                                U.setAttribute("data-entering", "");
                                U.jAddEvent(w + "AnimationStart animationstart", j(function(V) {
                                    if (V.target == this) {
                                        this.jRemoveEvent(w + "AnimationStart animationstart");
                                        U.removeAttribute("data-entering")
                                    }
                                }).jBind(U));
                                U.setAttribute("data-action", "enter");
                                U.setAttribute("data-animation-nth", (T + 1))
                            }).jBind(this));
                            this.container.jSetCssProp(g, "translate3d(" + L.left + "px, " + L.top + "px, 0)")
                        }
                    }
                }).jBind(this, P, O))
            }).jBind(this));
            this.exitItems.jEach(j(function(P, O) {
                P.setAttribute("data-exiting", "");
                P.jAddEvent(w + "AnimationStart animationstart", j(function(Q) {
                    if (Q.target == this) {
                        P.jRemoveEvent(w + "AnimationStart animationstart");
                        this.removeAttribute("data-exiting")
                    }
                }).jBind(P));
                P.setAttribute("data-action", "exit");
                P.setAttribute("data-animation-nth", (O + 1))
            }).jBind(this))
        },
        getVisibleIndexes: function(J) {
            var K = 0;
            var I = this.itemStep;
            var G = [];
            var H;
            if (J) {
                if (this.o.effect == "scroll") {
                    K = this.l - this.itemStep
                } else {
                    K = this.l % this.itemStep ? this.l - this.l % this.itemStep : this.l - this.itemStep
                }
                I = this.l
            }
            for (; K < I; K++) {
                if (!J) {
                    H = this.last + K
                } else {
                    H = K
                }
                G.push(this._getItemIndex(H))
            }
            return G
        },
        _onComplete: function() {
            this.move_ = false;
            this.continuousPause = false;
            this.callback && this.callback(this.getVisibleIndexes(this.loop.lastItem))
        },
        _cleansingStyles: function() {
            this.container.jSetCssProp("transition", g + " 0ms")
        },
        getMatrixPosition: function(L) {
            var K = {
                x: 0,
                y: 0
            };
            var I = L.jGetCss(g) || "";
            var J = /3d/.test(I) ? (/matrix3d\(([^\)]+)\)/) : (/matrix\(([^\)]+)\)/);
            var H = /3d/.test(I) ? 12 : 4;
            var G = /3d/.test(I) ? 13 : 5;
            (L.jGetCss(g) || "").replace(J, function(O, N) {
                var M = N.split(",");
                K.x += parseInt(M[H], 10);
                K.y += parseInt(M[G])
            });
            return K
        },
        _getGlobalIndex: function() {
            var I;
            var G;
            var H = Number.MAX_VALUE;
            var K = this.container.parentNode.jGetPosition()[this.p_.pos];
            for (var J = 0; J < this.globalLength; J++) {
                I = this.container.childNodes[J].jGetPosition()[this.p_.pos];
                if (H > Math.abs(K - I)) {
                    H = Math.abs(K - I);
                    G = J
                } else {
                    break
                }
            }
            return G
        },
        changeClones: function() {
            if (this.itemsFirstClones.length == 0) {
                return
            }
            var G;
            var I = j(function(K, L) {
                var M, J;
                if (this.items[L].node != K && this.items[L].load == "loaded") {
                    for (J = 0; J < this.globalLength; J++) {
                        if (this.items[L].node == this.container.childNodes[J]) {
                            M = J;
                            break
                        }
                    }
                    if (M < G) {
                        this.container.insertBefore(K, this.container.childNodes[M]);
                        if (G + 1 <= this.globalLength - 1) {
                            this.container.insertBefore(this.items[L].node, this.container.childNodes[G + 1])
                        } else {
                            this.container.appendChild(this.items[L].node)
                        }
                    } else {
                        this.container.insertBefore(this.items[L].node, K);
                        if (M + 1 <= this.globalLength - 1) {
                            this.container.insertBefore(K, this.container.childNodes[M + 1])
                        } else {
                            this.container.appendChild(K)
                        }
                    }
                }
            }).jBind(this);
            G = this._getGlobalIndex();
            for (var H = 0; H < this.fullViewedItems; H++) {
                I(this.container.childNodes[G], this._getItemIndex(this.last + H));
                G++
            }
        },
        correctItemPosition: function(O) {
            var K;
            var L;
            var R = 0;
            var H = 0;
            var Q;
            var N = this.container.parentNode.jGetPosition()[this.p_.pos] + 1;
            var J = this.container.jGetPosition()[this.p_.pos] - N;
            var P = Math.abs(Math.abs(J) - Math.abs(this.containerPosition));
            var I;
            var G = j(function(S) {
                return parseInt(this.container.childNodes[S].getAttribute("data-item"))
            }).jBind(this);
            (P > 0 && P < 1) && (P = 0);
            if (O == "forward") {
                N += P
            } else {
                N -= P
            }
            for (var M = 0; M < this.globalLength; M++) {
                L = this.container.childNodes[M].jGetPosition()[this.p_.pos];
                if (L == N) {
                    this.last = G(M);
                    return 0
                }
                Q = parseInt(this.container.childNodes[M].jGetSize()[this.p_.size]);
                if (L < N && L + Q > N) {
                    I = M;
                    if (O == "forward") {
                        I = M + 1 > this.globalLength - 1 ? this.globalLength - 1 : M + 1;
                        M++
                    }
                    for (K = 0; K < M; K++) {
                        H += this.items[G(K)].size[this.p_.size]
                    }
                    R = Math.abs(Math.abs(this.containerPosition) - H);
                    this.last = G(I);
                    break
                }
            }
            return R
        },
        _initDragOnScroll: function() {
            var R = (this.allSize / this.l) * this.itemStep;
            var ag = 0;
            var U = false;
            var aj, M, ah, Y, ai, L, H = (this.p_.pos == "left") ? "x" : "y",
                N = {
                    x: 0,
                    y: 0
                },
                W = this.o.effect == "scroll",
                Z, ac = true,
                Q = {
                    x: 0,
                    y: 0
                },
                J = false,
                aa = false,
                O = null,
                T = 0,
                ab = null,
                V = false,
                I = j(function(am) {
                    var al, ak = 0;
                    if (am > this.containerWidth) {
                        am = this.containerWidth
                    }
                    for (al = 1.5; al <= 90; al += 1.5) {
                        ak += (am * Math.cos(al / Math.PI / 2))
                    }
                    return this.containerWidth > ak ? ak : this.containerWidth
                }).jBind(this),
                K = j(function(am) {
                    var an, ak = 0,
                        al, ao;
                    while (ak > this.containerPosition) {
                        ak -= this.containerWidth
                    }
                    if (Math.abs(ak - this.containerPosition) > this.containerWidth / 2) {
                        ak += this.containerWidth
                    }
                    ao = ak;
                    for (an = 0; an < this.globalLength; an++) {
                        al = parseInt(this.container.childNodes[an].getAttribute("data-item"));
                        if (ao == 0) {
                            this.last = al;
                            break
                        }
                        ao += this.items[al].size[this.p_.size]
                    }
                    return ak
                }).jBind(this),
                ae = j(function(ak) {
                    aa = true;
                    j(document.body).jAddClass("mcs-dragging");
                    this.o.stopDownload = false;
                    ac = true;
                    clearTimeout(this.moveTimer);
                    if (this.o.effect == "animation") {
                        this.stopEffect()
                    }
                    this.stopWhell && this.stopWhell();
                    N = {
                        x: 0,
                        y: 0
                    };
                    H = (this.p_.pos == "left") ? "x" : "y";
                    this.jCallEvent("drag-start");
                    this.container.jRemoveEvent("transitionend");
                    this.containerPosition = this.getMatrixPosition(this.container)[H];
                    N[H] = this.containerPosition;
                    this.container.jSetCssProp(g, "translate3d(" + N.x + "px, " + N.y + "px, 0)");
                    this.container.jSetCssProp("transition", "none");
                    this._render();
                    this.o.effect == "scroll" && (W = true);
                    this.move_ = true
                }).jBind(this),
                G = j(function() {
                    if (this.o.effect == "animation") {
                        this.container.jSetCssProp("transition", "none");
                        this.globalIndex = this._getGlobalIndex()
                    }
                    if (this.o.effect == "animation") {
                        this.last = parseInt(this.container.childNodes[this._getGlobalIndex()].getAttribute("data-item"))
                    }
                    if ("infinite" === this.o.loop) {
                        this.changeClones()
                    }
                    this.move_ = false;
                    this.wheel_ = false;
                    W = false;
                    ac = true;
                    this.preloadItem();
                    this.jCallEvent("drag-end", {
                        arr: this.getVisibleIndexes(this.loop.lastItem)
                    })
                }).jBind(this),
                X = j(function(ao) {
                    j(document.body).jRemoveClass("mcs-dragging");
                    if (aa) {
                        aa = false;
                        var am = this.containerPosition;
                        if (!ac) {
                            ao.returnValue = false;
                            S();
                            M = ao.timeStamp - aj;
                            if (this.o.effect == "scroll") {
                                if (M > 200) {
                                    L = ai;
                                    W = false
                                } else {
                                    L = I(Math.abs(Q[H] - ao[H]))
                                }
                                if (v.browser.mobile && this.o.step !== "auto") {
                                    var an = j(function() {
                                        var ar = this.itemStep;
                                        var aq = this.allSize / this.l;
                                        for (var ap = 0; ap < this.itemStep - 1; ap++) {
                                            if (ah === "forward") {
                                                if (ag > aq * (ap + 1)) {
                                                    ar--
                                                } else {
                                                    return ar
                                                }
                                            } else {
                                                if (ag < (aq * -1) * (ap + 1)) {
                                                    ar--
                                                } else {
                                                    return ar
                                                }
                                            }
                                        }
                                        return ar
                                    }).jBind(this);
                                    var al = an();
                                    var ak = (this.allSize / this.l) * (al - 1);
                                    L = ak
                                }
                                ai = L;
                                if ("infinite" === this.o.loop) {
                                    this.distance = Math.abs(ai);
                                    this._shiftContainer(ah)
                                }
                                if ("infinite" === this.o.loop || this.containerPosition <= 0) {
                                    if (Math.abs(this.containerPosition) < ai) {
                                        ai = Math.abs(this.containerPosition)
                                    }
                                    this.containerPosition -= ai
                                }
                                ah == "forward" ? this.containerPosition -= this.correctItemPosition(ah) : this.containerPosition += this.correctItemPosition(ah);
                                if (!this.o.loop || "rewind" === this.o.loop) {
                                    this.jCallEvent("enable");
                                    this.loop.firstItem = false;
                                    this.loop.lastItem = false;
                                    if (this.containerPosition > 0) {
                                        this.containerPosition = 0;
                                        this.last = 0;
                                        W = true;
                                        this.jCallEvent("first-frame");
                                        this.loop.firstItem = true
                                    }
                                    if (this.containerPosition < this.containerWidth - this.allSize) {
                                        this.containerPosition = this.containerWidth - this.allSize;
                                        this.last = this.l - 1;
                                        W = true;
                                        this.jCallEvent("last-frame");
                                        this.loop.lastItem = true
                                    }
                                }
                                Z = W ? 600 : 300
                            } else {
                                W = true;
                                this.distance = 0;
                                this.containerPosition = K();
                                "infinite" === this.o.loop && this._shiftContainer(ah);
                                if (M < 200) {
                                    this.distance = this.containerWidth;
                                    "infinite" === this.o.loop && this._shiftContainer(ah);
                                    if (ah == "forward") {
                                        this.containerPosition -= this.containerWidth
                                    } else {
                                        this.containerPosition += this.containerWidth
                                    }
                                }
                                if (!this.o.loop || "rewind" === this.o.loop) {
                                    this.jCallEvent("enable");
                                    this.loop.firstItem = false;
                                    this.loop.lastItem = false;
                                    if (this.containerPosition >= 0) {
                                        this.containerPosition = 0;
                                        this.last = 0;
                                        this.loop.firstItem = true;
                                        this.jCallEvent("first-frame")
                                    }
                                    if (this.containerPosition <= (Math.ceil(this.l / this.itemStep) - 1) * this.containerWidth * (-1)) {
                                        this.containerPosition = (Math.ceil(this.l / this.itemStep) - 1) * this.containerWidth * (-1);
                                        this.last = this.l - 1;
                                        this.loop.lastItem = true;
                                        this.jCallEvent("last-frame")
                                    }
                                }
                                Z = 500
                            }
                            N[H] = this.containerPosition;
                            this.container.jAddEvent("transitionend", j(function(ap) {
                                if (ap.target == this.container) {
                                    G()
                                }
                            }).jBind(this));
                            if (am == this.containerPosition) {
                                this.move_ = false;
                                W = false;
                                ac = true
                            }
                            this.container.jSetCssProp("transition", g + " " + Z + "ms cubic-bezier(.22,.63,.49,.8)");
                            this.container.jSetCssProp(g, "translate3d(" + N.x + "px, " + N.y + "px, 0)")
                        } else {
                            if (!v.browser.mobile) {
                                G()
                            } else {
                                this.move_ = false
                            }
                        }
                    }
                }).jBind(this),
                P = 0,
                S = j(function() {
                    clearTimeout(ab);
                    ab = null;
                    V = false;
                    P = 0
                }).jBind(this),
                af = j(function() {
                    var ak = P * 0.2;
                    if (Math.abs(ak) < 0.0001) {
                        S();
                        return
                    }
                    P -= ak;
                    this.containerPosition -= ak;
                    N[H] = this.containerPosition;
                    this.container.jSetCssProp(g, "translate3d(" + N.x + "px, " + N.y + "px, 0)");
                    ab = setTimeout(af, 16)
                }).jBind(this),
                ad = j(function(al) {
                    if (aa) {
                        var ak = al[H] - T > 0 ? "backward" : "forward";
                        ac = false;
                        if ("infinite" === this.o.loop) {
                            this.distance = Math.abs(ai);
                            this._shiftContainer(ak)
                        }
                        if (v.browser.ieMode) {
                            P += ai;
                            if (!V) {
                                V = true;
                                af()
                            }
                        } else {
                            this.container.jSetCssProp("transition", g + " 0ms");
                            if (this.o.effect == "animation") {}
                            if (v.browser.mobile && this.o.step !== "auto") {
                                if (U) {
                                    return
                                }
                                if (ah === "forward") {
                                    if (ag + ai > R) {
                                        ai = R - ag;
                                        ai -= 3;
                                        U = true
                                    } else {
                                        ag += ai
                                    }
                                } else {
                                    if (ag + ai < (R * -1)) {
                                        ai = (R * -1) - ag;
                                        ai += 3;
                                        U = true
                                    } else {
                                        ag += ai
                                    }
                                }
                            }
                            this.containerPosition -= ai;
                            N[H] = this.containerPosition;
                            this.container.jSetCssProp(g, "translate3d(" + N.x + "px, " + N.y + "px, 0)")
                        }
                        this.freeTouchPreload(ak)
                    }
                }).jBind(this);
            this.onDrag = j(function(ak) {
                if (this.stopScroll || this.o.effect == "animation" && W) {
                    return
                }
                if ("dragstart" == ak.state) {
                    aj = ak.timeStamp;
                    Q.x = ak.x;
                    Q.y = ak.y;
                    T = ak[H];
                    ag = 0
                } else {
                    ah = (ai > 0) ? "forward" : "backward";
                    ai = T - ak[H];
                    this.moveSettings.direction = ah;
                    if ("dragend" == ak.state) {
                        if (J) {
                            J = false;
                            U = false;
                            X(ak)
                        }
                    } else {
                        if (this.o.orientation == "vertical" || Math.abs(ak.x - Q.x) > Math.abs(ak.y - Q.y)) {
                            ak.stopDefaults();
                            if (!J) {
                                if (this.o.effect == "animation" && this.move_) {
                                    return
                                }
                                J = true;
                                U = false;
                                ae(ak)
                            } else {
                                ad(ak)
                            }
                        }
                    }
                }
                T = ak[H]
            }).jBind(this);
            if (!v.browser.ieMode || v.browser.ieMode && v.browser.ieMode > 9) {
                this.container.parentNode.jAddEvent("mousedrag touchdrag", this.onDrag)
            }
        },
        _initOnWheel: function() {
            var L;
            var M;
            var I = 0;
            var K = {
                x: 0,
                y: 0
            };
            var J = (this.p_.pos == "left") ? "x" : "y";
            var H = j(function(O) {
                var N = I * (O || 0.2);
                L = N > 0 ? "forward" : "backward";
                I -= N;
                if (Math.abs(N) < 0.00001) {
                    clearTimeout(this.moveTimer);
                    this.last = parseInt(this.container.childNodes[this._getGlobalIndex()].getAttribute("data-item"));
                    this.changeClones();
                    this.wheelDiff = this._getWheelDiff();
                    this.prevIndex = this.last;
                    I = 0;
                    this.distance = 0;
                    this.moveTimer = null;
                    this.wheel_ = false;
                    this.move_ = false;
                    this.jCallEvent("drag-end", {
                        arr: this.getVisibleIndexes(this.loop.lastItem)
                    });
                    G();
                    return
                }
                this.distance = Math.abs(N);
                "infinite" === this.o.loop && this._shiftContainer(L);
                this.containerPosition -= N;
                this.distance = 0;
                this.freeTouchPreload(L);
                if (!this.o.loop || "rewind" === this.o.loop) {
                    if (this.containerPosition > 0) {
                        this.containerPosition = 0;
                        I = 0.00001;
                        this.jCallEvent("first-frame")
                    } else {
                        if (this.containerPosition < this.containerWidth - this.allSize) {
                            this.containerPosition = this.containerWidth - this.allSize;
                            I = 0.00001;
                            this.jCallEvent("last-frame")
                        } else {
                            this.jCallEvent("enable")
                        }
                    }
                }
                K[J] = this.containerPosition;
                this.container.jSetCssProp(g, "translate3d(" + K.x + "px, " + K.y + "px, 0)");
                this.moveTimer = setTimeout(H.jBind(this, O), 30)
            }).jBind(this);
            if (v.browser.ieMode && v.browser.ieMode < 10 || this.stopScroll) {
                return
            }
            this.stopWhell = j(function() {
                if (this.wheel_) {
                    clearTimeout(this.moveTimer);
                    I = 0;
                    this.distance = 0;
                    this.moveTimer = null;
                    this.wheel_ = false;
                    this.move_ = false
                }
            }).jBind(this);
            var G = function() {
                if ((!this.o.loop || this.o.loop === "rewind") && this.o.effect === "scroll") {
                    if (this.containerPosition < 0) {
                        this.loop.firstItem = false
                    }
                    if (this.containerPosition > this.containerWidth - this.allSize) {
                        this.loop.lastItem = false
                    }
                }
            }.jBind(this);
            this.container.jAddEvent("mousescroll", j(function(N) {
                var O = (Math.abs(N.deltaY) < Math.abs(N.deltaX) ? N.deltaX : N.deltaY * (!N.isMouse ? -1 : -30));
                if (this.move_) {
                    return
                }
                if ((true === this.o.scrollOnWheel && N.isMouse) || "vertical" === this.o.orientation && Math.abs(N.deltaY) > Math.abs(N.deltaX) || "horizontal" === this.o.orientation && Math.abs(N.deltaY) < Math.abs(N.deltaX)) {
                    N.stop();
                    this.wheel_ = true;
                    if (0 === I) {
                        this.container.jSetCssProp("transition", g + " 0ms");
                        K = {
                            x: 0,
                            y: 0
                        };
                        J = (this.p_.pos == "left") ? "x" : "y"
                    }
                    this.jCallEvent("drag-start");
                    I += O;
                    if (!this.moveTimer) {
                        H(0.4)
                    }
                }
            }).jBind(this))
        },
        _getWheelDiff: function() {
            var G;
            var I = this.containerPosition;
            var J = j(["tempArray", "items", "itemsLastClones"]);
            this.tempArray = [];
            this.itemsFirstClones.jEach(j(function(K) {
                this.tempArray.push(K)
            }).jBind(this));
            this.tempArray.reverse();
            for (var H = 0; H < J.length; H++) {
                for (G = 0; G < this[J[H]].length; G++) {
                    I += this.items[this[J[H]][G].index].size[this.p_.size];
                    if (I > 0) {
                        this.last = this[J[H]][G].index;
                        this.tempArray = null;
                        if (I > 0 && I < 1) {
                            I = 0
                        }
                        return I
                    }
                }
            }
        },
        pause: function() {
            var G;
            var H;
            if (!this.o.continuous || this.continuousPause || !this.move_ || this.o.effect == "animation") {
                return
            }
            this.continuousPause = true;
            if (v.browser.ieMode && v.browser.ieMode < 10) {
                this.fx && (this.fx.options.onComplete = v.$F);
                this.fx && this.fx.stop();
                this.fx = null;
                this.containerPosition = Math.round(parseInt(this.container.jGetCss(this.p_.pos)))
            } else {
                this.containerPosition = this.getMatrixPosition(this.container)[(this.p_.pos == "left") ? "x" : "y"]
            }
            G = this.correctItemPosition(this.direction);
            H = this.o.duration / this.distance * G;
            if (this.direction == "forward") {
                this.containerPosition -= G
            } else {
                this.containerPosition += G
            }
            this._move(H)
        },
        stop: function() {
            this.stop_ = true;
            this.move_ = false;
            this.stopWhell && this.stopWhell();
            if (this.o.effect == "animation") {
                this.stopEffect()
            }
            if (v.browser.ieMode && v.browser.ieMode < 10) {
                this.fx && this.fx.stop(true);
                this.fx = null
            } else {
                this._cleansingStyles()
            }
        },
        stopEffect: function() {
            var G = {
                x: 0,
                y: 0
            };
            if (!v.browser.ieMode || v.browser.ieMode && v.browser.ieMode > 10) {
                G[this.p_.pos] = this.containerPosition;
                this.container.removeAttribute("data-forward");
                this.container.removeAttribute("data-backward");
                j([this.exitItems, this.enterItems]).jEach(j(function(H, I) {
                    if (H.length > 0) {
                        H.jEach(j(function(K, J) {
                            K.jRemoveEvent(w + "AnimationStart animationstart " + w + "AnimationEnd animationend");
                            K.removeAttribute("data-animation-nth");
                            K.removeAttribute("data-action");
                            if (!I) {
                                K.removeAttribute("data-exiting");
                                K.removeAttribute("data-exited")
                            } else {
                                K.removeAttribute("data-entering")
                            }
                        }).jBind(this))
                    }
                }).jBind(this));
                this.container.jSetCssProp(g, "translate3d(" + G.left + "px, " + G.top + "px, 0)");
                this.move_ = false;
                this._render()
            }
        },
        onResize: function() {
            var H;
            var J;
            this.stop();
            this.continuousPause = false;
            this.wrapperPosition = j(this.container.parentNode).jGetPosition();
            this.containerWidth = this._sWidth();
            this.itemsVisible = 0;
            this.allSize = 0;
            for (var G = 0; G < this.l; G++) {
                this.items[G].size = this.items[G].node.jGetSize(true);
                this.allSize += this.items[G].size[this.p_.size];
                if (this.allSize <= this.containerWidth) {
                    this.itemsVisible += 1
                }
            }
            if (v.browser.ieMode && v.browser.ieMode < 10) {
                this.last = 0
            } else {
                this.correctContainerPosition()
            }
            this.distance = 0;
            this.itemStep = this.o.step;
            if (this.allSize <= this.containerWidth) {
                this.stopScroll = true;
                this.jCallEvent("hideArrows");
                this.jCallEvent("disable");
                this.correctPosition = 0;
                this.containerPosition = 0;
                if (v.browser.ieMode && v.browser.ieMode < 10) {
                    this.container.jSetCssProp(this.p_.pos, 0)
                } else {
                    this.container.jSetCssProp(g, "translate3d(0px, 0px, 0)")
                }
                this._removeClones()
            } else {
                this.stopScroll = false;
                this.jCallEvent("showArrows");
                this.jCallEvent("enable");
                if (!this.o.loop || "rewind" === this.o.loop) {
                    if (this.loop.firstItem) {
                        this.jCallEvent("first-frame")
                    }
                    if (this.loop.lastItem) {
                        this.jCallEvent("last-frame")
                    }
                }
            }
            if ((this.allSize > this.containerWidth) && ("infinite" === this.o.loop || this.o.continuous)) {
                this._prepareClones()
            } else {
                var I = 0;
                this.fullViewedItems = I;
                for (var G = 0; G < this.l; G++) {
                    I += this.items[G].size[this.p_.size];
                    this.fullViewedItems++;
                    if (this.containerWidth <= I) {
                        break
                    }
                }
            }
            this._shiftContainer("forward");
            this.container.jRemoveEvent("transitionend");
            this.globalIndex = this._getGlobalIndex();
            this.globalLength = this.container.childNodes.length;
            this.setItemStep();
            this.changeClones();
            this.allNodes = v.$A(this.container.childNodes);
            this.o.lazyLoad ? this.preloadItem() : this.preloadAll()
        },
        correctContainerPosition: function() {
            if (this.items.length === 0) {
                return
            }
            var I;
            var K;
            var J = {
                left: 0,
                top: 0
            };
            var H = this.items[this.last].node.jGetPosition()[this.p_.pos];
            var G = this.container.parentNode.jGetPosition()[this.p_.pos];
            if (v.browser.ieMode && v.browser.ieMode < 10) {} else {
                if (!this.o.loop && this.loop.lastItem) {
                    if ("scroll" === this.o.effect) {
                        J[this.p_.pos] = this.containerWidth - this.allSize
                    } else {
                        K = this.itemsVisible - this.l % this.itemsVisible;
                        J[this.p_.pos] = this.containerWidth - (this.allSize + this.items[0].size[this.p_.size] * K)
                    }
                } else {
                    I = this.getMatrixPosition(this.container)["left" === this.p_.pos ? "x" : "y"];
                    J[this.p_.pos] = I - (H - G)
                }
                this.containerPosition = J[this.p_.pos];
                this.container.jSetCssProp(g, "translate3d(" + J.left + "px, " + J.top + "px, 0)")
            }
        },
        rightQueue: function(H) {
            var N = 0,
                M = true,
                I = this.l - 1,
                J = j(["itemsLastClones", "items", "itemsFirstClones"]),
                L = j(function(R, P) {
                    var O, Q = null;
                    for (O = 0; O < R.length; O++) {
                        if (R[O].index == P) {
                            Q = R[O].node;
                            break
                        }
                    }
                    return Q
                }).jBind(this),
                K = j(function(O) {
                    return (N == 0) ? O - 1 : (N - 1)
                }).jBind(this),
                G = j(function(R, P) {
                    var Q, O = R.length;
                    if (O > 0) {
                        for (Q = 0; Q < O; Q++) {
                            if (M) {
                                M = false;
                                N = O - 1;
                                this.container.appendChild(R[N].node)
                            } else {
                                this.container.insertBefore(L(R, !N ? I : K(O)), L(!N ? this[J[P - 1]] : R, N));
                                N = !N ? I : N - 1
                            }
                        }
                    }
                }).jBind(this);
            if (this.itemsLastClones.length || this.itemsFirstClones.length) {
                J.jEach(j(function(O, P) {
                    G(this[O], P);
                    N = 0
                }).jBind(this));
                if (!H) {
                    this.last = 0
                }
            }
        },
        _removeClones: function() {
            this.itemsFirstClones.jEach(function(G) {
                G.node.kill()
            });
            this.itemsFirstClones = j([]);
            this.itemsLastClones.jEach(function(G) {
                G.node.kill()
            });
            this.itemsLastClones = j([])
        },
        update: function(H) {
            if (this.fullscreenChanged) {
                this.fullscreenChanged = false;
                return
            }
            var G = {
                left: 0,
                top: 0
            };
            this.stop();
            if (H) {
                this.containerPosition = this.last = 0
            }
            if (v.browser.ieMode && v.browser.ieMode < 10) {
                this.container.jSetCss(G)
            } else {
                if (H) {
                    this.container.jSetCssProp(g, "translate3d(" + G.left + "px, " + G.top + "px, 0)")
                } else {
                    this.correctContainerPosition()
                }
            }
            this.itemStep = this.o.step;
            if ((!this.o.continuous && (!this.o.loop || "rewind" === this.o.loop)) && this.itemsFirstClones.length > 0) {
                this.correctPosition = 0;
                this._removeClones()
            }
            this.onResize();
            this.rightQueue(!H);
            if (H) {
                this.container.parentNode.jRemoveEvent("mousedrag touchdrag", this.onDrag);
                if (this.o.draggable) {
                    this.container.parentNode.jAddEvent("mousedrag touchdrag", this.onDrag)
                }
            }
            this.move_ = false
        },
        setNewOptions: function(G) {
            for (var H in G) {
                this.o[H] = G[H]
            }
            this._setProperties()
        },
        dispose: function() {
            this.stop();
            this._removeClones();
            j(window).jRemoveEvent("resize");
            j(document).jRemoveEvent("keydown");
            this.container.jRemoveEvent("touchdrag mousedrag");
            v.$A(this.container.querySelectorAll("iframe")).jEach(j(function(G) {
                G.jRemoveEvent("iframe")
            }).jBind(this));
            this.items.jEach(j(function(G) {
                G.node.jRemoveEvent("mouseover mouseout");
                if (G.figcaption) {
                    G.figcaption.jSetCss({
                        top: "",
                        opacity: ""
                    })
                }
                delete G.content.showThis
            }).jBind(this))
        }
    };
    v.extend(b.prototype, v.customEvents);
    v.Scroll.Effect = b;
    var z = function(G, H) {
        v.Scroll.Effect.apply(this, arguments);
        this._options = {
            radius: "auto",
            gradientBezier: j([0.44, 0.59, 0.35, 0.89]),
            startAlpha: 255,
            timingFunction: "cubic-bezier(.8, 0, .5, 1)"
        };
        this.name = "carousel";
        this.o = this._options;
        v.extend(this.o, H);
        this.distance = 70;
        this.lastAngle = 0;
        this.nextAngle = 0;
        this.moveTimer = null;
        this.fxk = Math.pow(10, 8);
        this.circle = 2 * Math.PI;
        this.last = 0;
        this.getVisibleItems = j([]);
        this.originSize = null;
        this.angle = null;
        this.endItem = null;
        this.radius = 0;
        this.l = 0;
        this.originFontSize = null
    };
    v.inherit(z, v.Scroll.Effect);
    v.extend(z.prototype, {
        constructor: z,
        _prepareClones: v.$F,
        changeClones: v.$F,
        _scroll: v.$F,
        pause: v.$F,
        resetZIndex: v.$F,
        performedOnClones: v.$F,
        cloneFigure: v.$F,
        preloadItem: v.$F,
        _getWheelDiff: v.$F,
        gradientBezier: v.extend({}, v.FX.prototype),
        _shiftContainer: function() {
            this.lastAngle %= this.circle;
            this.nextAngle = this.lastAngle
        },
        done: function(I) {
            var G;
            if (this.doneFlag.one) {
                return
            }
            this.doneFlag.one = true;
            G = this.l = this.items.length;
            this.containerWidth = this._sWidth();
            if (v.browser.ieMode && v.browser.ieMode < 10 && this.items[0].content.length && this.items[0].content.lastChild.tagName.toLowerCase() == "figcaption") {
                this.originFontSize = parseInt(this.items[0].content.lastChild.jGetCss("font-size"))
            }
            this.gradientBezier.cubicBezier = this.o.gradientBezier;
            for (var H = 0; H < this.l; H++) {
                this.items[H].size = this.items[H].node.jGetSize(true, true);
                this.allSize += this.items[H].size[this.p_.size];
                this.items[H].node.jSetCssProp("position", "absolute");
                this.items[H].img = this.getImg(this.items[H])
            }
            if ("infinite" === this.o.loop) {
                this.jCallEvent("enable")
            }
            this.items.jEach(j(function(J) {
                if (J.figcaption && !J.captionA) {
                    if (J.content.tagName.toLowerCase() != "figure") {
                        J.captionA = true
                    }
                }
            }).jBind(this));
            this.onResize();
            this.preloadAll()
        },
        done2: function(G) {
            this.doneFlag.two = true;
            this.itemEvent();
            this.angle = this.circle / this.l;
            this.endItem = (this.circle - this.angle) * (-1);
            this.itemStep = 1;
            this._initDragOnScroll();
            this.o.scrollOnWheel && this._initOnWheel();
            j(window).jAddEvent("resize", this.onResize.jBind(this));
            if (this.o.keyboard) {
                j(document).jAddEvent("keydown", this.keyboardCallback)
            }
            G && G();
            this.onResize()
        },
        afterAddItem: function(G, H) {
            this.itemEventByIndex(G);
            this.angle = this.circle / this.l;
            this.endItem = (this.circle - this.angle) * (-1);
            this.itemStep = 1;
            H && H();
            this.onResize()
        },
        removeItem: function(G) {
            var H = this.items[G];
            this.removeEventByIndex(G);
            this.removeByIndex(G);
            H.node.jRemove();
            this.onResize()
        },
        itemEvent: function() {
            z.$parent.itemEvent.apply(this);
            this.items.jEach(j(function(G) {
                G.node.jAddEvent("click", j(function(H) {
                    this.jCallEvent("item-click", {
                        index: G.index
                    })
                }).jBind(this))
            }).jBind(this))
        },
        itemEventByIndex: function(G) {
            z.$parent.itemEventByIndex.apply(this, [G]);
            var H = this.items[G];
            if (H) {
                this.items[G].node.jAddEvent("click", j(function(I) {
                    this.jCallEvent("item-click", {
                        index: H.index
                    })
                }).jBind(this))
            }
        },
        removeEventByIndex: function(G) {
            z.$parent.removeEventByIndex.apply(this, [G]);
            var H = this.items[G];
            if (H) {
                H.node.jRemoveEvent("click")
            }
        },
        showReflection: function(H) {
            var G = 1000;
            if (v.browser.ieMode && v.browser.ieMode < 10 || !H.canvas) {
                return
            }
            H.canvas.jSetOpacity(1);
            H.canvas.jSetCssProp("transition", "opacity " + G + "ms")
        },
        setCanvasPosition: function(I) {
            var G;
            var H;
            var J = j(function(K) {
                if (K.canvas || K.captionA) {
                    G = K.img.jGetSize(false, true);
                    H = K.img.offsetTop + G.height;
                    if (K.canvas) {
                        K.canvas.jSetCss({
                            top: H,
                            left: K.img.offsetLeft,
                            width: G.width
                        })
                    }
                    if (K.captionA && K.figcaption) {
                        K.figcaption.jSetCss({
                            top: H
                        })
                    }
                }
            }).jBind(this);
            I ? J(I) : this.items.jEach(j(function(K) {
                J(K)
            }).jBind(this))
        },
        getImg: function(I) {
            var G;
            var H = I.content;
            if (H.tagName == "IMG") {
                G = H
            } else {
                if (H.firstChild.tagName == "IMG") {
                    G = H.firstChild
                } else {
                    if (H.firstChild.tagName == "PICTURE" && j(H.firstChild).byTag("IMG")[0]) {
                        G = j(H.firstChild).byTag("IMG")[0]
                    } else {
                        if (H.firstChild.tagName == "FIGURE" && H.firstChild.firstChild.tagName == "IMG") {
                            G = H.firstChild.firstChild
                        } else {
                            G = null
                        }
                    }
                }
            }
            if (G) {
                j(G).jSetCssProp("z-index", 100)
            }
            return G
        },
        setReflection: function(T) {
            if (this.o.orientation == "vertical") {
                return
            }
            var I = v.$new("canvas", {}, {
                opacity: 0
            });
            var U = v.$new("canvas");
            var H;
            var G;
            var L;
            var R;
            var Q;
            var S;
            var V = 1;
            var O;
            var P;
            var M;
            var J;
            var K;
            if (v.browser.ieMode && v.browser.ieMode < 10) {
                return
            }
            if (I.getContext) {
                H = I.getContext("2d");
                G = U.getContext("2d");
                if (!T.img) {
                    return
                }
                Q = j(T.img).jGetSize(false, true);
                S = Q.height / 100 * 30;
                U.width = Q.width;
                U.height = Q.height;
                G.save();
                G.scale(1, -1);
                G.drawImage(T.img, 0, Q.height * (-1), Q.width, Q.height);
                L = G.getImageData(0, 0, Q.width, S);
                G.restore();
                I.width = Q.width;
                I.height = S;
                H.save();
                P = L.data;
                K = P.length;
                J = K / 4 / Q.width;
                M = this.o.startAlpha;
                O = K / J;
                for (var N = 3; N < K; N += 4) {
                    if (N > O) {
                        O += (K / J);
                        V++;
                        M = Math.round(this.o.startAlpha - this.o.startAlpha * this.gradientBezier.cubicBezierAtTime(1 / (J / V)))
                    }
                    P[N] = M
                }
                H.putImageData(L, 0, 0);
                H.restore();
                T.canvas = I;
                if ((!T.content.childNodes || T.content.childNodes.length < 2) && T.content.tagName.toLowerCase() !== "a") {
                    T.node.appendChild(I)
                } else {
                    T.content.insertBefore(I, T.content.childNodes[1])
                }
                I.jAddClass("mcs-reflection")
            }
        },
        showCaption: function(H) {
            var I = 0;
            var G = this.distance / (this.l / 2);
            var J = 100 - G;
            if (H > J) {
                I = (H - J) / G
            }
            return I
        },
        renderCarousel: function(N) {
            var K = {
                left: 0,
                top: 0
            };
            var I = {
                left: 0,
                top: 0
            };
            var U = {
                left: 0,
                top: 0
            };
            var O;
            var T;
            var S = this.l;
            var P = this.distance;
            var G = this.circle / S;
            var R;
            var J;
            var H;
            var M;
            var Q;
            K[this.p_.pos] = this.radius;
            v.defined(N) || (N = 0);
            this.lastAngle = N;
            for (var L = 0; L < S; L++) {
                J = H = L * G + N;
                H %= this.circle;
                J %= this.circle;
                if (H != 0 && H != Math.PI) {
                    if (Math.ceil(Math.abs(H) / Math.PI) % 2 == 0) {
                        if (Math.abs(H) % Math.PI != 0) {
                            J = Math.PI - (Math.abs(H) % Math.PI)
                        }
                    } else {
                        J = Math.abs(H)
                    }
                }
                J = Math.abs(J * 100 / Math.PI);
                if (this.items[L].figcaption) {
                    this.items[L].figcaption.jSetOpacity(this.showCaption(100 - (J * P / 100)))
                }
                J = 100 - Math.round(J * P / 100);
                !this.originSize && (this.originSize = this.items[L].size);
                O = Math.abs(H);
                if (O > Math.PI / 2 && O < Math.PI + Math.PI / 2) {
                    if (O > Math.PI) {
                        O = Math.PI / 2 - Math.abs(O - Math.PI)
                    } else {
                        O = O - Math.PI / 2
                    }
                    O = (1 - Math.sin(O)) * 0.7
                } else {
                    O = 1
                }
                if (v.browser.ieMode && v.browser.ieMode < 10) {
                    M = {
                        width: this.setItemSide("width", J),
                        height: this.setItemSide("height", J)
                    };
                    this.items[L].node.jSetCss(M);
                    this.items[L].node.jSetCss({
                        top: Math.sin(H) * K.top + parseInt(this.containerSize.height) / 2 - parseInt(M.height) / 2,
                        left: Math.sin(H) * K.left + parseInt(this.containerSize.width) / 2 - parseInt(M.width) / 2
                    });
                    if (this.items[L].content.length && this.items[L].content.lastChild.tagName.toLowerCase() == "figcaption") {
                        this.items[L].content.lastChild.style.fontSize = this.setFontSize(J / 100 * J)
                    }
                    if (this.items[L].captionA) {
                        R = this.items[L].img.jGetSize(false, true);
                        this.items[L].figcaption.jSetCss({
                            top: this.items[L].img.offsetTop + R.height
                        })
                    }
                } else {
                    U[this.p_.pos] = 360 / this.circle * H;
                    this.o.orientation == "vertical" && (U[this.p_.pos] *= (-1));
                    Q = Math.abs(H);
                    T = Math.sqrt(1 - Math.sin(Q) * Math.sin(Q));
                    if (Q > Math.PI / 2 && Q < Math.PI + Math.PI / 2) {
                        Q = this.radius * (T) + this.radius
                    } else {
                        Q = this.radius * (1 - T)
                    }
                    Q > 0 && (Q *= (-1));
                    I[this.p_.pos] = (Math.sin(H) * K[this.p_.pos] + parseInt(this.containerSize[this.p_.size]) / 2 - this.items[L].size[this.p_.size] / 2);
                    this.items[L].node.jSetCssProp(g, "translateX(" + I.left + "px)translateY(" + I.top + "px)translateZ(" + Q + "px)rotateX(" + U.top + "deg)rotateY(" + U.left + "deg)")
                }
                this.items[L].node.jSetCssProp("z-index", 0 + J);
                this.items[L].node.jSetOpacity(O)
            }
        },
        round: function(G, H) {
            var I = Math.pow(10, H || 15);
            return Math.round(G * I) / I
        },
        _calcDistance: function(J) {
            var H;
            var I;
            var G = 360 / this.l;
            if (J.defaultMove) {
                if (J.goTo) {
                    if (J.direction == "forward" && this.last > J.target) {
                        H = this.l - this.last;
                        H += J.target
                    } else {
                        if (J.direction == "backward" && this.last < J.target) {
                            H = this.l - J.target;
                            H += this.last
                        }
                    }!H && (H = Math.abs(this.last - J.target));
                    this.last = J.target
                } else {
                    H = this.itemStep;
                    this.last = this._getItemIndex(J.direction == "forward" ? this.last + H : this.last - H)
                }
            } else {
                I = (360 - this.last * G + J.target * G) % 360;
                if (I >= 0 && I <= 180) {
                    !J.direction && (J.direction = "forward")
                } else {
                    if (I >= 180 && I <= 360) {
                        !J.direction && (J.direction = "backward")
                    }
                }
                if (J.direction == "forward") {
                    H = Math.round(I / G)
                } else {
                    H = Math.round((360 - I) / G)
                }
                this.last = J.target
            }
            return v.extend(J, {
                angle: H * this.angle
            })
        },
        _carousel: function(H) {
            var G;
            H = this._calcDistance(H);
            G = H.angle;
            if (!this.o.loop) {
                this.jCallEvent("enable")
            }
            if (H.direction == "forward") {
                this.nextAngle -= G;
                if (!this.o.loop) {
                    if (this.nextAngle == this.endItem) {
                        this.jCallEvent("last-frame")
                    } else {
                        if (this.nextAngle < this.endItem) {
                            this.last = 0;
                            this.nextAngle = 0;
                            this.jCallEvent("first-frame")
                        }
                    }
                }
            } else {
                this.nextAngle += G;
                if (!this.o.loop) {
                    if (this.nextAngle == 0) {
                        this.jCallEvent("first-frame")
                    } else {
                        if (this.nextAngle > 0) {
                            this.last = this.l - 1;
                            this.nextAngle = this.endItem;
                            this.jCallEvent("last-frame")
                        }
                    }
                }
            }
            this.jCallEvent("on-start-effect", {
                arr: [this.last]
            });
            this.callback = H.callback;
            this._move(this.nextAngle)
        },
        setItemSide: function(G, H) {
            return this.originSize[G] / 100 * H
        },
        setFontSize: function(G) {
            return Math.round(this.originFontSize / 100 * G) + "px"
        },
        _move: function(G) {
            this.fx = new v.FX(this.container, {
                duration: this.o.duration,
                transition: this.o.timingFunction,
                onBeforeRender: (function(H) {
                    this.renderCarousel(H.angle / this.fxk)
                }).jBind(this),
                onComplete: j(function() {
                    this._onComplete()
                }).jBind(this)
            }).start({
                angle: [this.fxk * this.lastAngle, this.fxk * G]
            })
        },
        _onComplete: function() {
            this._shiftContainer();
            z.$parent._onComplete.apply(this)
        },
        _move2: function(H) {
            var G = Math.abs(this.nextAngle - this.lastAngle) * (H || 0.2);
            if (Math.abs(G) < 0.00001) {
                clearTimeout(this.moveTimer);
                this.moveTimer = null;
                this.move_ = false;
                this.jCallEvent("drag-end", {
                    arr: [this.last]
                });
                return
            }
            if (this.nextAngle < this.lastAngle) {
                G *= (-1)
            }
            this.renderCarousel(this.lastAngle + G);
            this.moveTimer = setTimeout(this._move2.jBind(this, H), 30)
        },
        searchIndex: function() {
            var J = this.nextAngle % this.circle;
            var I = parseInt(Math.abs(this.nextAngle / this.circle));
            var L;
            var K;
            var G = j(function(M) {
                while (I != 0) {
                    I--;
                    if (J <= 0) {
                        M -= this.circle
                    } else {
                        M += this.circle
                    }
                }
                return M
            }).jBind(this);
            for (var H = 0; H < this.l; H++) {
                L = (H * this.circle) / this.l;
                K = ((H + 1) * this.circle) / this.l;
                if (J <= 0) {
                    L *= (-1);
                    K *= (-1)
                } else {
                    L = this.circle - L;
                    K = this.circle - K
                }
                if (L != J) {
                    if (L > J && J > K) {
                        if (Math.abs(J - L) <= Math.abs(K - J)) {
                            this.nextAngle = G(L);
                            this.last = H
                        } else {
                            this.nextAngle = G(K);
                            this.last = this._getItemIndex(H + 1)
                        }
                    }
                } else {
                    this.last = H
                }
            }
        },
        _initOnWheel: function() {
            var I;
            var H;
            var G = this.circle / 360 * 15;
            this.container.jAddEvent("mousescroll", j(function(J) {
                if (true === this.o.scrollOnWheel || J.isMouse || "vertical" === this.o.orientation && Math.abs(J.deltaY) > Math.abs(J.deltaX) || "horizontal" === this.o.orientation && Math.abs(J.deltaY) < Math.abs(J.deltaX)) {
                    this.jCallEvent("drag-start");
                    this.fx && this.fx.stop(true);
                    this.fx = null;
                    J.stop();
                    if (v.browser.ieMode && v.browser.ieMode < 10) {
                        J.isMouse = true
                    }
                    H = Math.abs(J.deltaY) < Math.abs(J.deltaX) ? J.deltaX : -1 * J.deltaY;
                    H = J.isMouse ? (H * G) : (H * (8 / 864));
                    !J.isMouse && (H = H > 0 ? Math.min(this.angle / 4, H) : Math.max(this.angle / 4 * (-1), H));
                    this.nextAngle -= H;
                    clearTimeout(I);
                    I = setTimeout(j(function() {
                        this.searchIndex()
                    }).jBind(this), 100);
                    if (!this.o.loop) {
                        if (this.nextAngle >= 0) {
                            this.jCallEvent("first-frame");
                            this.nextAngle = 0;
                            this.last = 0
                        } else {
                            if (this.nextAngle <= this.endItem) {
                                this.jCallEvent("last-frame");
                                this.nextAngle = this.endItem;
                                this.last = this.l - 1
                            }
                        }
                    }
                    if (!this.moveTimer) {
                        this._move2(0.08)
                    }
                }
            }).jBind(this))
        },
        _initDragOnScroll: function() {
            var L = (this.p_.pos == "left") ? "x" : "y";
            var N = {
                x: 0,
                y: 0
            };
            var M = {
                x: 0,
                y: 0
            };
            var K;
            var H = false;
            var J = "forward";
            var G = false;
            var I = j(function(O) {
                if ("dragstart" == O.state) {
                    j(document.body).jAddClass("mcs-dragging");
                    G = true;
                    N.x = M.x = O.x;
                    N.y = M.y = O.y
                } else {
                    if (G) {
                        N.x = O.x;
                        N.y = O.y;
                        if ("dragend" == O.state) {
                            j(document.body).jRemoveClass("mcs-dragging");
                            G = false;
                            if (H) {
                                H = false;
                                this.searchIndex()
                            }
                        } else {
                            if (this.o.orientation == "vertical" || Math.abs(O.x - M.x) > Math.abs(O.y - M.y)) {
                                O.stopDefaults();
                                if (!H) {
                                    H = true;
                                    this.move_ = true;
                                    this.fx && this.fx.stop();
                                    this.jCallEvent("drag-start");
                                    clearTimeout(this.moveTimer);
                                    this.moveTimer = null
                                }
                                J = M[L] < N[L] ? "backward" : "forward";
                                K = Math.abs(M[L] - N[L]) / this.radius;
                                if (J == "forward") {
                                    this.nextAngle -= K;
                                    if (!this.o.loop) {
                                        if (this.nextAngle <= this.endItem) {
                                            this.jCallEvent("last-frame");
                                            this.nextAngle = this.endItem;
                                            this.last = this.l - 1
                                        }
                                    }
                                } else {
                                    this.nextAngle += K;
                                    if (!this.o.loop) {
                                        if (this.nextAngle >= 0) {
                                            this.jCallEvent("first-frame");
                                            this.nextAngle = 0;
                                            this.last = 0
                                        }
                                    }
                                }!this.moveTimer && this._move2()
                            }
                            M.x = N.x;
                            M.y = N.y
                        }
                    }
                }
            }).jBind(this);
            this.container.jAddEvent("touchdrag mousedrag", I)
        },
        stop: function() {
            this.fx && this.fx.stop(true);
            this.fx = null;
            clearTimeout(this.moveTimer);
            this.moveTimer = null;
            this.nextAngle && this.renderCarousel(this.nextAngle)
        },
        onResize: function() {
            var I;
            var H;
            var J;
            this.stop();
            this.containerWidth = this._sWidth();
            this.containerSize = this.container.parentNode.jGetSize(false, true);
            this.allSize = 0;
            for (var G = 0; G < this.l; G++) {
                this.items[G].size = this.items[G].node.jGetSize(true, true);
                this.allSize += this.items[G].size[this.p_.size]
            }
            this.angle = 1 * this.circle / this.l;
            this.endItem = (this.circle - this.angle) * (-1);
            I = this.allSize / this.circle;
            this.radius = this.containerSize[this.p_.size] / 2;
            (this.radius < I) && (this.radius = I);
            (v.browser.ieMode && v.browser.ieMode < 10) && (this.radius -= (this.items[0].size[this.p_.size] / 2));
            this.lastAngle = this.nextAngle = 0;
            this.renderCarousel();
            this.setCanvasPosition();
            H = this.last;
            this.last = 0;
            J = this._calcDistance({
                target: H
            });
            if ("forward" === J.direction) {
                this.nextAngle -= J.angle
            } else {
                this.nextAngle += J.angle
            }
            this.renderCarousel(this.nextAngle)
        },
        update: function(G) {
            this.stop();
            this.last = 0;
            if (this.o.orientation == "vertical") {
                this.removeCanvas()
            } else {
                this.items.jEach(j(function(H) {
                    if (!H.canvas) {
                        this.setReflection(H)
                    }
                }).jBind(this))
            }
            this.container.jRemoveEvent("touchdrag mousedrag mousescroll");
            this._initDragOnScroll();
            this.o.scrollOnWheel && this._initOnWheel();
            this.resetZIndex();
            this._setProperties();
            this.onResize();
            if (this.o.orientation == "horizontal") {
                this.items.jEach(j(function(H) {
                    this.showReflection(H)
                }).jBind(this))
            }
            this.move_ = false
        },
        removeCanvas: function() {
            this.items.jEach(j(function(G) {
                if (G.canvas) {
                    G.canvas.jRemove();
                    delete G.canvas
                }
            }).jBind(this))
        },
        dispose: function() {
            z.$parent.dispose.apply(this);
            this.container.jRemoveEvent("mousescroll");
            this.removeCanvas();
            this.items.jEach(j(function(G) {
                G.node.jRemoveEvent("click")
            }).jBind(this))
        }
    });
    v.extend(z.prototype, v.customEvents);
    v.Scroll.Carousel = z;
    var d = function(G, H) {
        v.Scroll.Carousel.apply(this, arguments);
        this.name = "coverFlow";
        this.center = null;
        this.distance = null;
        this.moiety = null;
        this.lastPosition = null;
        this.nextPosition = null;
        this.depth = 350;
        this.itemStep = 1;
        this.moveTimer = null;
        this.firstSide = null;
        this.lastSide = null;
        this.stepDistance = null;
        this.lastItemLoad = 0
    };
    v.inherit(d, v.Scroll.Carousel);
    v.extend(d.prototype, {
        constructor: d,
        _shiftContainer: v.$F,
        _carousel: v.$F,
        showCaption: v.$F,
        setItemsPosition: function() {
            var I;
            var H;
            this.stepDistance = this.moiety;
            if (this.o.orientation == "vertical") {
                H = this.moiety + this.moiety * 0.8;
                this.stepDistance /= 2
            } else {
                H = this.moiety * 2
            }
            for (var G = 0; G < this.l; G++) {
                I = (G == 1) ? H : this.stepDistance;
                this.items[G].position = !G ? (this.center - this.moiety) : (this.items[G - 1].position + I)
            }
        },
        zIndex: function(G) {
            if (this.o.orientation == "horizontal") {
                return Math.round(this.allSize - Math.abs(this.center - (G.position + this.moiety)))
            }
        },
        done: function(I) {
            var G;
            if (this.doneFlag.one) {
                return
            }
            this.doneFlag.one = true;
            G = this.l = this.items.length;
            this.containerWidth = this._sWidth();
            this.gradientBezier.cubicBezier = this.o.gradientBezier;
            for (var H = 0; H < this.l; H++) {
                this.items[H].size = this.items[H].node.jGetSize(true, true);
                this.allSize += this.items[H].size[this.p_.size];
                this.items[H].node.jSetCssProp("position", "absolute");
                this.items[H].img = this.getImg(this.items[H]);
                this.items[H].figcaption && j(this.items[H].figcaption).jSetOpacity(0)
            }
            this.o.loop = false;
            this.items.jEach(j(function(J) {
                if (J.figcaption && !J.captionA) {
                    if (J.content.tagName.toLowerCase() != "figure") {
                        J.captionA = true
                    }
                }
            }).jBind(this));
            this.onResize();
            !this.o.lazyLoad && this.preloadAll()
        },
        done2: function(G) {
            this.doneFlag.two = true;
            this.itemEvent();
            this.itemStep = 1;
            this._initDragOnScroll();
            this.o.scrollOnWheel && this._initOnWheel();
            j(window).jAddEvent("resize", this.onResize.jBind(this));
            if (this.o.keyboard) {
                j(document).jAddEvent("keydown", this.keyboardCallback)
            }
            G && G();
            this.onResize()
        },
        afterAddItem: function(G, H) {
            this.itemEventByIndex(G);
            this.itemStep = 1;
            H && H();
            this.onResize()
        },
        zoom: function(O) {
            var M;
            var H;
            var N;
            var L;
            var I = 1;
            var G;
            var J = O.position + this.moiety;
            var K = O.position + this.moiety <= this.center;
            L = K ? (this.center - J) : (J - this.center);
            L /= ((K ? (this.center - this.firstSide) : (this.lastSide - this.center)) / 100);
            H = (90 / 100 * L) * (Math.PI / 180);
            M = 60 * Math.sin(H);
            G = 1 - 1 * Math.sin(H);
            if (this.o.orientation == "horizontal") {
                !K && (M *= (-1))
            } else {
                M *= (-1);
                K && (I = 1 - 0.7 * Math.sin(H))
            }
            N = this.depth * Math.sin(H) * (-1);
            return {
                rotate: M,
                translateZ: N,
                opacity: I,
                captionOpasity: G
            }
        },
        calcItemPosition: function(K, M) {
            var I;
            var H = false;
            var L = false;
            var G = K.position + this.moiety;
            var N;
            var J = {
                rotate: 60,
                translateZ: this.depth * (-1),
                opacity: 1
            };
            N = G - M;
            if (G >= this.lastSide) {
                if (G - M < this.lastSide) {
                    I = G - this.lastSide;
                    L = true;
                    M -= I;
                    if (M <= this.moiety) {
                        M = (this.lastSide - this.center) / this.stepDistance * M
                    } else {
                        if (M <= this.moiety * 2) {
                            M = (this.lastSide - this.firstSide) / (this.stepDistance * 2) * M
                        } else {
                            M += (this.moiety * 2);
                            L = false
                        }
                    }
                    K.position -= I
                }
                H = true;
                K.position -= M
            } else {
                if (G <= this.firstSide) {
                    if (this.o.orientation == "vertical") {
                        M = (this.lastSide - this.center) / this.stepDistance * M
                    } else {
                        if (G - M > this.firstSide) {
                            L = true;
                            I = this.firstSide - G;
                            M += I;
                            if (M >= this.moiety * (-1)) {
                                M = (this.lastSide - this.center) / this.stepDistance * M
                            } else {
                                if (M >= this.moiety * 2 * (-1)) {
                                    M = (this.lastSide - this.firstSide) / (this.stepDistance * 2) * M
                                } else {
                                    M -= (this.moiety * 2)
                                }
                            }
                            K.position += I
                        }
                    }
                    H = true;
                    K.position -= M
                } else {
                    if (G > this.firstSide && G < this.lastSide) {
                        M = (this.lastSide - this.center) / this.stepDistance * M;
                        if (G - M >= this.lastSide) {
                            I = this.lastSide - G;
                            M += I;
                            M = this.stepDistance / ((this.lastSide - this.center) / M);
                            K.position += I
                        } else {
                            if (G - M <= this.firstSide) {
                                if (this.o.orientation == "horizontal") {
                                    I = G - this.firstSide;
                                    M -= I;
                                    M = this.stepDistance / ((this.lastSide - this.center) / M);
                                    K.position -= I
                                }
                            } else {
                                L = true
                            }
                        }
                        K.position -= M
                    }
                }
            }
            if (this.o.orientation == "horizontal") {
                K.position > this.center && (J.rotate *= (-1))
            } else {
                J.rotate = 60 * (-1);
                K.position < this.center && (J.opacity = 0.3)
            }
            L && (J = this.zoom(K));
            H && (J.captionOpasity = 0);
            if (this.o.lazyLoad) {
                if (this.containerWidth > N - this.moiety && "notLoaded" === K.load) {
                    this.lastItemLoad = K.index;
                    K.load = "load";
                    if (this.o.stopDownload) {
                        this.jCallEvent("showProgress")
                    } else {
                        K.progress && K.progress.show()
                    }
                    this.queue.push({
                        node: K.content,
                        index: K.index
                    })
                }
            }
            return J
        },
        onLazyLoad: function(G) {
            if (this.lastItemLoad === G - 1) {
                if (this.o.stopDownload || !this.doneFlag.two) {
                    this.jCallEvent("hideProgress")
                }
                if (!this.doneFlag.two) {
                    this.jCallEvent("complete")
                }
            }
        },
        renderCarousel: function(J) {
            var I;
            var L;
            var G;
            var K = this.lastPosition - J;
            J || (J = 0);
            this.lastPosition = J;
            for (var H = 0; H < this.l; H++) {
                L = {
                    left: 0,
                    top: 0
                };
                G = {
                    left: 0,
                    top: 0
                };
                I = this.calcItemPosition(this.items[H], K);
                L[this.p_.pos] = this.items[H].position;
                G[this.p_.pos] = I.rotate;
                this.items[H].node.jSetCssProp(g, "translate3d(" + L.left + "px, " + L.top + "px, " + I.translateZ + "px)rotateX(" + G.top + "deg)rotateY(" + G.left + "deg)");
                this.items[H].figcaption && this.items[H].figcaption.jSetOpacity(I.captionOpasity);
                if (this.o.orientation == "horizontal") {
                    this.items[H].node.jSetCssProp("z-index", this.zIndex(this.items[H]))
                } else {
                    this.items[H].node.jSetOpacity(I.opacity)
                }
            }
        },
        _calcDistance: function(H) {
            var G = this.itemStep;
            if (H.defaultMove) {
                H.goTo && (G = H.goTo);
                if (H.direction == "forward") {
                    this.loop.firstItem = false;
                    if (this.last + G > this.l - 1) {
                        if (this.last != this.l - 1) {
                            G = this.l - 1 - this.last;
                            this.last += G;
                            this.loop.lastItem = true
                        } else {
                            this.last = 0;
                            G = this.l - 1;
                            this.loop.firstItem = true;
                            this.loop.lastItem = false;
                            H.direction = "backward"
                        }
                    } else {
                        this.last += G;
                        if (this.last === this.l - 1) {
                            this.loop.lastItem = true
                        }
                    }
                } else {
                    this.loop.lastItem = false;
                    if (this.last - G < 0) {
                        if (this.last != 0) {
                            G = this.last;
                            this.last -= G;
                            this.loop.firstItem = true
                        } else {
                            this.last = this.l - 1;
                            G = this.l - 1;
                            this.loop.firstItem = false;
                            this.loop.lastItem = true;
                            H.direction = "forward"
                        }
                    } else {
                        this.last -= G;
                        if (this.last === 0) {
                            this.loop.firstItem = true
                        }
                    }
                }
            } else {
                !H.direction && (H.direction = H.target >= this.last ? "forward" : "backward");
                G = Math.abs(this.last - H.target);
                this.last = H.target
            }
            this.distance = this.stepDistance * G;
            return H.direction
        },
        _coverFlow: function(G) {
            G.direction = this._calcDistance(G);
            this.callback = G.callback;
            this.jCallEvent("on-start-effect", {
                arr: [this.last]
            });
            this._move(G.direction == "forward" ? this.lastPosition - this.distance : this.lastPosition + this.distance)
        },
        _move: function(G) {
            this.nextPosition = G;
            this.fx = new v.FX(this.container, {
                duration: 500,
                transition: this.o.timingFunction,
                onBeforeRender: (function(H) {
                    this.renderCarousel(H.pos)
                }).jBind(this),
                onComplete: j(function() {
                    this._onComplete()
                }).jBind(this)
            }).start({
                pos: [this.lastPosition, G]
            })
        },
        _move2: function(H) {
            var G = Math.abs(this.nextPosition - this.lastPosition) * (H || 0.2);
            if (Math.abs(G) < 0.01) {
                clearTimeout(this.moveTimer);
                this.moveTimer = null;
                this.move_ = false;
                this.jCallEvent("drag-end", {
                    arr: [this.last]
                });
                return
            }
            if (this.nextPosition < this.lastPosition) {
                G *= (-1)
            }
            this.renderCarousel(this.lastPosition + G);
            this.moveTimer = setTimeout(this._move2.jBind(this, H), 30)
        },
        checkPosition: function(K, L) {
            var I;
            var H = K.position + this.moiety;
            var G = K.position;
            var J = j(function(M) {
                if (H > this.firstSide && H < this.lastSide || M) {
                    L = (this.lastSide - this.center) / this.stepDistance * L;
                    if (H - L >= this.lastSide) {
                        I = this.lastSide - H;
                        L += I;
                        L = this.stepDistance / ((this.lastSide - this.center) / L);
                        G += I
                    } else {
                        if (H - L <= this.firstSide) {
                            if (this.o.orientation == "horizontal") {
                                I = H - this.firstSide;
                                L -= I;
                                L = this.stepDistance / ((this.lastSide - this.center) / L);
                                G -= I
                            }
                        }
                    }
                    G -= L
                }
            }).jBind(this);
            if (H >= this.lastSide) {
                if (H - L < this.lastSide) {
                    I = H - this.lastSide;
                    L -= I;
                    G -= I;
                    J(true)
                } else {
                    G -= L
                }
            } else {
                if (H <= this.firstSide) {
                    if (this.o.orientation == "vertical") {
                        L = (this.lastSide - this.center) / this.stepDistance * L
                    }
                    if (H - L > this.firstSide) {
                        I = this.firstSide - H;
                        L += I;
                        G += I;
                        J(true)
                    } else {
                        G -= L
                    }
                } else {
                    J()
                }
            }
            return G
        },
        searchIndex: function() {
            var H;
            var G;
            var J = this.lastPosition - this.nextPosition;
            if (this.o.orientation == "vertical") {
                J *= 2
            }
            for (var I = 0; I < this.l; I++) {
                H = !H ? this.checkPosition(this.items[I], J) : G;
                G = (I + 1 < this.l) ? this.checkPosition(this.items[I + 1], J) : null;
                if (H + this.moiety > this.firstSide || I == this.l - 1) {
                    if (G && G + this.moiety >= this.lastSide || !G) {
                        G = 100000000
                    }
                    if (this.center - (H + this.moiety) < (G + this.moiety) - this.center) {
                        this.last = I
                    } else {
                        this.last = I + 1
                    }
                    if (this.last === 0) {
                        this.loop.firstItem = true
                    } else {
                        if (this.last === this.l - 1) {
                            this.loop.lastItem = true
                        }
                    }
                    this.nextPosition = this.center - this.last * this.stepDistance;
                    break
                }
            }
        },
        _initOnWheel: function() {
            var H;
            var G;
            this.container.jAddEvent("mousescroll", j(function(I) {
                if (true === this.o.scrollOnWheel || I.isMouse || "vertical" === this.o.orientation && Math.abs(I.deltaY) > Math.abs(I.deltaX) || "horizontal" === this.o.orientation && Math.abs(I.deltaY) < Math.abs(I.deltaX)) {
                    this.jCallEvent("drag-start");
                    this.fx && this.fx.stop();
                    this.fx = null;
                    I.stop();
                    G = Math.abs(I.deltaY) < Math.abs(I.deltaX) ? I.deltaX : -1 * I.deltaY;
                    G = I.isMouse ? (G * this.stepDistance) : (G * (8 / 13));
                    !I.isMouse && (G = G > 0 ? Math.min(this.stepDistance / 4, G) : Math.max(this.stepDistance / 4 * (-1), G));
                    this.nextPosition -= G;
                    clearTimeout(H);
                    H = setTimeout(j(function() {
                        this.searchIndex()
                    }).jBind(this), 100);
                    if (this.nextPosition >= this.center) {
                        this.nextPosition = this.center;
                        this.last = 0
                    } else {
                        if (this.nextPosition <= this.center - ((this.l - 1) * this.stepDistance)) {
                            this.nextPosition = this.center - ((this.l - 1) * this.stepDistance);
                            this.last = this.l - 1
                        }
                    }
                    if (!this.moveTimer) {
                        this._move2(0.08)
                    }
                }
            }).jBind(this))
        },
        _initDragOnScroll: function() {
            var J = (this.p_.pos == "left") ? "x" : "y";
            var L = {
                x: 0,
                y: 0
            };
            var K = {
                x: 0,
                y: 0
            };
            var H = false;
            var G = false;
            var I = j(function(M) {
                if ("dragstart" == M.state) {
                    j(document.body).jAddClass("mcs-dragging");
                    G = true;
                    L.x = K.x = M.x;
                    L.y = K.y = M.y;
                    this.loop.firstItem = false;
                    this.loop.lastItem = false
                } else {
                    if (G) {
                        L.x = M.x;
                        L.y = M.y;
                        if ("dragend" == M.state) {
                            j(document.body).jRemoveClass("mcs-dragging");
                            G = false;
                            if (H) {
                                this.searchIndex();
                                H = false
                            }
                        } else {
                            if (this.o.orientation == "vertical" || Math.abs(M.x - K.x) > Math.abs(M.y - K.y)) {
                                M.stopDefaults();
                                if (!H) {
                                    this.fx && this.fx.stop();
                                    this.jCallEvent("drag-start");
                                    clearTimeout(this.moveTimer);
                                    this.move_ = true;
                                    this.moveTimer = null;
                                    H = true
                                }
                                this.nextPosition -= (K[J] - L[J]);
                                !this.moveTimer && this._move2()
                            } else {
                                this.move_ = false
                            }
                            K.x = L.x;
                            K.y = L.y
                        }
                    }
                }
            }).jBind(this);
            this.container.jAddEvent("touchdrag mousedrag", I)
        },
        stop: function() {
            this.fx && this.fx.stop(true);
            this.fx = null;
            clearTimeout(this.moveTimer);
            this.moveTimer = null;
            this.nextPosition && this.renderCarousel(this.nextPosition)
        },
        onResize: function() {
            var H;
            var J;
            var I;
            this.stop();
            this.distance = 0;
            this.containerWidth = this._sWidth();
            this.allSize = 0;
            for (var G = 0; G < this.l; G++) {
                this.items[G].size = this.items[G].node.jGetSize(true, true);
                this.allSize += this.items[G].size[this.p_.size]
            }
            if (this.items.length > 0) {
                this.moiety = this.items[0].size[this.p_.size] / 2
            }
            if (this.o.orientation == "horizontal") {
                this.center = this.containerWidth / 2
            } else {
                this.center = this.moiety + (this.moiety / 50 * 15)
            }
            this.lastPosition = this.nextPosition = this.center;
            if (this.o.orientation == "horizontal") {
                this.firstSide = this.center - (this.moiety * 2);
                this.lastSide = this.center + (this.moiety * 2)
            } else {
                this.firstSide = 0;
                this.lastSide = this.center + this.moiety + this.moiety * 0.8
            }
            this.setItemsPosition();
            this.renderCarousel(this.lastPosition);
            this.setCanvasPosition();
            H = this.last;
            this.last = 0;
            J = this._calcDistance({
                target: H
            });
            I = J == "forward" ? this.lastPosition - this.distance : this.lastPosition + this.distance;
            this.nextPosition = I;
            this.renderCarousel(I)
        },
        resetZIndex: function() {
            this.items.jEach(j(function(G) {
                if (this.o.orientation == "horizontal") {
                    G.node.style.opacity = ""
                } else {
                    G.node.jSetCssProp("z-index", "")
                }
            }).jBind(this))
        }
    });
    v.extend(d.prototype, v.customEvents);
    v.Scroll.CoverFlow = d;

    function s(I, L, K, J) {
        var H = {
                width: K.width,
                height: K.height
            },
            G = function(M) {
                return M !== "auto" && !(/%$/.test(M))
            };
        if (J === "horizontal") {
            if (G(L)) {
                L = parseInt(L, 10);
                if (L < H.height) {
                    H.height = L;
                    H.width = K.width / K.height * H.height
                }
            }
        } else {
            if (G(I)) {
                I = parseInt(I, 10);
                if (I < H.width) {
                    H.width = parseInt(I, 10);
                    H.height = K.height / K.width * H.width
                }
            }
        }
        return H
    }
    var C = function(J, T) {
        var N, L, H, P, S, K, O, Q, M = 0,
            G, I, R = "Cannot calculate scroll size.";
        this.options = new v.Options(m);
        this.o = this.options.get.jBind(this.options);
        this.set = this.options.set.jBind(this.options);
        this.options.fromJSON(window.MagicScrollOptions || {});
        this.options.fromJSON((window.MagicScrollExtraOptions || {})[J.getAttribute("id") || ""] || {});
        this.options.fromString(J.getAttribute("data-options") || "");
        if (v.browser.mobile) {
            this.options.fromJSON(window.MagicScrollMobileOptions || {});
            this.options.fromJSON((window.MagicScrollMobileExtraOptions || {})[J.getAttribute("id") || ""] || {});
            this.options.fromString(J.getAttribute("data-mobile-options") || "")
        }
        if ("string" == v.jTypeOf(T)) {
            this.options.fromString(T || "")
        } else {
            this.options.fromJSON(T || {})
        }
        if (!this.o("autostart")) {
            return false
        }
        this.original = j(J).jStore("scroll", this);
        v.$uuid(this);
        this.scrollReady = false;
        if (v.browser.ieMode) {
            v.$A(J.getElementsByTagName("a")).jEach(function(U) {
                U.href = U.href
            });
            v.$A(J.getElementsByTagName("img")).jEach(function(U) {
                U.src = U.src
            })
        }
        this.originalClasses = j(J).getAttribute("class") || j(J).getAttribute("className");
        this.originalNodes = [];
        this._insideOptions = {
            autoplay: this.o("autoplay"),
            pause: true,
            debug: false,
            progress: true,
            continuous: false,
            maxSize: "scroll",
            stopDownload: true,
            timingFunctionDefault: "cubic-bezier(.8, 0, .5, 1)",
            itemSettings: "auto"
        };
        this.id = J.getAttribute("id") || "MagicScroll-" + Math.floor(Math.random() * v.now());
        this.container = J.jStore("scroll", this);
        this.wrapper = v.$new("div", {
            "class": "mcs-wrapper"
        }, {
            display: "inline-block"
        });
        this.itemsContainer = v.$new("div", {
            "class": "mcs-items-container"
        });
        this.timerDestroy = null;
        for (N = this.container.childNodes.length - 1; N >= 0; N--) {
            H = this.container.childNodes[N];
            if (H.nodeType === 3 || H.nodeType === 8) {
                this.container.removeChild(H)
            } else {
                this.originalNodes.push(H)
            }
        }
        if (this.originalNodes.length === 0) {
            return
        }
        K = function(V) {
            var U = function(Y) {
                var X = V.childNodes[Y];
                if (!X) {
                    return
                }
                var W = X.tagName.toLowerCase();
                if ("br" === W || "hr" === W) {
                    return U(++Y)
                } else {
                    return X
                }
            };
            return U(0)
        };
        Q = K(this.container);
        this.tagImg = false;
        this.replaceImageAttribute(Q);
        this.coreTimeout = null;
        this.isIntegerPolyfill = (function() {
            var U = Number.isInteger;
            if (!U) {
                U = function(V) {
                    return typeof V === "number" && isFinite(V) && Math.floor(V) === V
                }
            }
            return U
        })();
        G = j(function(U) {
            this.coreTimeout = setTimeout(j(function() {
                this.firstItemSize = j(K(this.container)).jGetSize();
                if (this.firstItemSize.height == 0) {
                    if (M < 100) {
                        M++;
                        G(U)
                    }
                } else {
                    clearTimeout(this.coreTimeout);
                    U()
                }
            }).jBind(this), 100)
        }).jBind(this);
        G(j(function() {
            this.cachedCSS = j([]);
            P = v.$A(this.container.childNodes);
            this.firstItem = P[0];
            j(P[0]).jSetCssProp("display", "none");
            this.itemCss = {
                size: F(P[0]),
                border: r(P[0]),
                padding: i(P[0]),
                margin: n(P[0])
            };
            P[0].jSetCssProp("display", "inline-block");
            this.container.jSetCssProp("display", "none");
            this.containerCssSize = F(this.container);
            this.container.jSetCssProp("display", "inline-block");
            this.sizeFirstImg = null;
            this.setupOptions();
            this.firstItemSize = s(this.originwidth, this.originheight, this.firstItemSize, this.o("orientation"));
            if (this._insideOptions.progress) {
                this.progress = new v.Modules.Progress(this.container)
            }
            this.initBullets();
            this.initEffect_();
            I = j(function() {
                var V;
                var X = true;
                var U = {};
                this.hashBox = v.$new("div", null, {
                    position: "absolute",
                    left: "-10000px",
                    top: "-10000px"
                }).jAppendTo(document.body);
                this.show();
                for (N = 0, L = P.length; N < L; N++) {
                    V = P[N].tagName.toLowerCase();
                    if (X) {
                        if ("br" === V || "hr" === V) {
                            continue
                        }
                    } else {
                        if ("br" === V || "hr" === V) {
                            continue
                        }
                    }
                    try {
                        if (p) {
                            o.append(v.$new("div", {}, {
                                display: "none",
                                visibility: "hidden"
                            }).append(document.createTextNode(p)));
                            p = undefined
                        }
                    } catch (W) {}
                    X = false;
                    j(P[N]).jSetOpacity(0).jSetCssProp("display", "inline-block");
                    this.push(P[N], U);
                    U = {};
                    if (N == L - 1) {
                        this.done()
                    }
                }
            }).jBind(this);
            new v.QImageLoader([{
                node: P[0]
            }], {
                queue: 1,
                onerror: function(U) {
                    throw "Error: MagicScroll: Error loading image - " + U.img.src + ". " + R
                },
                onload: (function(U, V) {
                    this.sizeFirstImg = (U.img) ? U.img.jGetSize() : U.size;
                    this.sizeFirstImg = s(this.originwidth, this.originheight, this.sizeFirstImg, this.o("orientation"));
                    if (V.node.tagName.toLowerCase() == "figure") {
                        v.$A(V.node.childNodes).jEach(j(function(X) {
                            if (X.tagName && X.tagName.toLowerCase() == "figcaption") {
                                var W = n(j(X));
                                this.sizefigcaption = X.jGetSize();
                                this.sizefigcaption.width += W.width;
                                this.sizefigcaption.height += W.height;
                                this.sizeFirstImg.height += this.sizefigcaption.height
                            }
                        }).jBind(this))
                    }
                    I()
                }).jBind(this)
            })
        }).jBind(this))
    };
    v.extend(C.prototype, {
        hovered: false,
        setupOptions: function() {
            if ("animation" == this.o("mode") && (v.browser.ieMode || !v.browser.features.animation)) {
                this.set("mode", "scroll")
            }
            if (v.browser.ieMode && v.browser.ieMode <= 9 && this.o("mode") == "cover-flow") {
                this.set("mode", "scroll")
            }
            this._insideOptions.debug = document.location.hash.indexOf("#magic-debug-mode") != -1;
            if (v.jTypeOf(this.o("items")) === "array") {
                this._insideOptions.itemSettings = this.o("items");
                j(function() {
                    var H;
                    var J = this._insideOptions.itemSettings;
                    var G = J.length;
                    for (var I = 0; I < G; I++) {
                        for (var K = I + 1; K < G; K++) {
                            if (J[I][0] < J[K][0]) {
                                H = J[I];
                                J[I] = J[K];
                                J[K] = H
                            }
                        }
                    }
                    this._insideOptions.itemSettings = J
                }).jBind(this)();
                this.set("items", "auto")
            }
            if (this.o("speed") === 0) {
                this.set("speed", 10)
            }
            if (this.o("autoplay") < 0 || this.o("step") == 0) {
                this._insideOptions.continuous = true
            }
            if (j(["cover-flow", "animation"]).contains(this.o("mode"))) {
                this._insideOptions.continuous = false
            }
            if ("off" === this.o("loop") || "false" === this.o("loop")) {
                this.set("loop", false)
            }
            if (this.o("mode") == "carousel" || this._insideOptions.continuous) {
                this.set("loop", "infinite")
            }
            if (this.o("mode") == "cover-flow") {
                this.set("loop", false)
            }
            if ("rewind" === this.o("loop") && "animation" === this.o("mode")) {
                this.set("loop", false)
            }
            if (j(["cover-flow", "carousel"]).contains(this.o("mode")) || this._insideOptions.continuous) {
                this.set("pagination", false)
            }
            if (j(["cover-flow", "carousel"]).contains(this.o("mode")) && !this._insideOptions.continuous) {
                this.set("step", 1)
            }
            if (j(["cover-flow", "carousel"]).contains(this.o("mode")) && !j(["auto", "fit"]).contains(this.o("items"))) {
                this.set("items", "auto")
            }
            if (this.o("mode") == "animation" && this.o("items") == "auto") {
                this.set("items", "fit")
            }
            if (this.o("mode") == "animation") {
                this.set("step", "auto")
            }
            if (this._insideOptions.continuous) {
                this.set("easing", "cubic-bezier(0, 0, 1, 1)")
            } else {
                if (this.o("easing") == "cubic-bezier(0, 0, 1, 1)") {
                    this.set("easing", this._insideOptions.timingFunctionDefault)
                }
            }
            if ("carousel" === this.o("mode")) {
                this.set("lazyLoad", false)
            }
            if (j(["cover-flow", "carousel"]).contains(this.o("mode"))) {
                this._insideOptions.itemSettings = "auto"
            }
            this.originwidth = this.o("width");
            this.originheight = this.o("height");
            if (this._insideOptions.continuous) {
                this.set("autoplay", 0)
            }
            if (j(["cover-flow", "carousel"]).contains(this.o("mode")) || this._insideOptions.continuous) {
                this.set("arrows", false)
            }
            if ("false" === this.o("arrows") || "off" === this.o("arrows")) {
                this.set("arrows", false)
            }
            if (this.o("arrows")) {
                this.container.jAddClass("MagicScroll-arrows-" + this.o("arrows"))
            }
            this.container.jAddClass("MagicScroll-" + this.o("orientation"));
            this.container.setAttribute("data-mode", this.o("mode"))
        },
        replaceImageAttribute: function(G) {
            if (G && (G.tagName == "FIGURE" || G.tagName == "A")) {
                G = j(G).byTag("IMG")[0] || G.firstChild
            }
            if (G && G.tagName == "IMG") {
                this.tagImg = G;
                var H = G.getAttribute("data-src");
                if (H) {
                    H = (H + "").jTrim();
                    if ("" != H) {
                        G.setAttribute("src", H)
                    }
                }
            }
        },
        initBullets: function() {
            if (!this.o("pagination")) {
                if (this.bullets) {
                    this.bullets.jRemove();
                    this.bullets = null
                }
                return
            }
            if (!this.bullets) {
                this.bullets = new v.Modules.Bullets({}, this.container, j(function() {
                    return this.hold_
                }).jBind(this));
                this.container.jAddClass("MagicScroll-bullets");
                this.bullets.bindEvent("bullets-click", j(function(G) {
                    this.jump({
                        direction: G.direction,
                        target: G.jumpIndex
                    })
                }).jBind(this))
            }
        },
        setBullets: function() {
            var G = j([]);
            if (!this.effect) {
                return
            }
            for (var H = 0; H < this.effect.l; H++) {
                if (j(["scroll", "animation"]).contains(this.o("mode"))) {
                    if (H % this.effect.itemStep == 0) {
                        G.push(this.effect.items[H].index)
                    }
                } else {
                    G.push(this.effect.items[H].index)
                }
            }
            this.bullets.push(G)
        },
        setupArrows: function() {
            var G = i(this.container);
            if (this.arrows) {
                this.arrows.jRemove();
                this.arrows = null
            }
            this.wrapper.jSetCss({
                top: "",
                left: "",
                right: "",
                bottom: ""
            });
            if (this.o("arrows")) {
                if (!this.arrows) {
                    this.arrows = new v.Modules.ArrowsPair({
                        orientation: "mcs-" + this.o("orientation"),
                        "class": "mcs-button",
                        classHidden: "mcs-hidden",
                        classDisabled: "mcs-disabled"
                    }, this.container);
                    this.effect.bindEvent("disable", this.arrows.disable.jBind(this.arrows, undefined));
                    this.effect.bindEvent("enable", this.arrows.enable.jBind(this.arrows, undefined));
                    this.effect.bindEvent("hideArrows", this.arrows.hide.jBind(this.arrows, undefined));
                    this.effect.bindEvent("showArrows", this.arrows.show.jBind(this.arrows, undefined));
                    if (!this.o("loop")) {
                        this.effect.bindEvent("scroll", this.arrows.enable.jBind(this.arrows, undefined));
                        this.effect.bindEvent("last-frame", this.arrows.disable.jBind(this.arrows, "next"));
                        this.effect.bindEvent("first-frame", this.arrows.disable.jBind(this.arrows, "prev"))
                    }
                    this.arrows.bindEvent("forward", (function(K) {
                        this.jump("forward")
                    }).jBind(this));
                    this.arrows.bindEvent("backward", (function(K) {
                        this.jump("backward")
                    }).jBind(this))
                } else {
                    this.arrows.setOrientation(this.o("orientation"))
                }
                if (this.o("arrows") == "outside") {
                    var J = this.o("orientation") == "horizontal" ? j(["left", "right"]) : j(["top", "bottom"]),
                        H = this.o("orientation") == "horizontal" ? "width" : "height",
                        I = parseInt(this.arrows.next.jGetSize()[H]);
                    J.jEach(j(function(K) {
                        this.wrapper.jSetCssProp(K, I + (G[H] / 2))
                    }).jBind(this))
                }
            }
        },
        setContainerSize: function() {
            if (this.o("width") != "auto") {
                this.container.jSetCssProp("width", this.o("width"))
            }
            if (this.o("height") != "auto") {
                this.container.jSetCssProp("height", this.o("height"))
            }
            if (this.o("orientation") == "horizontal" && this.o("rwd")) {
                var H = this.container.jGetSize();
                var G = r(this.container);
                if (!this.cssId) {
                    if (v.browser.ieMode && v.browser.ieMode < 9) {
                        v.$new("div", null, {
                            display: "inline-block",
                            "vertical-align": "top",
                            "padding-top": this.firstItemSize.height / (parseInt(H.width) - G.width) * 100 + "%"
                        }).jAppendTo(this.container)
                    } else {
                        this.cssId = v.addCSS("#" + this.id + ":before", {
                            "padding-top": this.firstItemSize.height / (parseInt(H.width) - G.width) * 100 + "%"
                        })
                    }
                    this.container.jSetCssProp("height", "");
                    if (this.cssId > -1) {
                        this.cachedCSS.push(this.cssId)
                    }
                }
            }
        },
        initEffect_: function() {
            var G = j(["scroll", "animation"]).contains(this.o("mode")) ? "effect" : this.o("mode");
            this.effect = new v.Scroll[("-" + G).jCamelize()](this.itemsContainer, {
                orientation: this.o("orientation"),
                duration: this.o("speed"),
                continuous: this._insideOptions.continuous,
                timingFunction: this.o("easing"),
                loop: this.o("loop"),
                step: this.o("step"),
                effect: this.o("mode"),
                lazyLoad: this.o("lazyLoad"),
                progress: this._insideOptions.progress,
                stopDownload: this._insideOptions.stopDownload,
                debug: this._insideOptions.debug,
                scrollOnWheel: this.o("scrollOnWheel"),
                draggable: this.o("draggable"),
                keyboard: this.o("keyboard")
            });
            if (this.o("items") != "auto" && this.o("step") == "auto") {
                this.set("step", this.o("items"))
            }
            this.effect.bindEvent("hold", j(function() {
                this.hold_ = false;
                this.auto()
            }).jBind(this))
        },
        jump: function(G, H) {
            if (this.o("mode") == "animation" && /^\+|^\-/.test(G)) {
                G = /^\+/.test(G) ? "forward" : "backward"
            }
            if (!this.hold_ && !this.effect.stopScroll) {
                this.hold_ = true;
                clearTimeout(this.auto_);
                this.effect.jump(G, j(function(I, J) {
                    this.hold_ = false;
                    if (J) {
                        return
                    }
                    this.jCallEvent("after-scroll");
                    if (!this._insideOptions.continuous || this.hovered || this.pause_) {
                        if (this.hashBox.childNodes.length == 0) {
                            this.hashBox.jRemove()
                        }
                        if (this.o("loop")) {
                            this.effect.changeClones()
                        }
                        this.o("onMoveEnd")({
                            id: this.id,
                            items: I
                        });
                        this.effect.continuousMove = false;
                        H && H()
                    } else {
                        this.jump("forward", H)
                    }
                }).jBind(this))
            }
        },
        addItem: function(J, H) {
            var G = false;
            var I = H;
            J = this.createItemFromString(J);
            I = this.getRightIndex(I);
            clearTimeout(this.timerDestroy);
            if (v.jTypeOf(J) === "element") {
                this.push(j(J), {}, I);
                this.effect.addItem(J, I);
                this.effect.afterAddItem(I, j(function() {
                    if (this.bullets) {
                        this.bullets.o.items = this.effect.items.length;
                        this.setBullets();
                        this.bullets.show()
                    }
                }).jBind(this));
                G = true
            }
            return G
        },
        removeItem: function(I) {
            var H = this.effect.jGetSizeItems();
            var K = I;
            var J = this.effect.getItems();
            var G = false;
            if (v.jTypeOf(I) === "string") {
                for (var L = 0; L < H; L++) {
                    if (J[L].content.getAttribute("id") === I) {
                        K = J[L].index;
                        break
                    }
                }
            }
            if (K >= 0 && K < H) {
                this.effect.removeItem(K);
                G = true
            }
            if (this.effect.jGetSizeItems() < 1) {
                this.lazyDestroy()
            }
            return G
        },
        rightInsertItem: function(J, I) {
            var H = v.$A(this.itemsContainer.childNodes);
            var G = H.length;
            if ((I === null || I === undefined) || I >= G) {
                J.node.jAppendTo(this.itemsContainer)
            } else {
                if (I <= 0) {
                    this.itemsContainer.insertBefore(J.node, this.itemsContainer.firstChild)
                } else {
                    if (I > 0 && I < G) {
                        this.itemsContainer.insertBefore(J.node, H[I])
                    }
                }
            }
        },
        getRightIndex: function(I) {
            var G = I;
            var H = this.effect.jGetSizeItems();
            if (!this.isIntegerPolyfill(I) || I > H) {
                G = H
            } else {
                if (I < 0) {
                    G = 0
                }
            }
            return G
        },
        createItemFromString: function(H) {
            var G = H;
            if (v.jTypeOf(H) === "string" && (H !== "" || H !== " ")) {
                var I = document.createElement("div");
                I.innerHTML = H;
                G = I.firstChild
            }
            return G
        },
        lazyDestroy: function() {
            this.timerDestroy = setTimeout(j(function() {
                this.dispose()
            }).jBind(this), 1000)
        },
        getItems: function() {
            var G = 0;
            if (this.scrollReady && this.effect && this.effect.jGetSizeItems() > 0) {
                G = this.effect.getItems()
            }
            return G
        },
        parseTag: function(L) {
            var H;
            var K;
            var G;
            var J;
            if (L.tagName.toUpperCase() == "A") {
                var G = j(L).byTag("PICTURE")[0] || j(L).byTag("IMG")[0];
                if (G) {
                    if ((J = j(L).byTag("span")[0]) && J.innerHTML.jTrim() !== "") {
                        K = j(J.cloneNode(true)).jAddClass("mcs-caption");
                        K.setAttribute("magic-user", "yes")
                    } else {
                        if (((H = G.nextSibling) && H.nodeType == 3 && H.nodeValue.jTrim() !== "") || (J && (H = J.nextSibling) && H.nodeType == 3 && H.nodeValue.jTrim() !== "")) {
                            K = v.$new("span", {
                                "class": "mcs-caption"
                            }).append(H.cloneNode(true))
                        }
                    }
                    for (var I = L.childNodes.length - 1; I >= 0; I--) {
                        if (G !== L.childNodes[I]) {
                            L.removeChild(L.childNodes[I])
                        }
                    }
                    if (K) {
                        L.append(K)
                    }
                }
            } else {
                if (L.tagName.toLowerCase() == "figure") {
                    v.$A(L.childNodes).jEach(j(function(M) {
                        if (M.tagName && M.tagName.toLowerCase() == "figcaption") {
                            H = M.getAttribute("id") || "figcaption-" + Math.floor(Math.random() * v.now());
                            M.setAttribute("id", H);
                            j(M).jAddClass("mcs-caption");
                            K = M;
                            this.cssId = v.addCSS("#" + H + ":before", {
                                "padding-top": (this.sizefigcaption.height + r(j(M)) / 2) / parseInt(this.firstItemSize.width) * 100 + "%"
                            })
                        }
                    }).jBind(this))
                }
            }
            return {
                node: L,
                figcaption: K
            }
        },
        setPercent: function(G) {
            if (this.o("items") != "auto") {
                G.node.jSetCssProp(this.o("orientation") == "horizontal" ? "width" : "height", 100 / this.o("items") + "%")
            }
        },
        checkWholeItems: function(H) {
            var I, G;
            if (this.o("items") == "fit") {
                this.set("items", Math.floor(this.wrapper.jGetSize()[this.effect.p_.size] / this.sizeFirstImg[this.effect.p_.size]))
            } else {
                if (this.o("items") == "auto") {
                    if (!this.itemCss.size[this.effect.p_.size]) {
                        I = this.sizeFirstImg[this.effect.p_.size] || this.firstItemSize[this.effect.p_.size];
                        G = this.itemsContainer.jGetSize();
                        if ("vertical" === this.o("orientation")) {
                            I = Math.min(I, G[this.effect.p_.size])
                        }
                        G = (I + n(H.content)[this.effect.p_.size] + r(H.content)[this.effect.p_.size] + i(H.content)[this.effect.p_.size] + i(H.node)[this.effect.p_.size]) / this.itemsContainer.jGetSize()[this.effect.p_.size] * 100;
                        if (G > 100) {
                            G = 100
                        }
                        H.node.jSetCssProp(this.effect.p_.size, G + "%")
                    }
                }
            }
        },
        push: function(I, G, H) {
            I.show();
            I = {
                content: I
            };
            if (G.top) {
                G.top.jEach(function(K) {
                    K.jRemove()
                })
            }
            if (G.bottom) {
                G.bottom.jEach(function(K) {
                    K.jRemove()
                })
            }
            I.additionalTags = G;
            var J = this.parseTag(I.content);
            I.content = J.node;
            I.figcaption = J.figcaption;
            I.node = v.$new("div", {
                "class": "mcs-item"
            });
            this.rightInsertItem(I, H);
            this.checkWholeItems(I);
            this.setPercent(I);
            I.content.jAppendTo(this.hashBox);
            if (this.isIntegerPolyfill(H)) {
                this.effect.pushByIndex(I, H)
            } else {
                this.effect.push(I)
            }
        },
        getItemById: function(K) {
            var G = null;
            if (this.isIntegerPolyfill(K)) {
                var I = Math.floor(K);
                if (I >= 0 && I < this.effect.jGetSizeItems()) {
                    G = this.effect.getItems()[I]
                }
            } else {
                var H = this.effect.getItems();
                for (var J = 0; J < H.length; J++) {
                    if (H[J].content.getAttribute("id") === K) {
                        G = J
                    }
                }
            }
            return G
        },
        show: function() {
            if (this.indoc) {
                return
            }
            this.indoc = true;
            this.container.append(this.wrapper.append(this.itemsContainer)).show().setAttribute("id", this.id);
            this.container.jSetCssProp("display", "inline-block");
            if (this.o("arrows")) {
                this.setupArrows();
                this.o("loop") && this.arrows.disable("prev");
                this.arrows.hide()
            }
            this.checkSizes_();
            this.setContainerSize();
            if (this.tagImg) {
                if ("horizontal" === this.o("orientation") && this.container.jGetSize().width < this.sizeFirstImg.width) {
                    this.checkSizes_(true);
                    this.setContainerSize()
                }
            }
            this.countTheNumberOfItems();
            j(window).jAddEvent("resize", this.onResize.jBind(this))
        },
        done: function(G) {
            this.effect.bindEvent("key_down", j(function(H) {
                this.jump(H.direction)
            }).jBind(this));
            this.effect.bindEvent("show-this", j(function(H) {
                this.jump(H.index)
            }).jBind(this));
            this.effect.bindEvent("showProgress", j(function() {
                this.progress && this.progress.show()
            }).jBind(this));
            this.effect.bindEvent("hideProgress", j(function() {
                this.progress && this.progress.hide()
            }).jBind(this));
            this.effect.bindEvent("complete", j(function() {
                this.effect.done2(j(function() {
                    this.effect.bindEvent("disableHold", j(function() {
                        this.hold_ = false
                    }).jBind(this));
                    this.effect.bindEvent("item-click", j(function(J) {
                        var I = true,
                            H, K;
                        if (this.o("mode") == "carousel") {
                            H = 360 / this.effect.l;
                            K = (360 - this.effect.last * H + J.index * H) % 360;
                            if (K > 90 && K < 270) {
                                I = false
                            }
                        }
                        I && this.jump(J.index)
                    }).jBind(this));
                    if (this.bullets) {
                        this.bullets.o.items = this.effect.items.length;
                        this.setBullets();
                        this.bullets.show()
                    }
                    this.effect.bindEvent("on-item-hover", j(function(H) {
                        this.o("onItemHover")({
                            id: this.id,
                            item: H.itemIndex
                        })
                    }).jBind(this));
                    this.effect.bindEvent("on-item-out", j(function(H) {
                        this.o("onItemOut")({
                            id: this.id,
                            item: H.itemIndex
                        })
                    }).jBind(this));
                    this.effect.bindEvent("on-start-effect", j(function(H) {
                        this.bullets && this.bullets.setActiveBullet(H.arr, !this.o("loop") || this.o("loop") === "rewind");
                        this.o("onMoveStart")({
                            id: this.id,
                            items: H.arr
                        })
                    }).jBind(this));
                    this.effect.bindEvent("drag-start", j(function() {
                        this.hold_ = true;
                        this.o("onMoveStart")({
                            id: this.id,
                            items: []
                        });
                        this.auto()
                    }).jBind(this));
                    this.effect.bindEvent("drag-end", j(function(H) {
                        this.bullets && this.bullets.setActiveBullet(H.arr, !this.o("loop"));
                        this.hold_ = false;
                        this.o("onMoveEnd")({
                            id: this.id,
                            items: H.arr
                        });
                        if (this.hashBox.childNodes.length == 0) {
                            this.hashBox.jRemove()
                        }
                        this.auto()
                    }).jBind(this));
                    this.container.jSetCssProp("overflow", "visible");
                    this.scrollReady = true;
                    this.o("onReady").call(this, this.id);
                    this.o("rwd") && this.container.jAddClass("mcs-height-auto");
                    j(window).jAddEvent("resize", j(function() {
                        this.hold_ = false;
                        if (this._insideOptions.continuous) {
                            this.jump.jBind(this, "forward").jDelay(200)
                        } else {
                            this.auto()
                        }
                    }).jBind(this));
                    this.setEvent();
                    if ("vertical" === this.o("orientation") && /%$/.test(this.o("height"))) {
                        this.set("height", this.container.jGetSize().height);
                        this.setContainerSize()
                    }
                    if (this.o("autoplay") != 0) {
                        this.auto()
                    } else {
                        this.pause_ = true
                    }
                    if (this._insideOptions.continuous) {
                        this.pause_ = false;
                        this.jump.jBind(this, "forward").jDelay(200)
                    }
                    this.scrollReady = true
                }).jBind(this))
            }).jBind(this));
            this.effect.done()
        },
        setEvent: function() {
            this.bindEvent("after-scroll", j(function() {
                if (this._insideOptions.autoplay != 0) {
                    !this._insideOptions.continuous && this.auto()
                }
            }).jBind(this));
            if (!v.browser.touchScreen && (this._insideOptions.pause || this._insideOptions.continuous)) {
                this.wrapper.jAddEvent("mouseover mouseout", j(function(H) {
                    H.stop();
                    var G = H.getRelated();
                    while (G && G !== this.wrapper) {
                        G = G.parentNode
                    }
                    if (G == this.wrapper) {
                        return
                    }
                    if (this._insideOptions.pause && !this.pause_) {
                        this.pauseHover_ = "mouseover" == H.type;
                        this.hovered = "mouseover" == H.type;
                        if (this._insideOptions.continuous) {
                            if (H.type == "mouseover") {
                                this.pauseContinuous()
                            } else {
                                this.jump("forward")
                            }
                        } else {
                            this.auto()
                        }
                    }
                }).jBind(this))
            }
            if (!this._insideOptions.continuous && "animation" === this.o("mode") && this.o("scrollOnWheel")) {
                this.wrapper.jAddEvent("mousescroll", j(function(G) {
                    var H = -1 * (Math.abs(G.deltaY) < Math.abs(G.deltaX) ? G.deltaX : -1 * G.deltaY);
                    H = G.isMouse ? (H) : (H * (8 / 54));
                    if ((true === this.o("scrollOnWheel") && G.isMouse) || "vertical" === this.o("orientation") && Math.abs(G.deltaY) > Math.abs(G.deltaX) || "horizontal" === this.o("orientation") && Math.abs(G.deltaY) < Math.abs(G.deltaX)) {
                        G.stop();
                        if (Math.abs(H) < 0.6) {
                            return
                        }
                        this.jump(H > 0 ? "backward" : "forward")
                    }
                }).jBind(this))
            }
        },
        checkSizes_: function(O) {
            var N = "width";
            var P = "height";
            var K = this.o("orientation") == "vertical";
            var G = this.container.jGetSize();
            var J = {
                width: 0,
                height: 0
            };
            var L = i(this.container);
            var S = r(this.wrapper);
            var W = n(this.wrapper);
            var Q = i(this.wrapper);
            var R = n(this.firstItem);
            var M = v.$new("div", {
                "class": "mcs-item"
            }).jAppendTo(this.wrapper.firstChild);
            var T;
            var U;
            var I;
            var V;
            var H = i(M);
            M.jRemove();
            if (this.container.jGetCss("box-sizing") == "border-box") {
                J = r(this.container)
            }
            if (K) {
                N = P;
                P = "width"
            }
            if (this.o(N) == "auto" && !parseInt(this.containerCssSize[N])) {
                if (K) {
                    if (!isNaN(this.o("items"))) {
                        this.set(N, G[N] * this.o("items"))
                    } else {
                        this.set(N, G[N])
                    }
                } else {
                    this.set(N, "100%")
                }
            }
            if (this.o(P) == "auto" && !parseInt(this.containerCssSize[P]) || O) {
                I = J[P] + L[P] + S[P] + R[P] + H[P];
                if (K) {
                    T = Math.min(this.sizeFirstImg[P], G[P])
                } else {
                    if (this.tagImg) {
                        T = this.sizeFirstImg[P];
                        U = this.sizeFirstImg[P] / this.sizeFirstImg[N];
                        if (this.sizeFirstImg[N] > G[N]) {
                            T = G[N] * U
                        }
                    }
                }
                V = (T + n(j(this.originalNodes[0]))[P] + i(this.originalNodes[0])[P] + r(this.originalNodes[0])[P]) || this.firstItemSize[P] || G[P];
                V += I;
                V += "";
                this.set(P, V)
            }
        },
        countTheNumberOfItems: function() {
            var J;
            var H;
            var M;
            var L = true;
            var G = this.o("items");
            var K = window.MagicScrollOptions;
            if (v.browser.mobile) {
                K = window.MagicScrollMobileOptions
            }
            if (this._insideOptions.itemSettings != "auto" && j(["scroll", "animation"]).contains(this.o("mode"))) {
                M = this._insideOptions.itemSettings;
                H = M.length;
                J = this._insideOptions.maxSize == "scroll" ? this.container.jGetSize()[this.o("orientation") == "vertical" ? "height" : "width"] : j(window).jGetSize()[this.o("orientation") == "vertical" ? "height" : "width"];
                if (K && Array.isArray(M) && (K.items && !Array.isArray(K.items) && this.isIntegerPolyfill(K.items)) && J > M[0][0]) {
                    this.set("items", Math.floor(K.items))
                } else {
                    for (var I = H - 1; I >= 0; I--) {
                        if (J <= M[I][0] && !isNaN(M[I][1])) {
                            this.set("items", M[I][1]);
                            L = false;
                            break
                        } else {
                            if (0 === I) {
                                if (j(["carousel", "cover-flow"]).contains(this.o("mode"))) {
                                    this.set("items", 1)
                                } else {
                                    if ("animation" === this.o("mode")) {
                                        this.set("items", "fit")
                                    } else {
                                        this.set("items", "fit")
                                    }
                                }
                            }
                        }
                    }
                    if (G === this.o("items")) {
                        return
                    }
                }
                v.$A(this.itemsContainer.childNodes).jEach(j(function(O, N) {
                    this.checkWholeItems({
                        node: O,
                        content: O.firstChild
                    });
                    this.setPercent({
                        node: O
                    })
                }).jBind(this));
                if (this.effect.items.length > 0) {
                    this.effect.update()
                }
            }
        },
        onResize: function() {
            this.countTheNumberOfItems()
        },
        resize: function() {
            if (this.scrollReady) {
                this.onResize();
                this.effect.onResize()
            }
        },
        pauseContinuous: function() {
            this.effect.pause()
        },
        stop: function() {
            this.container.jStore("swap-items-opacity", false);
            this.effect && this.effect.stop();
            this.hold_ = false;
            clearTimeout(this.auto_);
            this.auto_ = false
        },
        checkEffect: function(G) {
            return G == this.o("mode")
        },
        registerCallback: function(H, G) {
            if (!j(["onItemHover", "onItemOut", "onReady", "onMoveStart", "onMoveEnd"]).contains(H)) {
                return
            }
            this.set(H, G)
        },
        dispose: function() {
            var G;
            var H;
            var I;
            this.stop();
            clearTimeout(this.coreTimeout);
            this.wrapper.jRemoveEvent("mouseover mouseout");
            this.wrapper.jRemoveEvent("mousewheel");
            this.effect && this.effect.dispose();
            if (this.cachedCSS) {
                for (G = 0; G < this.cachedCSS.length; G++) {
                    v.removeCSS("magicscroll-css", this.cachedCSS[G])
                }
            }
            this.container.jRemoveClass("MagicScroll-bullets");
            j(this.originalNodes).jEach(j(function(J) {
                if (J.parentNode) {
                    j(J).jRemove()
                }
                I = J;
                if (I.tagName == "FIGURE") {
                    I = I.firstChild
                }
                if (I.tagName == "A") {
                    I = I.firstChild
                }
                if (I && I.tagName == "IMG") {
                    H = I.getAttribute("data-src");
                    if (H) {
                        H = (H + "").jTrim();
                        if ("" != H) {
                            I.removeAttribute("src")
                        }
                    }
                }
                if (J.childNodes.length > 0 && J.tagName.toLowerCase() == "a") {
                    v.$A(J.childNodes).jEach(j(function(K) {
                        if (K.tagName && K.tagName.toLowerCase() == "span") {
                            K = j(K);
                            if ("yes" === K.getAttribute("magic-user")) {
                                K.removeAttribute("magic-user");
                                J.append(K)
                            } else {
                                J.append(K.childNodes[0]);
                                K.jRemove()
                            }
                        }
                    }).jBind(this))
                }
                J.jSetCss({
                    visibility: "",
                    opacity: "1"
                })
            }).jBind(this));
            this.hashBox && this.hashBox.jRemove();
            v.$A(this.container.childNodes).jEach(function(J) {
                j(J).kill()
            });
            j(this.container).removeAttribute("data-mode");
            j(this.container).jClearEvents().jRemoveClass().jAddClass(this.originalClasses);
            this.container.jSetCss({
                width: "",
                height: "",
                visibility: "",
                display: "",
                overflow: ""
            });
            this.container.jDel("scroll");
            for (G = this.originalNodes.length - 1; G >= 0; G--) {
                j(this.originalNodes[G]).jSetCss({
                    opacity: ""
                }).jAppendTo(this.container)
            }
            this.timerDestroy = null;
            this.o("onStop").call(this, this.id);
            return null
        },
        play: function(G) {
            if (null === G || undefined === G) {
                G = this.o("autoplay")
            } else {
                G || (G = 1000);
                G = parseInt(G);
                if (isNaN(G)) {
                    G = this.o("autoplay")
                }
            }
            if (!this.pause_) {
                return
            }
            if (!this.auto_) {
                this.pause_ = false;
                this.effect.continuousPause = false;
                this._insideOptions.autoplay = G;
                this.jump("forward")
            }
        },
        pause: function() {
            if (this.pause_) {
                return
            }
            this.pause_ = true;
            if (this._insideOptions.continuous) {
                this.pauseContinuous()
            } else {
                this.stop()
            }
            this.auto()
        },
        updateOptions: function(G) {
            var J = {
                height: "",
                width: ""
            };
            var I = this.o("mode");
            this.stop();
            this.container.jRemoveClass("MagicScroll-arrows-" + this.o("arrows"));
            this.container.jRemoveClass("MagicScroll-" + this.o("orientation"));
            this.wrapper.jRemoveEvent("mouseover mouseout mousewheel");
            this.destroyEvent("after-scroll");
            this.progress = null;
            this.container.jRemoveClass("MagicScroll-bullets");
            if ("string" == v.jTypeOf(G)) {
                this.options.fromString(G || "")
            } else {
                this.options.fromJSON(G || {})
            }
            if (I != this.o("mode")) {
                return false
            }
            this._insideOptions.autoplay = this.o("autoplay");
            this.setupOptions();
            this.effect.items.jEach(j(function(K) {
                K.node.jSetCss(J)
            }).jBind(this));
            this.effect.itemsFirstClones.jEach(j(function(K) {
                j(K).node.jSetCss(J)
            }).jBind(this));
            this.effect.itemsLastClones.jEach(j(function(K) {
                j(K).node.jSetCss(J)
            }).jBind(this));
            this.setupArrows();
            for (var H = 0; H < this.cachedCSS.length; H++) {
                this.cachedCSS[H] && v.removeCSS("magicscroll-css", this.cachedCSS[H])
            }
            this.effect.setNewOptions({
                orientation: this.o("orientation"),
                duration: this.o("speed"),
                continuous: this._insideOptions.continuous,
                timingFunction: this.o("easing"),
                loop: this.o("loop"),
                step: this.o("step"),
                effect: this.o("mode"),
                lazyLoad: this.o("lazyLoad"),
                progress: this._insideOptions.progress,
                stopDownload: this._insideOptions.stopDownload,
                debug: this._insideOptions.debug,
                scrollOnWheel: this.o("scrollOnWheel"),
                draggable: this.o("draggable"),
                keyboard: this.o("keyboard")
            });
            this.checkSizes_();
            this.setContainerSize();
            this.countTheNumberOfItems();
            v.$A(this.itemsContainer.childNodes).jEach(j(function(L, K) {
                this.checkWholeItems({
                    node: L,
                    content: L.firstChild
                });
                this.setPercent({
                    node: L
                })
            }).jBind(this));
            this.effect.update(true);
            this.initBullets();
            if (this.bullets) {
                this.setBullets();
                this.bullets.show()
            }
            if (this.o("autoplay") == 0) {
                this.pause()
            } else {
                this.pause_ = false
            }
            this.o("arrows") && this.arrows.show();
            this.setEvent();
            if (this._insideOptions.continuous) {
                this.jump.jBind(this, "forward").jDelay(200);
                this.pause_ = false
            } else {
                this.auto()
            }
            return true
        },
        auto: function() {
            var G = "forward";
            clearTimeout(this.auto_);
            this.auto_ = false;
            if (this.hold_ || this.pause_ || this.pauseHover_) {
                return
            }
            if (this._insideOptions.autoplay != 0) {
                this.auto_ = setTimeout(j(function() {
                    this.jump(G)
                }).jBind(this), Math.abs(this._insideOptions.autoplay))
            }
        }
    });
    v.extend(C.prototype, v.customEvents);
    v.Scroll.Full = C;
    var D = function(H) {
            var G = h(H);
            if (!G) {
                return
            }
            return {
                registerCallback: G.registerCallback.jBind(G),
                pause: G.pause.jBind(G),
                play: j(function(I) {
                    this.play(I)
                }).jBind(G),
                forward: j(function(I) {
                    I = !I ? "forward" : a(I, "+");
                    this.jump(I)
                }).jBind(G),
                backward: j(function(I) {
                    I = !I ? "backward" : a(I, "-");
                    this.jump(I)
                }).jBind(G),
                jump: j(function(I) {
                    if (!I || isNaN(Math.abs(parseInt(I)))) {
                        I = "forward"
                    }
                    this.jump(I)
                }).jBind(G),
                updateOptions: j(function(I) {
                    if (!I || v.jTypeOf(I) != "object") {
                        I = {}
                    }
                    this.updateOptions(I)
                }).jBind(G)
            }
        },
        h = function(H) {
            var G = null;
            if (v.jTypeOf(H) == "string" && j(H) || v.jTypeOf(H) == "element") {
                G = j(H).jFetch("scroll")
            } else {
                if (v.jTypeOf(H) == "function" && (H instanceof v.Scroll.Full) || H && H.indoc) {
                    G = H
                }
            }
            return G
        },
        e = function(I, J, H) {
            var G = h(I);
            if (G) {
                if (G.scrollReady) {
                    return G[H](J)
                } else {
                    return false
                }
            } else {
                J = I;
                I = A
            }
            j(I).jEach(function(K) {
                if (K.scrollReady) {
                    K[H](J)
                }
            })
        },
        a = function(H, G) {
            if (v.jTypeOf(H) === "string") {
                H = parseInt(H);
                if (isNaN(H)) {
                    H = H
                }
            }
            if (v.jTypeOf(H) === "number") {
                H = G + H
            }
            return H
        },
        y = function() {
            var G = Number.isInteger;
            if (!G) {
                G = function(H) {
                    return typeof H === "number" && isFinite(H) && Math.floor(H) === H
                }
            }
            return G
        },
        x = function(H) {
            var G = v.$A((H || document).byClass("MagicScroll")).map(function(I) {
                return q.start(I)
            });
            l = true;
            return G
        },
        l = false,
        B = function(G) {
            return A = j(A).filter(function(H) {
                return H.dispose()
            })
        },
        A = [],
        q = {
            version: "v2.0.52",
            start: function(H) {
                var G = null;
                if (arguments.length) {
                    H = j(H);
                    if (H && j(H).jHasClass("MagicScroll")) {
                        if (G = j(H).jFetch("scroll")) {
                            return G
                        } else {
                            G = new v.Scroll.Full(H, l ? {
                                autostart: true
                            } : {});
                            if (!G.o("autostart")) {
                                G = null;
                                return false
                            } else {
                                A.push(G);
                                return G
                            }
                        }
                    } else {
                        return false
                    }
                } else {
                    return x()
                }
            },
            stop: function(G) {
                if (arguments.length) {
                    G = (G instanceof v.Scroll.Full) ? G : (j(G) && j(G).jFetch("scroll") || null);
                    if (!G) {
                        return
                    }
                    A.splice(j(A).indexOf(G), 1);
                    G.dispose()
                } else {
                    B();
                    return
                }
            },
            refresh: function(G) {
                if (G) {
                    q.stop(G);
                    return q.start(G.id || G)
                } else {
                    B();
                    return x()
                }
            },
            running: function(I) {
                var H, G = false;
                if (I) {
                    H = h(I);
                    if (H) {
                        G = H.scrollReady
                    }
                }
                return G
            },
            getInstance: function(G) {
                return D(G)
            },
            updateOptions: function(G, H) {
                return e(G, H, "updateOptions")
            },
            resize: function(G) {
                if (G) {
                    e(G, null, "resize")
                } else {
                    j(A).jEach(function(H) {
                        q.resize(H)
                    })
                }
            },
            jump: function(G, H) {
                if (undefined != G && null != G) {
                    e(G, H, "jump")
                }
            },
            pause: function(G) {
                e(G, null, "pause")
            },
            play: function(G, H) {
                e(G, H, "play")
            },
            forward: function(G, H) {
                var I;
                H = !H ? "forward" : a(H, "+");
                if (!G) {
                    G = H
                } else {
                    if (!h(G)) {
                        G = a(G, "+")
                    }
                }
                e(G, H, "jump")
            },
            backward: function(G, H) {
                var I;
                H = !H ? "backward" : a(H, "-");
                if (!G) {
                    G = H
                } else {
                    if (!h(G)) {
                        G = a(G, "-")
                    }
                }
                e(G, H, "jump")
            },
            addItem: function(M, K, I) {
                var H = h(M);
                var G = false;
                var L = y();
                var J = L(I);
                if (H && H.scrollReady) {
                    if (v.jTypeOf(K) === "element" || v.jTypeOf(K) === "string") {
                        if (J) {
                            G = H.addItem(K, Math.floor(I))
                        } else {
                            G = H.addItem(K)
                        }
                    }
                }
                return G
            },
            removeItem: function(L, I) {
                var H = h(L);
                var G = false;
                var K = y();
                var J = K(I);
                if (H && H.scrollReady) {
                    if (J) {
                        G = H.removeItem(Math.floor(I))
                    } else {
                        if ((v.jTypeOf(I) === "string" && I !== "")) {
                            G = H.removeItem(I)
                        }
                    }
                }
                return G
            },
            getItem: function(K, I) {
                var H = h(K);
                var G = null;
                var J = y();
                if (H && H.scrollReady) {
                    if (J(I) || (v.jTypeOf(I) === "string" && I !== "")) {
                        G = H.getItemById(I)
                    }
                }
                return G
            },
            getItems: function(I) {
                var H = h(I);
                var G = 0;
                if (H && H.scrollReady) {
                    G = H.getItems()
                }
                return G
            }
        };
    j(document).jAddEvent("domready", function() {
        p = p();
        o = v.$new("div", {
            "class": "msc-tmp-hdn-holder"
        }).jAppendTo(document.body);
        v.defined(window.MagicScrollOptions) || (window.MagicScrollOptions = {});
        v.defined(window.MagicScrollMobileOptions) || (window.MagicScrollMobileOptions = {});
        v.defined(window.MagicScrollExtraOptions) || (window.MagicScrollExtraOptions = {});
        v.defined(window.MagicScrollMobileExtraOptions) || (window.MagicScrollMobileExtraOptions = {});
        var G = window.MagicScrollMobileExtraOptions.beforeInit || window.MagicScrollExtraOptions.beforeInit || window.MagicScrollMobileOptions.beforeInit || window.MagicScrollOptions.beforeInit || v.$F;
        G();
        q.start.jDelay(10)
    });
    return q
})();
                                    

#25 JavaScript::Eval (size: 2, repeated: 1) - SHA256: f5b7ce859f0962589a1bcb154370eef328e66694319aec9b9691ed5dec42ce6a

                                        Hl
                                    

#26 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 4fbd2f794f9ec271d22945a65534e8e17d2208d5be0a90af60dd8150932eb177

                                        0,
function(n) {
    KN(n, 2)
}
                                    

#27 JavaScript::Eval (size: 212, repeated: 1) - SHA256: 189ded64b048f981466c318fd1473107e5a1edea5c5a292bc1486cb8277b7b0f

                                        0, EF = function(Z, N, Q, k, R) {
    if (!(k = (R = N, a.trustedTypes), k) || !k.createPolicy) return R;
    try {
        R = k.createPolicy(Z, {
            createHTML: Fc,
            createScript: Fc,
            createScriptURL: Fc
        })
    } catch (f) {
        if (a.console) a.console[Q](f.message)
    }
    return R
}
                                    

#28 JavaScript::Eval (size: 125, repeated: 1) - SHA256: 5c98b74547d41be39caf30b0d5520ecc8a4bbc3064811de92fd38072885672b5

                                        0, GW = function(Z, N, Q, k, R, f) {
    return B((C(k, R, (bZ(23, ((f = B(k, R), k.l) && f < k.P ? (C(k, R, k.P), iZ(R, N, k)) : C(k, R, N), k), Q, Z), f)), k), 166)
}
                                    

#29 JavaScript::Eval (size: 1, repeated: 1) - SHA256: 5c62e091b8c0565f1bafad0dad5934276143ae2ccef7a5381e8ada5b1a8d26d2

                                        P
                                    

#30 JavaScript::Eval (size: 1, repeated: 1) - SHA256: 594e519ae499312b29433b7dd8a97ff068defcba9755b6d5d00e84c524d67b06

                                        z
                                    

#31 JavaScript::Eval (size: 349, repeated: 1) - SHA256: 4d701fcf60cbaf31db3899f6991bc616f157f6b23ded0f40155beb89a953aba6

                                        0, SX = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x, c, M, A) {
    if (R = B(Z, 120), R >= Z.P) throw [Zo, 31];
    for (A = (l = Z.hh.length, V = 0, J = R, k); 0 < A;) f = J >> 3, x = J % 8, M = Z.l[f], n = 8 - (x | 0), b = n < A ? n : A, N && (p = Z, p.o != J >> 6 && (p.o = J >> 6, X = B(p, Q), p.Fz = nN(36, 64, 24, 1, p.Z, [0, 0, X[1], X[2]], p.o)), M ^= Z.Fz[f & l]), V |= (M >> 8 - (x | 0) - (b | 0) & (1 << b) - 1) << (A | 0) - (b | 0), J += b, A -= b;
    return C((c = V, Z), 120, (R | 0) + (k | 0)), c
}
                                    

#32 JavaScript::Eval (size: 6, repeated: 1) - SHA256: 44ff7b02c80d38b26dd6aa31d9470aed81b32e10331a3c994fb1a9945fd847ba

                                        window
                                    

#33 JavaScript::Eval (size: 148842, repeated: 1) - SHA256: b97b943e585b2da413c30810bbdd176401e2a7f79e6f211554fca48bc1f0df92

                                        window.MagicZoom = (function() {
    var B, q;
    B = q = (function() {
        var W = {
            version: "v3.3.6",
            UUID: 0,
            storage: {},
            $uuid: function(aa) {
                return (aa.$J_UUID || (aa.$J_UUID = ++Q.UUID))
            },
            getStorage: function(aa) {
                return (Q.storage[aa] || (Q.storage[aa] = {}))
            },
            $F: function() {},
            $false: function() {
                return false
            },
            $true: function() {
                return true
            },
            stylesId: "mjs-" + Math.floor(Math.random() * new Date().getTime()),
            defined: function(aa) {
                return (aa != null)
            },
            ifndef: function(ab, aa) {
                return (ab != null) ? ab : aa
            },
            exists: function(aa) {
                return !!(aa)
            },
            jTypeOf: function(ac) {
                var aa = 9007199254740991;

                function ab(ad) {
                    return typeof ad === "number" && ad > -1 && ad % 1 === 0 && ad <= aa
                }
                if (!Q.defined(ac)) {
                    return false
                }
                if (ac.$J_TYPE) {
                    return ac.$J_TYPE
                }
                if (!!ac.nodeType) {
                    if (ac.nodeType === 1) {
                        return "element"
                    }
                    if (ac.nodeType === 3) {
                        return "textnode"
                    }
                }
                if (ac === window) {
                    return "window"
                }
                if (ac === document) {
                    return "document"
                }
                if (ac instanceof window.Function) {
                    return "function"
                }
                if (ac instanceof window.String) {
                    return "string"
                }
                if (ac instanceof window.Array) {
                    return "array"
                }
                if (ac instanceof window.Date) {
                    return "date"
                }
                if (ac instanceof window.RegExp) {
                    return "regexp"
                }
                if (ab(ac.length) && ac.item) {
                    return "collection"
                }
                if (ab(ac.length) && ac.callee) {
                    return "arguments"
                }
                if ((ac instanceof window.Object || ac instanceof window.Function) && ac.constructor === Q.Class) {
                    return "class"
                }
                if (Q.browser.trident) {
                    if (Q.defined(ac.cancelBubble)) {
                        return "event"
                    }
                } else {
                    if (ac === window.event || ac.constructor === window.Event || ac.constructor === window.MouseEvent || ac.constructor === window.UIEvent || ac.constructor === window.KeyboardEvent || ac.constructor === window.KeyEvent) {
                        return "event"
                    }
                }
                return typeof(ac)
            },
            extend: function(af, ae) {
                if (!(af instanceof window.Array)) {
                    af = [af]
                }
                if (!ae) {
                    return af[0]
                }
                for (var ad = 0, ab = af.length; ad < ab; ad++) {
                    if (!Q.defined(af)) {
                        continue
                    }
                    for (var ac in ae) {
                        if (!Object.prototype.hasOwnProperty.call(ae, ac)) {
                            continue
                        }
                        try {
                            af[ad][ac] = ae[ac]
                        } catch (aa) {}
                    }
                }
                return af[0]
            },
            implement: function(ae, ad) {
                if (!(ae instanceof window.Array)) {
                    ae = [ae]
                }
                for (var ac = 0, aa = ae.length; ac < aa; ac++) {
                    if (!Q.defined(ae[ac])) {
                        continue
                    }
                    if (!ae[ac].prototype) {
                        continue
                    }
                    for (var ab in (ad || {})) {
                        if (!ae[ac].prototype[ab]) {
                            ae[ac].prototype[ab] = ad[ab]
                        }
                    }
                }
                return ae[0]
            },
            nativize: function(ac, ab) {
                if (!Q.defined(ac)) {
                    return ac
                }
                for (var aa in (ab || {})) {
                    if (!ac[aa]) {
                        ac[aa] = ab[aa]
                    }
                }
                return ac
            },
            $try: function() {
                for (var ab = 0, aa = arguments.length; ab < aa; ab++) {
                    try {
                        return arguments[ab]()
                    } catch (ac) {}
                }
                return null
            },
            $A: function(ac) {
                if (!Q.defined(ac)) {
                    return Q.$([])
                }
                if (ac.toArray) {
                    return Q.$(ac.toArray())
                }
                if (ac.item) {
                    var ab = ac.length || 0,
                        aa = new Array(ab);
                    while (ab--) {
                        aa[ab] = ac[ab]
                    }
                    return Q.$(aa)
                }
                return Q.$(Array.prototype.slice.call(ac))
            },
            now: function() {
                return new Date().getTime()
            },
            detach: function(ae) {
                var ac;
                switch (Q.jTypeOf(ae)) {
                    case "object":
                        ac = {};
                        for (var ad in ae) {
                            ac[ad] = Q.detach(ae[ad])
                        }
                        break;
                    case "array":
                        ac = [];
                        for (var ab = 0, aa = ae.length; ab < aa; ab++) {
                            ac[ab] = Q.detach(ae[ab])
                        }
                        break;
                    default:
                        return ae
                }
                return Q.$(ac)
            },
            $: function(ac) {
                var aa = true;
                if (!Q.defined(ac)) {
                    return null
                }
                if (ac.$J_EXT) {
                    return ac
                }
                switch (Q.jTypeOf(ac)) {
                    case "array":
                        ac = Q.nativize(ac, Q.extend(Q.Array, {
                            $J_EXT: Q.$F
                        }));
                        ac.jEach = ac.forEach;
                        ac.contains = Q.Array.contains;
                        return ac;
                        break;
                    case "string":
                        var ab = document.getElementById(ac);
                        if (Q.defined(ab)) {
                            return Q.$(ab)
                        }
                        return null;
                        break;
                    case "window":
                    case "document":
                        Q.$uuid(ac);
                        ac = Q.extend(ac, Q.Doc);
                        break;
                    case "element":
                        Q.$uuid(ac);
                        ac = Q.extend(ac, Q.Element);
                        break;
                    case "event":
                        ac = Q.extend(ac, Q.Event);
                        break;
                    case "textnode":
                    case "function":
                    case "date":
                    default:
                        aa = false;
                        break
                }
                if (aa) {
                    return Q.extend(ac, {
                        $J_EXT: Q.$F
                    })
                } else {
                    return ac
                }
            },
            $new: function(aa, ac, ab) {
                return Q.$(Q.doc.createElement(aa)).setProps(ac || {}).jSetCss(ab || {})
            },
            addCSS: function(ad, ae, ab) {
                var aa, ag, ac, ai = [],
                    ah = -1;
                ab || (ab = Q.stylesId);
                aa = Q.$(ab) || Q.$new("style", {
                    id: ab,
                    type: "text/css"
                }).jAppendTo((document.head || document.body), "top");
                ag = aa.sheet || aa.styleSheet;
                if (Q.jTypeOf(ae) !== "string") {
                    for (var ac in ae) {
                        ai.push(ac + ":" + ae[ac])
                    }
                    ae = ai.join(";")
                }
                if (ag.insertRule) {
                    ah = ag.insertRule(ad + " {" + ae + "}", ag.cssRules.length)
                } else {
                    try {
                        ah = ag.addRule(ad, ae, ag.rules.length)
                    } catch (af) {}
                }
                return ah
            },
            removeCSS: function(ad, aa) {
                var ac, ab;
                ac = Q.$(ad);
                if (Q.jTypeOf(ac) !== "element") {
                    return
                }
                ab = ac.sheet || ac.styleSheet;
                if (ab.deleteRule) {
                    ab.deleteRule(aa)
                } else {
                    if (ab.removeRule) {
                        ab.removeRule(aa)
                    }
                }
            },
            generateUUID: function() {
                return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(ac) {
                    var ab = Math.random() * 16 | 0,
                        aa = ac === "x" ? ab : (ab & 3 | 8);
                    return aa.toString(16)
                }).toUpperCase()
            },
            getAbsoluteURL: (function() {
                var aa;
                return function(ab) {
                    if (!aa) {
                        aa = document.createElement("a")
                    }
                    aa.setAttribute("href", ab);
                    return ("!!" + aa.href).replace("!!", "")
                }
            })(),
            getHashCode: function(ac) {
                var ad = 0,
                    aa = ac.length;
                for (var ab = 0; ab < aa; ++ab) {
                    ad = 31 * ad + ac.charCodeAt(ab);
                    ad %= 4294967296
                }
                return ad
            }
        };
        var Q = W;
        var R = W.$;
        if (!window.magicJS) {
            window.magicJS = W;
            window.$mjs = W.$
        }
        Q.Array = {
            $J_TYPE: "array",
            indexOf: function(ad, ae) {
                var aa = this.length;
                for (var ab = this.length, ac = (ae < 0) ? Math.max(0, ab + ae) : ae || 0; ac < ab; ac++) {
                    if (this[ac] === ad) {
                        return ac
                    }
                }
                return -1
            },
            contains: function(aa, ab) {
                return this.indexOf(aa, ab) != -1
            },
            forEach: function(aa, ad) {
                for (var ac = 0, ab = this.length; ac < ab; ac++) {
                    if (ac in this) {
                        aa.call(ad, this[ac], ac, this)
                    }
                }
            },
            filter: function(aa, af) {
                var ae = [];
                for (var ad = 0, ab = this.length; ad < ab; ad++) {
                    if (ad in this) {
                        var ac = this[ad];
                        if (aa.call(af, this[ad], ad, this)) {
                            ae.push(ac)
                        }
                    }
                }
                return ae
            },
            map: function(aa, ae) {
                var ad = [];
                for (var ac = 0, ab = this.length; ac < ab; ac++) {
                    if (ac in this) {
                        ad[ac] = aa.call(ae, this[ac], ac, this)
                    }
                }
                return ad
            }
        };
        Q.implement(String, {
            $J_TYPE: "string",
            jTrim: function() {
                return this.replace(/^\s+|\s+$/g, "")
            },
            eq: function(aa, ab) {
                return (ab || false) ? (this.toString() === aa.toString()) : (this.toLowerCase().toString() === aa.toLowerCase().toString())
            },
            jCamelize: function() {
                return this.replace(/-\D/g, function(aa) {
                    return aa.charAt(1).toUpperCase()
                })
            },
            dashize: function() {
                return this.replace(/[A-Z]/g, function(aa) {
                    return ("-" + aa.charAt(0).toLowerCase())
                })
            },
            jToInt: function(aa) {
                return parseInt(this, aa || 10)
            },
            toFloat: function() {
                return parseFloat(this)
            },
            jToBool: function() {
                return !this.replace(/true/i, "").jTrim()
            },
            has: function(ab, aa) {
                aa = aa || "";
                return (aa + this + aa).indexOf(aa + ab + aa) > -1
            }
        });
        W.implement(Function, {
            $J_TYPE: "function",
            jBind: function() {
                var ab = Q.$A(arguments),
                    aa = this,
                    ac = ab.shift();
                return function() {
                    return aa.apply(ac || null, ab.concat(Q.$A(arguments)))
                }
            },
            jBindAsEvent: function() {
                var ab = Q.$A(arguments),
                    aa = this,
                    ac = ab.shift();
                return function(ad) {
                    return aa.apply(ac || null, Q.$([ad || (Q.browser.ieMode ? window.event : null)]).concat(ab))
                }
            },
            jDelay: function() {
                var ab = Q.$A(arguments),
                    aa = this,
                    ac = ab.shift();
                return window.setTimeout(function() {
                    return aa.apply(aa, ab)
                }, ac || 0)
            },
            jDefer: function() {
                var ab = Q.$A(arguments),
                    aa = this;
                return function() {
                    return aa.jDelay.apply(aa, ab)
                }
            },
            interval: function() {
                var ab = Q.$A(arguments),
                    aa = this,
                    ac = ab.shift();
                return window.setInterval(function() {
                    return aa.apply(aa, ab)
                }, ac || 0)
            }
        });
        var X = {};
        var P = navigator.userAgent.toLowerCase();
        var O = P.match(/(webkit|gecko|trident|presto)\/(\d+\.?\d*)/i);
        var T = P.match(/(edge|opr)\/(\d+\.?\d*)/i) || P.match(/(crios|chrome|safari|firefox|opera|opr)\/(\d+\.?\d*)/i);
        var V = P.match(/version\/(\d+\.?\d*)/i);
        var K = document.documentElement.style;

        function L(ab) {
            var aa = ab.charAt(0).toUpperCase() + ab.slice(1);
            return ab in K || ("Webkit" + aa) in K || ("Moz" + aa) in K || ("ms" + aa) in K || ("O" + aa) in K
        }
        Q.browser = {
            features: {
                xpath: !!(document.evaluate),
                air: !!(window.runtime),
                query: !!(document.querySelector),
                fullScreen: !!(document.fullscreenEnabled || document.msFullscreenEnabled || document.exitFullscreen || document.cancelFullScreen || document.webkitexitFullscreen || document.webkitCancelFullScreen || document.mozCancelFullScreen || document.oCancelFullScreen || document.msCancelFullScreen),
                xhr2: !!(window.ProgressEvent) && !!(window.FormData) && (window.XMLHttpRequest && "withCredentials" in new XMLHttpRequest),
                transition: L("transition"),
                transform: L("transform"),
                perspective: L("perspective"),
                animation: L("animation"),
                requestAnimationFrame: false,
                multibackground: false,
                cssFilters: false,
                canvas: false,
                svg: (function() {
                    return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image", "1.1")
                }())
            },
            touchScreen: (function() {
                return "ontouchstart" in window || (window.DocumentTouch && document instanceof DocumentTouch) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)
            }()),
            mobile: !!P.match(/(android|bb\d+|meego).+|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/),
            engine: (O && O[1]) ? O[1].toLowerCase() : (window.opera) ? "presto" : !!(window.ActiveXObject) ? "trident" : (document.getBoxObjectFor !== undefined || window.mozInnerScreenY !== null) ? "gecko" : (window.WebKitPoint !== null || !navigator.taintEnabled) ? "webkit" : "unknown",
            version: (O && O[2]) ? parseFloat(O[2]) : 0,
            uaName: (T && T[1]) ? T[1].toLowerCase() : "",
            uaVersion: (T && T[2]) ? parseFloat(T[2]) : 0,
            cssPrefix: "",
            cssDomPrefix: "",
            domPrefix: "",
            ieMode: 0,
            platform: P.match(/ip(?:ad|od|hone)/) ? "ios" : (P.match(/(?:webos|android)/) || navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(),
            backCompat: document.compatMode && document.compatMode.toLowerCase() === "backcompat",
            scrollbarsWidth: 0,
            getDoc: function() {
                return (document.compatMode && document.compatMode.toLowerCase() === "backcompat") ? document.body : document.documentElement
            },
            requestAnimationFrame: window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || undefined,
            cancelAnimationFrame: window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || undefined,
            ready: false,
            onready: function() {
                if (Q.browser.ready) {
                    return
                }
                var ad;
                var ac;
                Q.browser.ready = true;
                Q.body = Q.$(document.body);
                Q.win = Q.$(window);
                try {
                    var ab = Q.$new("div").jSetCss({
                        width: 100,
                        height: 100,
                        overflow: "scroll",
                        position: "absolute",
                        top: -9999
                    }).jAppendTo(document.body);
                    Q.browser.scrollbarsWidth = ab.offsetWidth - ab.clientWidth;
                    ab.jRemove()
                } catch (aa) {}
                try {
                    ad = Q.$new("div");
                    ac = ad.style;
                    ac.cssText = "background:url(https://),url(https://),red url(https://)";
                    Q.browser.features.multibackground = (/(url\s*\(.*?){3}/).test(ac.background);
                    ac = null;
                    ad = null
                } catch (aa) {}
                if (!Q.browser.cssTransformProp) {
                    Q.browser.cssTransformProp = Q.normalizeCSS("transform").dashize()
                }
                try {
                    ad = Q.$new("div");
                    ad.style.cssText = Q.normalizeCSS("filter").dashize() + ":blur(2px);";
                    Q.browser.features.cssFilters = !!ad.style.length && (!Q.browser.ieMode || Q.browser.ieMode > 9);
                    ad = null
                } catch (aa) {}
                if (!Q.browser.features.cssFilters) {
                    Q.$(document.documentElement).jAddClass("no-cssfilters-magic")
                }
                try {
                    Q.browser.features.canvas = (function() {
                        var ae = Q.$new("canvas");
                        return !!(ae.getContext && ae.getContext("2d"))
                    }())
                } catch (aa) {}
                if (window.TransitionEvent === undefined && window.WebKitTransitionEvent !== undefined) {
                    X.transitionend = "webkitTransitionEnd"
                }
                Q.Doc.jCallEvent.call(Q.$(document), "domready")
            }
        };
        (function() {
            var ab = [],
                ae, ad, af;

            function aa() {
                return !!(arguments.callee.caller)
            }
            switch (Q.browser.engine) {
                case "trident":
                    if (!Q.browser.version) {
                        Q.browser.version = !!(window.XMLHttpRequest) ? 3 : 2
                    }
                    break;
                case "gecko":
                    Q.browser.version = (T && T[2]) ? parseFloat(T[2]) : 0;
                    break
            }
            Q.browser[Q.browser.engine] = true;
            if (T && T[1] === "crios") {
                Q.browser.uaName = "chrome"
            }
            if (!!window.chrome) {
                Q.browser.chrome = true
            }
            if (T && T[1] === "opr") {
                Q.browser.uaName = "opera";
                Q.browser.opera = true
            }
            if (Q.browser.uaName === "safari" && (V && V[1])) {
                Q.browser.uaVersion = parseFloat(V[1])
            }
            if (Q.browser.platform === "android" && Q.browser.webkit && (V && V[1])) {
                Q.browser.androidBrowser = true
            }
            ae = ({
                gecko: ["-moz-", "Moz", "moz"],
                webkit: ["-webkit-", "Webkit", "webkit"],
                trident: ["-ms-", "ms", "ms"],
                presto: ["-o-", "O", "o"]
            })[Q.browser.engine] || ["", "", ""];
            Q.browser.cssPrefix = ae[0];
            Q.browser.cssDomPrefix = ae[1];
            Q.browser.domPrefix = ae[2];
            Q.browser.ieMode = !Q.browser.trident ? undefined : (document.documentMode) ? document.documentMode : (function() {
                var ag = 0;
                if (Q.browser.backCompat) {
                    return 5
                }
                switch (Q.browser.version) {
                    case 2:
                        ag = 6;
                        break;
                    case 3:
                        ag = 7;
                        break
                }
                return ag
            }());
            if (!Q.browser.mobile && Q.browser.platform === "mac" && Q.browser.touchScreen) {
                Q.browser.mobile = true;
                Q.browser.platform = "ios"
            }
            ab.push(Q.browser.platform + "-magic");
            if (Q.browser.mobile) {
                ab.push("mobile-magic")
            }
            if (Q.browser.androidBrowser) {
                ab.push("android-browser-magic")
            }
            if (Q.browser.ieMode) {
                Q.browser.uaName = "ie";
                Q.browser.uaVersion = Q.browser.ieMode;
                ab.push("ie" + Q.browser.ieMode + "-magic");
                for (ad = 11; ad > Q.browser.ieMode; ad--) {
                    ab.push("lt-ie" + ad + "-magic")
                }
            }
            if (Q.browser.webkit && Q.browser.version < 536) {
                Q.browser.features.fullScreen = false
            }
            if (Q.browser.requestAnimationFrame) {
                Q.browser.requestAnimationFrame.call(window, function() {
                    Q.browser.features.requestAnimationFrame = true
                })
            }
            if (Q.browser.features.svg) {
                ab.push("svg-magic")
            } else {
                ab.push("no-svg-magic")
            }
            af = (document.documentElement.className || "").match(/\S+/g) || [];
            document.documentElement.className = Q.$(af).concat(ab).join(" ");
            try {
                document.documentElement.setAttribute("data-magic-ua", Q.browser.uaName);
                document.documentElement.setAttribute("data-magic-ua-ver", Q.browser.uaVersion);
                document.documentElement.setAttribute("data-magic-engine", Q.browser.engine);
                document.documentElement.setAttribute("data-magic-engine-ver", Q.browser.version)
            } catch (ac) {}
            if (Q.browser.ieMode && Q.browser.ieMode < 9) {
                document.createElement("figure");
                document.createElement("figcaption")
            }
            if (!window.navigator.pointerEnabled) {
                Q.$(["Down", "Up", "Move", "Over", "Out"]).jEach(function(ag) {
                    X["pointer" + ag.toLowerCase()] = window.navigator.msPointerEnabled ? "MSPointer" + ag : -1
                })
            }
        }());
        (function() {
            Q.browser.fullScreen = {
                capable: Q.browser.features.fullScreen,
                enabled: function() {
                    return !!(document.fullscreenElement || document[Q.browser.domPrefix + "FullscreenElement"] || document.fullScreen || document.webkitIsFullScreen || document[Q.browser.domPrefix + "FullScreen"])
                },
                request: function(aa, ab) {
                    if (!ab) {
                        ab = {}
                    }
                    if (this.capable) {
                        Q.$(document).jAddEvent(this.changeEventName, this.onchange = function(ac) {
                            if (this.enabled()) {
                                if (ab.onEnter) {
                                    ab.onEnter()
                                }
                            } else {
                                Q.$(document).jRemoveEvent(this.changeEventName, this.onchange);
                                if (ab.onExit) {
                                    ab.onExit()
                                }
                            }
                        }.jBindAsEvent(this));
                        Q.$(document).jAddEvent(this.errorEventName, this.onerror = function(ac) {
                            if (ab.fallback) {
                                ab.fallback()
                            }
                            Q.$(document).jRemoveEvent(this.errorEventName, this.onerror)
                        }.jBindAsEvent(this));
                        (aa.requestFullscreen || aa[Q.browser.domPrefix + "RequestFullscreen"] || aa[Q.browser.domPrefix + "RequestFullScreen"] || function() {}).call(aa)
                    } else {
                        if (ab.fallback) {
                            ab.fallback()
                        }
                    }
                },
                cancel: (document.exitFullscreen || document.cancelFullScreen || document[Q.browser.domPrefix + "ExitFullscreen"] || document[Q.browser.domPrefix + "CancelFullScreen"] || function() {}).jBind(document),
                changeEventName: document.msExitFullscreen ? "MSFullscreenChange" : (document.exitFullscreen ? "" : Q.browser.domPrefix) + "fullscreenchange",
                errorEventName: document.msExitFullscreen ? "MSFullscreenError" : (document.exitFullscreen ? "" : Q.browser.domPrefix) + "fullscreenerror",
                prefix: Q.browser.domPrefix,
                activeElement: null
            }
        }());
        var Z = /\S+/g,
            N = /^(border(Top|Bottom|Left|Right)Width)|((padding|margin)(Top|Bottom|Left|Right))$/,
            S = {
                "float": ("undefined" === typeof(K.styleFloat)) ? "cssFloat" : "styleFloat"
            },
            U = {
                fontWeight: true,
                lineHeight: true,
                opacity: true,
                zIndex: true,
                zoom: true
            },
            M = (window.getComputedStyle) ? function(ac, aa) {
                var ab = window.getComputedStyle(ac, null);
                return ab ? ab.getPropertyValue(aa) || ab[aa] : null
            } : function(ad, ab) {
                var ac = ad.currentStyle,
                    aa = null;
                aa = ac ? ac[ab] : null;
                if (null == aa && ad.style && ad.style[ab]) {
                    aa = ad.style[ab]
                }
                return aa
            };

        function Y(ac) {
            var aa, ab;
            ab = (Q.browser.webkit && "filter" == ac) ? false : (ac in K);
            if (!ab) {
                aa = Q.browser.cssDomPrefix + ac.charAt(0).toUpperCase() + ac.slice(1);
                if (aa in K) {
                    return aa
                }
            }
            return ac
        }
        Q.normalizeCSS = Y;
        Q.Element = {
            jHasClass: function(aa) {
                return !(aa || "").has(" ") && (this.className || "").has(aa, " ")
            },
            jAddClass: function(ae) {
                var ab = (this.className || "").match(Z) || [],
                    ad = (ae || "").match(Z) || [],
                    aa = ad.length,
                    ac = 0;
                for (; ac < aa; ac++) {
                    if (!Q.$(ab).contains(ad[ac])) {
                        ab.push(ad[ac])
                    }
                }
                this.className = ab.join(" ");
                return this
            },
            jRemoveClass: function(af) {
                var ab = (this.className || "").match(Z) || [],
                    ae = (af || "").match(Z) || [],
                    aa = ae.length,
                    ad = 0,
                    ac;
                for (; ad < aa; ad++) {
                    if ((ac = Q.$(ab).indexOf(ae[ad])) > -1) {
                        ab.splice(ac, 1)
                    }
                }
                this.className = af ? ab.join(" ") : "";
                return this
            },
            jToggleClass: function(aa) {
                return this.jHasClass(aa) ? this.jRemoveClass(aa) : this.jAddClass(aa)
            },
            jGetCss: function(ab) {
                var ac = ab.jCamelize(),
                    aa = null;
                ab = S[ac] || (S[ac] = Y(ac));
                aa = M(this, ab);
                if ("auto" === aa) {
                    aa = null
                }
                if (null !== aa) {
                    if ("opacity" == ab) {
                        return Q.defined(aa) ? parseFloat(aa) : 1
                    }
                    if (N.test(ab)) {
                        aa = parseInt(aa, 10) ? aa : "0px"
                    }
                }
                return aa
            },
            jSetCssProp: function(ab, aa) {
                var ad = ab.jCamelize();
                try {
                    if ("opacity" == ab) {
                        this.jSetOpacity(aa);
                        return this
                    }
                    ab = S[ad] || (S[ad] = Y(ad));
                    this.style[ab] = aa + (("number" == Q.jTypeOf(aa) && !U[ad]) ? "px" : "")
                } catch (ac) {}
                return this
            },
            jSetCss: function(ab) {
                for (var aa in ab) {
                    this.jSetCssProp(aa, ab[aa])
                }
                return this
            },
            jGetStyles: function() {
                var aa = {};
                Q.$A(arguments).jEach(function(ab) {
                    aa[ab] = this.jGetCss(ab)
                }, this);
                return aa
            },
            jSetOpacity: function(ac, aa) {
                var ab;
                aa = aa || false;
                this.style.opacity = ac;
                ac = parseInt(parseFloat(ac) * 100);
                if (aa) {
                    if (0 === ac) {
                        if ("hidden" != this.style.visibility) {
                            this.style.visibility = "hidden"
                        }
                    } else {
                        if ("visible" != this.style.visibility) {
                            this.style.visibility = "visible"
                        }
                    }
                }
                if (Q.browser.ieMode && Q.browser.ieMode < 9) {
                    if (!isNaN(ac)) {
                        if (!~this.style.filter.indexOf("Alpha")) {
                            this.style.filter += " progid:DXImageTransform.Microsoft.Alpha(Opacity=" + ac + ")"
                        } else {
                            this.style.filter = this.style.filter.replace(/Opacity=\d*/i, "Opacity=" + ac)
                        }
                    } else {
                        this.style.filter = this.style.filter.replace(/progid:DXImageTransform.Microsoft.Alpha\(Opacity=\d*\)/i, "").jTrim();
                        if ("" === this.style.filter) {
                            this.style.removeAttribute("filter")
                        }
                    }
                }
                return this
            },
            setProps: function(aa) {
                for (var ab in aa) {
                    if ("class" === ab) {
                        this.jAddClass("" + aa[ab])
                    } else {
                        this.setAttribute(ab, "" + aa[ab])
                    }
                }
                return this
            },
            jGetTransitionDuration: function() {
                var ab = 0,
                    aa = 0;
                ab = this.jGetCss("transition-duration");
                aa = this.jGetCss("transition-delay");
                ab = ab.indexOf("ms") > -1 ? parseFloat(ab) : ab.indexOf("s") > -1 ? parseFloat(ab) * 1000 : 0;
                aa = aa.indexOf("ms") > -1 ? parseFloat(aa) : aa.indexOf("s") > -1 ? parseFloat(aa) * 1000 : 0;
                return ab + aa
            },
            hide: function() {
                return this.jSetCss({
                    display: "none",
                    visibility: "hidden"
                })
            },
            show: function() {
                return this.jSetCss({
                    display: "",
                    visibility: "visible"
                })
            },
            jGetSize: function() {
                return {
                    width: this.offsetWidth,
                    height: this.offsetHeight
                }
            },
            getInnerSize: function(ab) {
                var aa = this.jGetSize();
                aa.width -= (parseFloat(this.jGetCss("border-left-width") || 0) + parseFloat(this.jGetCss("border-right-width") || 0));
                aa.height -= (parseFloat(this.jGetCss("border-top-width") || 0) + parseFloat(this.jGetCss("border-bottom-width") || 0));
                if (!ab) {
                    aa.width -= (parseFloat(this.jGetCss("padding-left") || 0) + parseFloat(this.jGetCss("padding-right") || 0));
                    aa.height -= (parseFloat(this.jGetCss("padding-top") || 0) + parseFloat(this.jGetCss("padding-bottom") || 0))
                }
                return aa
            },
            jGetScroll: function() {
                return {
                    top: this.scrollTop,
                    left: this.scrollLeft
                }
            },
            jGetFullScroll: function() {
                var aa = this,
                    ab = {
                        top: 0,
                        left: 0
                    };
                do {
                    ab.left += aa.scrollLeft || 0;
                    ab.top += aa.scrollTop || 0;
                    aa = aa.parentNode
                } while (aa);
                return ab
            },
            jGetPosition: function() {
                var ae = this,
                    ab = 0,
                    ad = 0;
                if (Q.defined(document.documentElement.getBoundingClientRect)) {
                    var aa = this.getBoundingClientRect(),
                        ac = Q.$(document).jGetScroll(),
                        af = Q.browser.getDoc();
                    return {
                        top: aa.top + ac.y - af.clientTop,
                        left: aa.left + ac.x - af.clientLeft
                    }
                }
                do {
                    ab += ae.offsetLeft || 0;
                    ad += ae.offsetTop || 0;
                    ae = ae.offsetParent
                } while (ae && !(/^(?:body|html)$/i).test(ae.tagName));
                return {
                    top: ad,
                    left: ab
                }
            },
            jGetOffset: function() {
                var aa = this;
                var ac = 0;
                var ab = 0;
                do {
                    ac += aa.offsetLeft || 0;
                    ab += aa.offsetTop || 0;
                    aa = aa.offsetParent
                } while (aa && !(/^(?:body|html)$/i).test(aa.tagName));
                return {
                    top: ab,
                    left: ac
                }
            },
            jGetRect: function() {
                var ab = this.jGetPosition();
                var aa = this.jGetSize();
                return {
                    top: ab.top,
                    bottom: ab.top + aa.height,
                    left: ab.left,
                    right: ab.left + aa.width
                }
            },
            changeContent: function(ab) {
                try {
                    this.innerHTML = ab
                } catch (aa) {
                    this.innerText = ab
                }
                return this
            },
            jRemove: function() {
                return (this.parentNode) ? this.parentNode.removeChild(this) : this
            },
            kill: function() {
                Q.$A(this.childNodes).jEach(function(aa) {
                    if (3 == aa.nodeType || 8 == aa.nodeType) {
                        return
                    }
                    Q.$(aa).kill()
                });
                this.jRemove();
                this.jClearEvents();
                if (this.$J_UUID) {
                    Q.storage[this.$J_UUID] = null;
                    delete Q.storage[this.$J_UUID]
                }
                return null
            },
            append: function(ac, ab) {
                ab = ab || "bottom";
                var aa = this.firstChild;
                ("top" == ab && aa) ? this.insertBefore(ac, aa): this.appendChild(ac);
                return this
            },
            jAppendTo: function(ac, ab) {
                var aa = Q.$(ac).append(this, ab);
                return this
            },
            enclose: function(aa) {
                this.append(aa.parentNode.replaceChild(this, aa));
                return this
            },
            hasChild: function(aa) {
                if ("element" !== Q.jTypeOf("string" == Q.jTypeOf(aa) ? aa = document.getElementById(aa) : aa)) {
                    return false
                }
                return (this == aa) ? false : (this.contains && !(Q.browser.webkit419)) ? (this.contains(aa)) : (this.compareDocumentPosition) ? !!(this.compareDocumentPosition(aa) & 16) : Q.$A(this.byTag(aa.tagName)).contains(aa)
            }
        };
        Q.Element.jGetStyle = Q.Element.jGetCss;
        Q.Element.jSetStyle = Q.Element.jSetCss;
        if (!window.Element) {
            window.Element = Q.$F;
            if (Q.browser.engine.webkit) {
                window.document.createElement("iframe")
            }
            window.Element.prototype = (Q.browser.engine.webkit) ? window["[[DOMElement.prototype]]"] : {}
        }
        Q.implement(window.Element, {
            $J_TYPE: "element"
        });
        Q.Doc = {
            jGetSize: function() {
                if (Q.browser.touchScreen || Q.browser.presto925 || Q.browser.webkit419) {
                    return {
                        width: window.innerWidth,
                        height: window.innerHeight
                    }
                }
                return {
                    width: Q.browser.getDoc().clientWidth,
                    height: Q.browser.getDoc().clientHeight
                }
            },
            jGetScroll: function() {
                return {
                    x: window.pageXOffset || Q.browser.getDoc().scrollLeft,
                    y: window.pageYOffset || Q.browser.getDoc().scrollTop
                }
            },
            jGetFullSize: function() {
                var aa = this.jGetSize();
                return {
                    width: Math.max(Q.browser.getDoc().scrollWidth, aa.width),
                    height: Math.max(Q.browser.getDoc().scrollHeight, aa.height)
                }
            }
        };
        Q.extend(document, {
            $J_TYPE: "document"
        });
        Q.extend(window, {
            $J_TYPE: "window"
        });
        Q.extend([Q.Element, Q.Doc], {
            jFetch: function(ad, ab) {
                var aa = Q.getStorage(this.$J_UUID),
                    ac = aa[ad];
                if (undefined !== ab && undefined === ac) {
                    ac = aa[ad] = ab
                }
                return (Q.defined(ac) ? ac : null)
            },
            jStore: function(ac, ab) {
                var aa = Q.getStorage(this.$J_UUID);
                aa[ac] = ab;
                return this
            },
            jDel: function(ab) {
                var aa = Q.getStorage(this.$J_UUID);
                delete aa[ab];
                return this
            }
        });
        if (!(window.HTMLElement && window.HTMLElement.prototype && window.HTMLElement.prototype.getElementsByClassName)) {
            Q.extend([Q.Element, Q.Doc], {
                getElementsByClassName: function(aa) {
                    return Q.$A(this.getElementsByTagName("*")).filter(function(ac) {
                        try {
                            return (1 == ac.nodeType && ac.className.has(aa, " "))
                        } catch (ab) {}
                    })
                }
            })
        }
        Q.extend([Q.Element, Q.Doc], {
            byClass: function() {
                return this.getElementsByClassName(arguments[0])
            },
            byTag: function() {
                return this.getElementsByTagName(arguments[0])
            }
        });
        if (Q.browser.fullScreen.capable && !document.requestFullScreen) {
            Q.Element.requestFullScreen = function() {
                Q.browser.fullScreen.request(this)
            }
        }
        Q.Event = {
            $J_TYPE: "event",
            isQueueStopped: Q.$false,
            stop: function() {
                return this.stopDistribution().stopDefaults()
            },
            stopDistribution: function() {
                if (this.stopPropagation) {
                    this.stopPropagation()
                } else {
                    this.cancelBubble = true
                }
                return this
            },
            stopDefaults: function() {
                if (this.preventDefault) {
                    this.preventDefault()
                } else {
                    this.returnValue = false
                }
                return this
            },
            stopQueue: function() {
                this.isQueueStopped = Q.$true;
                return this
            },
            getClientXY: function() {
                var aa = (/touch/i).test(this.type) ? this.changedTouches[0] : this;
                return !Q.defined(aa) ? {
                    x: 0,
                    y: 0
                } : {
                    x: aa.clientX,
                    y: aa.clientY
                }
            },
            jGetPageXY: function() {
                var aa = (/touch/i).test(this.type) ? this.changedTouches[0] : this;
                return !Q.defined(aa) ? {
                    x: 0,
                    y: 0
                } : {
                    x: aa.pageX || aa.clientX + Q.browser.getDoc().scrollLeft,
                    y: aa.pageY || aa.clientY + Q.browser.getDoc().scrollTop
                }
            },
            getTarget: function() {
                var aa = this.target || this.srcElement;
                while (aa && aa.nodeType === 3) {
                    aa = aa.parentNode
                }
                return aa
            },
            getRelated: function() {
                var ab = null;
                switch (this.type) {
                    case "mouseover":
                    case "pointerover":
                    case "MSPointerOver":
                        ab = this.relatedTarget || this.fromElement;
                        break;
                    case "mouseout":
                    case "pointerout":
                    case "MSPointerOut":
                        ab = this.relatedTarget || this.toElement;
                        break;
                    default:
                        return ab
                }
                try {
                    while (ab && ab.nodeType === 3) {
                        ab = ab.parentNode
                    }
                } catch (aa) {
                    ab = null
                }
                return ab
            },
            getButton: function() {
                if (!this.which && this.button !== undefined) {
                    return (this.button & 1 ? 1 : (this.button & 2 ? 3 : (this.button & 4 ? 2 : 0)))
                }
                return this.which
            },
            isTouchEvent: function() {
                return (this.pointerType && (this.pointerType === "touch" || this.pointerType === this.MSPOINTER_TYPE_TOUCH)) || (/touch/i).test(this.type)
            },
            isPrimaryTouch: function() {
                if (this.pointerType) {
                    return (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) && this.isPrimary
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches.length === 1 && (this.targetTouches.length ? this.targetTouches.length === 1 && this.targetTouches[0].identifier === this.changedTouches[0].identifier : true)
                    }
                }
                return false
            },
            getPrimaryTouch: function() {
                if (this.pointerType) {
                    return this.isPrimary && (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) ? this : null
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches[0]
                    }
                }
                return null
            },
            getPrimaryTouchId: function() {
                if (this.pointerType) {
                    return this.isPrimary && (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) ? this.pointerId : null
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches[0].identifier
                    }
                }
                return null
            }
        };
        Q._event_add_ = "addEventListener";
        Q._event_del_ = "removeEventListener";
        Q._event_prefix_ = "";
        if (!document.addEventListener) {
            Q._event_add_ = "attachEvent";
            Q._event_del_ = "detachEvent";
            Q._event_prefix_ = "on"
        }
        Q.Event.Custom = {
            type: "",
            x: null,
            y: null,
            timeStamp: null,
            button: null,
            target: null,
            relatedTarget: null,
            $J_TYPE: "event.custom",
            isQueueStopped: Q.$false,
            events: Q.$([]),
            pushToEvents: function(aa) {
                var ab = aa;
                this.events.push(ab)
            },
            stop: function() {
                return this.stopDistribution().stopDefaults()
            },
            stopDistribution: function() {
                this.events.jEach(function(ab) {
                    try {
                        ab.stopDistribution()
                    } catch (aa) {}
                });
                return this
            },
            stopDefaults: function() {
                this.events.jEach(function(ab) {
                    try {
                        ab.stopDefaults()
                    } catch (aa) {}
                });
                return this
            },
            stopQueue: function() {
                this.isQueueStopped = Q.$true;
                return this
            },
            getClientXY: function() {
                return {
                    x: this.clientX,
                    y: this.clientY
                }
            },
            jGetPageXY: function() {
                return {
                    x: this.x,
                    y: this.y
                }
            },
            getTarget: function() {
                return this.target
            },
            getRelated: function() {
                return this.relatedTarget
            },
            getButton: function() {
                return this.button
            },
            getOriginalTarget: function() {
                return this.events.length > 0 ? this.events[0].getTarget() : undefined
            },
            isTouchEvent: function() {
                return (this.pointerType && (this.pointerType === "touch" || this.pointerType === this.MSPOINTER_TYPE_TOUCH)) || (/touch/i).test(this.type)
            },
            isPrimaryTouch: function() {
                if (this.pointerType) {
                    return (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) && this.isPrimary
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches.length === 1 && (this.targetTouches.length ? this.targetTouches[0].identifier === this.changedTouches[0].identifier : true)
                    }
                }
                return false
            },
            getPrimaryTouch: function() {
                if (this.pointerType) {
                    return this.isPrimary && (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) ? this : null
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches[0]
                    }
                }
                return null
            },
            getPrimaryTouchId: function() {
                if (this.pointerType) {
                    return this.isPrimary && (this.pointerType === "touch" || this.MSPOINTER_TYPE_TOUCH === this.pointerType) ? this.pointerId : null
                } else {
                    if (this instanceof window.TouchEvent) {
                        return this.changedTouches[0].identifier
                    }
                }
                return null
            }
        };
        Q.extend([Q.Element, Q.Doc], {
            jAddEvent: function(ac, ae, af, ai) {
                var ah, aa, ad, ag, ab;
                if (Q.jTypeOf(ac) === "string") {
                    ab = ac.split(" ");
                    if (ab.length > 1) {
                        ac = ab
                    }
                }
                if (Q.jTypeOf(ac) === "array") {
                    Q.$(ac).jEach(this.jAddEvent.jBindAsEvent(this, ae, af, ai));
                    return this
                }
                ac = X[ac] || ac;
                if (!ac || !ae || Q.jTypeOf(ac) !== "string" || Q.jTypeOf(ae) !== "function") {
                    return this
                }
                if (ac === "domready" && Q.browser.ready) {
                    ae.call(this);
                    return this
                }
                af = parseInt(af || 50, 10);
                if (!ae.$J_EUID) {
                    ae.$J_EUID = Math.floor(Math.random() * Q.now())
                }
                ah = Q.Doc.jFetch.call(this, "_EVENTS_", {});
                aa = ah[ac];
                if (!aa) {
                    ah[ac] = aa = Q.$([]);
                    ad = this;
                    if (Q.Event.Custom[ac]) {
                        Q.Event.Custom[ac].handler.add.call(this, ai)
                    } else {
                        aa.handle = function(aj) {
                            aj = Q.extend(aj || window.e, {
                                $J_TYPE: "event"
                            });
                            Q.Doc.jCallEvent.call(ad, ac, Q.$(aj))
                        };
                        this[Q._event_add_](Q._event_prefix_ + ac, aa.handle, false)
                    }
                }
                ag = {
                    type: ac,
                    fn: ae,
                    priority: af,
                    euid: ae.$J_EUID
                };
                aa.push(ag);
                aa.sort(function(ak, aj) {
                    return ak.priority - aj.priority
                });
                return this
            },
            jRemoveEvent: function(ag) {
                var ae = Q.Doc.jFetch.call(this, "_EVENTS_", {});
                var ac;
                var aa;
                var ab;
                var ah;
                var af;
                var ad;
                af = arguments.length > 1 ? arguments[1] : -100;
                if (Q.jTypeOf(ag) === "string") {
                    ad = ag.split(" ");
                    if (ad.length > 1) {
                        ag = ad
                    }
                }
                if (Q.jTypeOf(ag) === "array") {
                    Q.$(ag).jEach(this.jRemoveEvent.jBindAsEvent(this, af));
                    return this
                }
                ag = X[ag] || ag;
                if (!ag || Q.jTypeOf(ag) !== "string" || !ae || !ae[ag]) {
                    return this
                }
                ac = ae[ag] || [];
                for (ab = 0; ab < ac.length; ab++) {
                    aa = ac[ab];
                    if (af === -100 || !!af && af.$J_EUID === aa.euid) {
                        ah = ac.splice(ab--, 1)
                    }
                }
                if (ac.length === 0) {
                    if (Q.Event.Custom[ag]) {
                        Q.Event.Custom[ag].handler.jRemove.call(this)
                    } else {
                        this[Q._event_del_](Q._event_prefix_ + ag, ac.handle, false)
                    }
                    delete ae[ag]
                }
                return this
            },
            jCallEvent: function(ad, af) {
                var ac = Q.Doc.jFetch.call(this, "_EVENTS_", {});
                var ab;
                var aa;
                ad = X[ad] || ad;
                if (!ad || Q.jTypeOf(ad) !== "string" || !ac || !ac[ad]) {
                    return this
                }
                try {
                    af = Q.extend(af || {}, {
                        type: ad
                    })
                } catch (ae) {}
                if (af.timeStamp === undefined) {
                    af.timeStamp = Q.now()
                }
                ab = ac[ad] || [];
                for (aa = 0; aa < ab.length && !(af.isQueueStopped && af.isQueueStopped()); aa++) {
                    ab[aa].fn.call(this, af)
                }
            },
            jRaiseEvent: function(ab, aa) {
                var ae = (ab !== "domready");
                var ad = this;
                var ac;
                ab = X[ab] || ab;
                if (!ae) {
                    Q.Doc.jCallEvent.call(this, ab);
                    return this
                }
                if (ad === document && document.createEvent && !ad.dispatchEvent) {
                    ad = document.documentElement
                }
                if (document.createEvent) {
                    ac = document.createEvent(ab);
                    ac.initEvent(aa, true, true)
                } else {
                    ac = document.createEventObject();
                    ac.eventType = ab
                }
                if (document.createEvent) {
                    ad.dispatchEvent(ac)
                } else {
                    ad.fireEvent("on" + aa, ac)
                }
                return ac
            },
            jClearEvents: function() {
                var ab = Q.Doc.jFetch.call(this, "_EVENTS_");
                if (!ab) {
                    return this
                }
                for (var aa in ab) {
                    Q.Doc.jRemoveEvent.call(this, aa)
                }
                Q.Doc.jDel.call(this, "_EVENTS_");
                return this
            }
        });
        (function(aa) {
            if (document.readyState === "complete") {
                return aa.browser.onready.jDelay(1)
            }
            if (aa.browser.webkit && aa.browser.version < 420) {
                (function() {
                    if (aa.$(["loaded", "complete"]).contains(document.readyState)) {
                        aa.browser.onready()
                    } else {
                        arguments.callee.jDelay(50)
                    }
                }())
            } else {
                if (aa.browser.trident && aa.browser.ieMode < 9 && window === top) {
                    (function() {
                        if (aa.$try(function() {
                                aa.browser.getDoc().doScroll("left");
                                return true
                            })) {
                            aa.browser.onready()
                        } else {
                            arguments.callee.jDelay(50)
                        }
                    }())
                } else {
                    aa.Doc.jAddEvent.call(aa.$(document), "DOMContentLoaded", aa.browser.onready);
                    aa.Doc.jAddEvent.call(aa.$(window), "load", aa.browser.onready)
                }
            }
        }(W));
        Q.Class = function() {
            var ae = null,
                ab = Q.$A(arguments);
            if ("class" == Q.jTypeOf(ab[0])) {
                ae = ab.shift()
            }
            var aa = function() {
                for (var ah in this) {
                    this[ah] = Q.detach(this[ah])
                }
                if (this.constructor.$parent) {
                    this.$parent = {};
                    var aj = this.constructor.$parent;
                    for (var ai in aj) {
                        var ag = aj[ai];
                        switch (Q.jTypeOf(ag)) {
                            case "function":
                                this.$parent[ai] = Q.Class.wrap(this, ag);
                                break;
                            case "object":
                                this.$parent[ai] = Q.detach(ag);
                                break;
                            case "array":
                                this.$parent[ai] = Q.detach(ag);
                                break
                        }
                    }
                }
                var af = (this.init) ? this.init.apply(this, arguments) : this;
                delete this.caller;
                return af
            };
            if (!aa.prototype.init) {
                aa.prototype.init = Q.$F
            }
            if (ae) {
                var ad = function() {};
                ad.prototype = ae.prototype;
                aa.prototype = new ad;
                aa.$parent = {};
                for (var ac in ae.prototype) {
                    aa.$parent[ac] = ae.prototype[ac]
                }
            } else {
                aa.$parent = null
            }
            aa.constructor = Q.Class;
            aa.prototype.constructor = aa;
            Q.extend(aa.prototype, ab[0]);
            Q.extend(aa, {
                $J_TYPE: "class"
            });
            return aa
        };
        W.Class.wrap = function(aa, ab) {
            return function() {
                var ad = this.caller;
                var ac = ab.apply(aa, arguments);
                return ac
            }
        };
        (function(ad) {
            var ac = ad.$;
            var aa = 5,
                ab = 300;
            ad.Event.Custom.btnclick = new ad.Class(ad.extend(ad.Event.Custom, {
                type: "btnclick",
                init: function(ag, af) {
                    var ae = af.jGetPageXY();
                    this.x = ae.x;
                    this.y = ae.y;
                    this.clientX = af.clientX;
                    this.clientY = af.clientY;
                    this.timeStamp = af.timeStamp;
                    this.button = af.getButton();
                    this.target = ag;
                    this.pushToEvents(af)
                }
            }));
            ad.Event.Custom.btnclick.handler = {
                options: {
                    threshold: ab,
                    button: 1
                },
                add: function(ae) {
                    this.jStore("event:btnclick:options", ad.extend(ad.detach(ad.Event.Custom.btnclick.handler.options), ae || {}));
                    this.jAddEvent("mousedown", ad.Event.Custom.btnclick.handler.handle, 1);
                    this.jAddEvent("mouseup", ad.Event.Custom.btnclick.handler.handle, 1);
                    this.jAddEvent("click", ad.Event.Custom.btnclick.handler.onclick, 1);
                    if (ad.browser.trident && ad.browser.ieMode < 9) {
                        this.jAddEvent("dblclick", ad.Event.Custom.btnclick.handler.handle, 1)
                    }
                },
                jRemove: function() {
                    this.jRemoveEvent("mousedown", ad.Event.Custom.btnclick.handler.handle);
                    this.jRemoveEvent("mouseup", ad.Event.Custom.btnclick.handler.handle);
                    this.jRemoveEvent("click", ad.Event.Custom.btnclick.handler.onclick);
                    if (ad.browser.trident && ad.browser.ieMode < 9) {
                        this.jRemoveEvent("dblclick", ad.Event.Custom.btnclick.handler.handle)
                    }
                },
                onclick: function(ae) {
                    ae.stopDefaults()
                },
                handle: function(ah) {
                    var ag, ae, af;
                    ae = this.jFetch("event:btnclick:options");
                    if (ah.type != "dblclick" && ah.getButton() != ae.button) {
                        return
                    }
                    if (this.jFetch("event:btnclick:ignore")) {
                        this.jDel("event:btnclick:ignore");
                        return
                    }
                    if ("mousedown" == ah.type) {
                        ag = new ad.Event.Custom.btnclick(this, ah);
                        this.jStore("event:btnclick:btnclickEvent", ag)
                    } else {
                        if ("mouseup" == ah.type) {
                            ag = this.jFetch("event:btnclick:btnclickEvent");
                            if (!ag) {
                                return
                            }
                            af = ah.jGetPageXY();
                            this.jDel("event:btnclick:btnclickEvent");
                            ag.pushToEvents(ah);
                            if (ah.timeStamp - ag.timeStamp <= ae.threshold && Math.sqrt(Math.pow(af.x - ag.x, 2) + Math.pow(af.y - ag.y, 2)) <= aa) {
                                this.jCallEvent("btnclick", ag)
                            }
                            document.jCallEvent("mouseup", ah)
                        } else {
                            if (ah.type == "dblclick") {
                                ag = new ad.Event.Custom.btnclick(this, ah);
                                this.jCallEvent("btnclick", ag)
                            }
                        }
                    }
                }
            }
        })(W);
        (function(ab) {
            var aa = ab.$;
            ab.Event.Custom.mousedrag = new ab.Class(ab.extend(ab.Event.Custom, {
                type: "mousedrag",
                state: "dragstart",
                dragged: false,
                init: function(af, ae, ad) {
                    var ac = ae.jGetPageXY();
                    this.x = ac.x;
                    this.y = ac.y;
                    this.clientX = ae.clientX;
                    this.clientY = ae.clientY;
                    this.timeStamp = ae.timeStamp;
                    this.button = ae.getButton();
                    this.target = af;
                    this.pushToEvents(ae);
                    this.state = ad
                }
            }));
            ab.Event.Custom.mousedrag.handler = {
                add: function() {
                    var ad = ab.Event.Custom.mousedrag.handler.handleMouseMove.jBindAsEvent(this);
                    var ac = ab.Event.Custom.mousedrag.handler.handleMouseUp.jBindAsEvent(this);
                    this.jAddEvent("mousedown", ab.Event.Custom.mousedrag.handler.handleMouseDown, 1);
                    this.jAddEvent("mouseup", ab.Event.Custom.mousedrag.handler.handleMouseUp, 1);
                    document.jAddEvent("mousemove", ad, 1);
                    document.jAddEvent("mouseup", ac, 1);
                    this.jStore("event:mousedrag:listeners:document:move", ad);
                    this.jStore("event:mousedrag:listeners:document:end", ac)
                },
                jRemove: function() {
                    this.jRemoveEvent("mousedown", ab.Event.Custom.mousedrag.handler.handleMouseDown);
                    this.jRemoveEvent("mouseup", ab.Event.Custom.mousedrag.handler.handleMouseUp);
                    aa(document).jRemoveEvent("mousemove", this.jFetch("event:mousedrag:listeners:document:move") || ab.$F);
                    aa(document).jRemoveEvent("mouseup", this.jFetch("event:mousedrag:listeners:document:end") || ab.$F);
                    this.jDel("event:mousedrag:listeners:document:move");
                    this.jDel("event:mousedrag:listeners:document:end")
                },
                handleMouseDown: function(ad) {
                    var ac;
                    if (ad.getButton() !== 1) {
                        return
                    }
                    ac = new ab.Event.Custom.mousedrag(this, ad, "dragstart");
                    this.jStore("event:mousedrag:dragstart", ac)
                },
                handleMouseUp: function(ad) {
                    var ac;
                    ac = this.jFetch("event:mousedrag:dragstart");
                    if (!ac) {
                        return
                    }
                    if (ac.dragged) {
                        ad.stopDefaults()
                    }
                    ac = new ab.Event.Custom.mousedrag(this, ad, "dragend");
                    this.jDel("event:mousedrag:dragstart");
                    this.jCallEvent("mousedrag", ac)
                },
                handleMouseMove: function(ad) {
                    var ac;
                    ac = this.jFetch("event:mousedrag:dragstart");
                    if (!ac) {
                        return
                    }
                    ad.stopDefaults();
                    if (!ac.dragged) {
                        ac.dragged = true;
                        this.jCallEvent("mousedrag", ac)
                    }
                    ac = new ab.Event.Custom.mousedrag(this, ad, "dragmove");
                    this.jCallEvent("mousedrag", ac)
                }
            }
        })(W);
        (function(ab) {
            var aa = ab.$;
            ab.Event.Custom.dblbtnclick = new ab.Class(ab.extend(ab.Event.Custom, {
                type: "dblbtnclick",
                timedout: false,
                tm: null,
                init: function(ae, ad) {
                    var ac = ad.jGetPageXY();
                    this.x = ac.x;
                    this.y = ac.y;
                    this.clientX = ad.clientX;
                    this.clientY = ad.clientY;
                    this.timeStamp = ad.timeStamp;
                    this.button = ad.getButton();
                    this.target = ae;
                    this.pushToEvents(ad)
                }
            }));
            ab.Event.Custom.dblbtnclick.handler = {
                options: {
                    threshold: 200
                },
                add: function(ac) {
                    this.jStore("event:dblbtnclick:options", ab.extend(ab.detach(ab.Event.Custom.dblbtnclick.handler.options), ac || {}));
                    this.jAddEvent("btnclick", ab.Event.Custom.dblbtnclick.handler.handle, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent("btnclick", ab.Event.Custom.dblbtnclick.handler.handle)
                },
                handle: function(ae) {
                    var ad, ac;
                    ad = this.jFetch("event:dblbtnclick:event");
                    ac = this.jFetch("event:dblbtnclick:options");
                    if (!ad) {
                        ad = new ab.Event.Custom.dblbtnclick(this, ae);
                        ad.tm = setTimeout(function() {
                            ad.timedout = true;
                            ae.isQueueStopped = ab.$false;
                            this.jCallEvent("btnclick", ae);
                            this.jDel("event:dblbtnclick:event")
                        }.jBind(this), ac.threshold + 10);
                        this.jStore("event:dblbtnclick:event", ad);
                        ae.stopQueue()
                    } else {
                        clearTimeout(ad.tm);
                        this.jDel("event:dblbtnclick:event");
                        if (!ad.timedout) {
                            ad.pushToEvents(ae);
                            ae.stopQueue().stop();
                            this.jCallEvent("dblbtnclick", ad)
                        } else {}
                    }
                }
            }
        })(W);
        (function(ad) {
            var ac = ad.$;
            var aa = 10;
            var ab = 200;
            ad.Event.Custom.tap = new ad.Class(ad.extend(ad.Event.Custom, {
                type: "tap",
                id: null,
                init: function(af, ae) {
                    var ag = ae.getPrimaryTouch();
                    this.id = ag.pointerId || ag.identifier;
                    this.x = ag.pageX;
                    this.y = ag.pageY;
                    this.pageX = ag.pageX;
                    this.pageY = ag.pageY;
                    this.clientX = ag.clientX;
                    this.clientY = ag.clientY;
                    this.timeStamp = ae.timeStamp;
                    this.button = 0;
                    this.target = af;
                    this.pushToEvents(ae)
                }
            }));
            ad.Event.Custom.tap.handler = {
                add: function(ae) {
                    this.jAddEvent(["touchstart", "pointerdown"], ad.Event.Custom.tap.handler.onTouchStart, 1);
                    this.jAddEvent(["touchend", "pointerup"], ad.Event.Custom.tap.handler.onTouchEnd, 1);
                    this.jAddEvent("click", ad.Event.Custom.tap.handler.onClick, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent(["touchstart", "pointerdown"], ad.Event.Custom.tap.handler.onTouchStart);
                    this.jRemoveEvent(["touchend", "pointerup"], ad.Event.Custom.tap.handler.onTouchEnd);
                    this.jRemoveEvent("click", ad.Event.Custom.tap.handler.onClick)
                },
                onClick: function(ae) {
                    ae.stopDefaults()
                },
                onTouchStart: function(ae) {
                    if (!ae.isPrimaryTouch()) {
                        this.jDel("event:tap:event");
                        return
                    }
                    this.jStore("event:tap:event", new ad.Event.Custom.tap(this, ae));
                    this.jStore("event:btnclick:ignore", true)
                },
                onTouchEnd: function(ah) {
                    var af = ad.now();
                    var ag = this.jFetch("event:tap:event");
                    var ae = this.jFetch("event:tap:options");
                    if (!ag || !ah.isPrimaryTouch()) {
                        return
                    }
                    this.jDel("event:tap:event");
                    if (ag.id === ah.getPrimaryTouchId() && ah.timeStamp - ag.timeStamp <= ab && Math.sqrt(Math.pow(ah.getPrimaryTouch().pageX - ag.x, 2) + Math.pow(ah.getPrimaryTouch().pageY - ag.y, 2)) <= aa) {
                        this.jDel("event:btnclick:btnclickEvent");
                        ah.stop();
                        ag.pushToEvents(ah);
                        this.jCallEvent("tap", ag)
                    }
                }
            }
        }(W));
        Q.Event.Custom.dbltap = new Q.Class(Q.extend(Q.Event.Custom, {
            type: "dbltap",
            timedout: false,
            tm: null,
            init: function(ab, aa) {
                this.x = aa.x;
                this.y = aa.y;
                this.clientX = aa.clientX;
                this.clientY = aa.clientY;
                this.timeStamp = aa.timeStamp;
                this.button = 0;
                this.target = ab;
                this.pushToEvents(aa)
            }
        }));
        Q.Event.Custom.dbltap.handler = {
            options: {
                threshold: 300
            },
            add: function(aa) {
                this.jStore("event:dbltap:options", Q.extend(Q.detach(Q.Event.Custom.dbltap.handler.options), aa || {}));
                this.jAddEvent("tap", Q.Event.Custom.dbltap.handler.handle, 1)
            },
            jRemove: function() {
                this.jRemoveEvent("tap", Q.Event.Custom.dbltap.handler.handle)
            },
            handle: function(ac) {
                var ab, aa;
                ab = this.jFetch("event:dbltap:event");
                aa = this.jFetch("event:dbltap:options");
                if (!ab) {
                    ab = new Q.Event.Custom.dbltap(this, ac);
                    ab.tm = setTimeout(function() {
                        ab.timedout = true;
                        ac.isQueueStopped = Q.$false;
                        this.jCallEvent("tap", ac)
                    }.jBind(this), aa.threshold + 10);
                    this.jStore("event:dbltap:event", ab);
                    ac.stopQueue()
                } else {
                    clearTimeout(ab.tm);
                    this.jDel("event:dbltap:event");
                    if (!ab.timedout) {
                        ab.pushToEvents(ac);
                        ac.stopQueue().stop();
                        this.jCallEvent("dbltap", ab)
                    } else {}
                }
            }
        };
        (function(ac) {
            var ab = ac.$;
            var aa = 10;
            ac.Event.Custom.touchdrag = new ac.Class(ac.extend(ac.Event.Custom, {
                type: "touchdrag",
                state: "dragstart",
                id: null,
                dragged: false,
                init: function(af, ae, ad) {
                    var ag = ae.getPrimaryTouch();
                    this.id = ag.pointerId || ag.identifier;
                    this.clientX = ag.clientX;
                    this.clientY = ag.clientY;
                    this.pageX = ag.pageX;
                    this.pageY = ag.pageY;
                    this.x = ag.pageX;
                    this.y = ag.pageY;
                    this.timeStamp = ae.timeStamp;
                    this.button = 0;
                    this.target = af;
                    this.pushToEvents(ae);
                    this.state = ad
                }
            }));
            ac.Event.Custom.touchdrag.handler = {
                add: function() {
                    var ae = ac.Event.Custom.touchdrag.handler.onTouchMove.jBind(this);
                    var ad = ac.Event.Custom.touchdrag.handler.onTouchEnd.jBind(this);
                    this.jAddEvent(["touchstart", "pointerdown"], ac.Event.Custom.touchdrag.handler.onTouchStart, 1);
                    this.jAddEvent(["touchend", "pointerup"], ac.Event.Custom.touchdrag.handler.onTouchEnd, 1);
                    this.jAddEvent(["touchmove", "pointermove"], ac.Event.Custom.touchdrag.handler.onTouchMove, 1);
                    this.jStore("event:touchdrag:listeners:document:move", ae);
                    this.jStore("event:touchdrag:listeners:document:end", ad);
                    ab(document).jAddEvent("pointermove", ae, 1);
                    ab(document).jAddEvent("pointerup", ad, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent(["touchstart", "pointerdown"], ac.Event.Custom.touchdrag.handler.onTouchStart);
                    this.jRemoveEvent(["touchend", "pointerup"], ac.Event.Custom.touchdrag.handler.onTouchEnd);
                    this.jRemoveEvent(["touchmove", "pointermove"], ac.Event.Custom.touchdrag.handler.onTouchMove);
                    ab(document).jRemoveEvent("pointermove", this.jFetch("event:touchdrag:listeners:document:move") || ac.$F, 1);
                    ab(document).jRemoveEvent("pointerup", this.jFetch("event:touchdrag:listeners:document:end") || ac.$F, 1);
                    this.jDel("event:touchdrag:listeners:document:move");
                    this.jDel("event:touchdrag:listeners:document:end")
                },
                onTouchStart: function(ae) {
                    var ad;
                    if (!ae.isPrimaryTouch()) {
                        return
                    }
                    ad = new ac.Event.Custom.touchdrag(this, ae, "dragstart");
                    this.jStore("event:touchdrag:dragstart", ad)
                },
                onTouchEnd: function(ae) {
                    var ad;
                    ad = this.jFetch("event:touchdrag:dragstart");
                    if (!ad || !ad.dragged || ad.id !== ae.getPrimaryTouchId()) {
                        return
                    }
                    ad = new ac.Event.Custom.touchdrag(this, ae, "dragend");
                    this.jDel("event:touchdrag:dragstart");
                    this.jCallEvent("touchdrag", ad)
                },
                onTouchMove: function(ae) {
                    var ad;
                    ad = this.jFetch("event:touchdrag:dragstart");
                    if (!ad || !ae.isPrimaryTouch()) {
                        return
                    }
                    if (ad.id !== ae.getPrimaryTouchId()) {
                        this.jDel("event:touchdrag:dragstart");
                        return
                    }
                    if (!ad.dragged && Math.sqrt(Math.pow(ae.getPrimaryTouch().pageX - ad.x, 2) + Math.pow(ae.getPrimaryTouch().pageY - ad.y, 2)) > aa) {
                        ad.dragged = true;
                        this.jCallEvent("touchdrag", ad)
                    }
                    if (!ad.dragged) {
                        return
                    }
                    ad = new ac.Event.Custom.touchdrag(this, ae, "dragmove");
                    this.jCallEvent("touchdrag", ad)
                }
            }
        }(W));
        (function(ad) {
            var ah = ad.$;
            var ae = null;

            function aa(aq, ap) {
                var ao = ap.x - aq.x;
                var ar = ap.y - aq.y;
                return Math.sqrt(ao * ao + ar * ar)
            }

            function aj(av, aw) {
                var au = Array.prototype.slice.call(av);
                var at = Math.abs(au[1].pageX - au[0].pageX);
                var aq = Math.abs(au[1].pageY - au[0].pageY);
                var ar = Math.min(au[1].pageX, au[0].pageX) + at / 2;
                var ap = Math.min(au[1].pageY, au[0].pageY) + aq / 2;
                var ao = 0;
                aw.points = [au[0], au[1]];
                ao = Math.pow(aa({
                    x: au[0].pageX,
                    y: au[0].pageY
                }, {
                    x: au[1].pageX,
                    y: au[1].pageY
                }), 2);
                aw.centerPoint = {
                    x: ar,
                    y: ap
                };
                aw.x = aw.centerPoint.x;
                aw.y = aw.centerPoint.y;
                return ao
            }

            function am(ao) {
                return ao / ae
            }

            function ab(aq, ap) {
                var ao;
                if (aq.targetTouches && aq.changedTouches) {
                    if (aq.targetTouches) {
                        ao = aq.targetTouches
                    } else {
                        ao = aq.changedTouches
                    }
                    ao = Array.prototype.slice.call(ao)
                } else {
                    ao = [];
                    if (ap) {
                        ap.forEach(function(ar) {
                            ao.push(ar)
                        })
                    }
                }
                return ao
            }

            function ac(ar, aq, ap) {
                var ao = false;
                if (ar.pointerId && ar.pointerType === "touch" && (!ap || aq.has(ar.pointerId))) {
                    aq.set(ar.pointerId, ar);
                    ao = true
                }
                return ao
            }

            function ai(ap, ao) {
                if (ap.pointerId && ap.pointerType === "touch" && ao && ao.has(ap.pointerId)) {
                    ao["delete"](ap.pointerId)
                }
            }

            function al(ap) {
                var ao;
                if (ap.pointerId && ap.pointerType === "touch") {
                    ao = ap.pointerId
                } else {
                    ao = ap.identifier
                }
                return ao
            }

            function ag(ar, ap) {
                var aq;
                var at;
                var ao = false;
                for (aq = 0; aq < ar.length; aq++) {
                    if (ap.length === 2) {
                        break
                    } else {
                        at = al(ar[aq]);
                        if (!ap.contains(at)) {
                            ap.push(at);
                            ao = true
                        }
                    }
                }
                return ao
            }

            function ak(ap) {
                var ao = ah([]);
                ap.forEach(function(aq) {
                    ao.push(al(aq))
                });
                return ao
            }

            function an(at, ap) {
                var aq;
                var ar;
                var ao = false;
                if (ap) {
                    ar = ak(at);
                    for (aq = 0; aq < ap.length; aq++) {
                        if (!ar.contains(ap[aq])) {
                            ap.splice(aq, 1);
                            ao = true;
                            break
                        }
                    }
                }
                return ao
            }

            function af(ar, ap) {
                var aq;
                var ao = ah([]);
                for (aq = 0; aq < ar.length; aq++) {
                    if (ap.contains(al(ar[aq]))) {
                        ao.push(ar[aq]);
                        if (ao.length === 2) {
                            break
                        }
                    }
                }
                return ao
            }
            ad.Event.Custom.pinch = new ad.Class(ad.extend(ad.Event.Custom, {
                type: "pinch",
                state: "pinchstart",
                init: function(aq, ap, ao, ar) {
                    this.target = aq;
                    this.state = ao;
                    this.x = ar.x;
                    this.y = ar.y;
                    this.timeStamp = ap.timeStamp;
                    this.scale = ar.scale;
                    this.space = ar.space;
                    this.zoom = ar.zoom;
                    this.state = ao;
                    this.centerPoint = ar.centerPoint;
                    this.points = ar.points;
                    this.pushToEvents(ap)
                }
            }));
            ad.Event.Custom.pinch.handler = {
                variables: {
                    x: 0,
                    y: 0,
                    space: 0,
                    scale: 1,
                    zoom: 0,
                    startSpace: 0,
                    startScale: 1,
                    started: false,
                    dragged: false,
                    points: [],
                    centerPoint: {
                        x: 0,
                        y: 0
                    }
                },
                add: function(aq) {
                    if (!ae) {
                        ae = (function() {
                            var ar = ah(window).jGetSize();
                            ar.width = Math.min(ar.width, ar.height);
                            ar.height = ar.width;
                            return Math.pow(aa({
                                x: 0,
                                y: 0
                            }, {
                                x: ar.width,
                                y: ar.height
                            }), 2)
                        })()
                    }
                    var ap = ad.Event.Custom.pinch.handler.onTouchMove.jBind(this);
                    var ao = ad.Event.Custom.pinch.handler.onTouchEnd.jBind(this);
                    this.jAddEvent(["click", "tap"], ad.Event.Custom.pinch.handler.onClick, 1);
                    this.jAddEvent(["touchstart", "pointerdown"], ad.Event.Custom.pinch.handler.onTouchStart, 1);
                    this.jAddEvent(["touchend", "pointerup"], ad.Event.Custom.pinch.handler.onTouchEnd, 1);
                    this.jAddEvent(["touchmove", "pointermove"], ad.Event.Custom.pinch.handler.onTouchMove, 1);
                    this.jStore("event:pinch:listeners:touchmove", ap);
                    this.jStore("event:pinch:listeners:touchend", ao);
                    ad.doc.jAddEvent("pointermove", ap, 1);
                    ad.doc.jAddEvent("pointerup", ao, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent(["click", "tap"], ad.Event.Custom.pinch.handler.onClick);
                    this.jRemoveEvent(["touchstart", "pointerdown"], ad.Event.Custom.pinch.handler.onTouchStart);
                    this.jRemoveEvent(["touchend", "pointerup"], ad.Event.Custom.pinch.handler.onTouchEnd);
                    this.jRemoveEvent(["touchmove", "pointermove"], ad.Event.Custom.pinch.handler.onTouchMove);
                    ad.doc.jRemoveEvent("pointermove", this.jFetch("event:pinch:listeners:touchmove"));
                    ad.doc.jRemoveEvent("pointerup", this.jFetch("event:pinch:listeners:touchend"));
                    this.jDel("event:pinch:listeners:touchmove");
                    this.jDel("event:pinch:listeners:touchend");
                    this.jDel("event:pinch:pinchstart");
                    this.jDel("event:pinch:variables");
                    this.jDel("event:pinch:activepoints");
                    var ao = this.jFetch("event:pinch:cache");
                    if (ao) {
                        ao.clear()
                    }
                    this.jDel("event:pinch:cache")
                },
                onClick: function(ao) {
                    ao.stop()
                },
                setVariables: function(ap, aq) {
                    var ao = aq.space;
                    if (ap.length > 1) {
                        aq.space = aj(ap, aq);
                        if (!aq.startSpace) {
                            aq.startSpace = aq.space
                        }
                        if (ao > aq.space) {
                            aq.zoom = -1
                        } else {
                            if (ao < aq.space) {
                                aq.zoom = 1
                            } else {
                                aq.zoom = 0
                            }
                        }
                        aq.scale = am(aq.space)
                    } else {
                        aq.points = Array.prototype.slice.call(ap, 0, 2)
                    }
                },
                onTouchMove: function(aq) {
                    var ap;
                    var ao = this.jFetch("event:pinch:cache");
                    var at = this.jFetch("event:pinch:variables") || ad.extend({}, ad.Event.Custom.pinch.handler.variables);
                    var ar = this.jFetch("event:pinch:activepoints");
                    if (at.started) {
                        if (aq.pointerId && !ac(aq, ao, true)) {
                            return
                        }
                        aq.stop();
                        ad.Event.Custom.pinch.handler.setVariables(af(ab(aq, ao), ar), at);
                        ap = new ad.Event.Custom.pinch(this, aq, "pinchmove", at);
                        this.jCallEvent("pinch", ap)
                    }
                },
                onTouchStart: function(ar) {
                    var ap;
                    var au;
                    var aq;
                    var ao = this.jFetch("event:pinch:cache");
                    var at = this.jFetch("event:pinch:activepoints");
                    if (ar.pointerType === "mouse") {
                        return
                    }
                    if (!at) {
                        at = ah([]);
                        this.jStore("event:pinch:activepoints", at)
                    }
                    if (!at.length) {
                        ah(ar.target).jAddEvent(["touchend", "pointerup"], this.jFetch("event:pinch:listeners:touchend"), 1)
                    }
                    if (!ao) {
                        ao = new Map();
                        this.jStore("event:pinch:cache", ao)
                    }
                    ac(ar, ao);
                    aq = ab(ar, ao);
                    ag(aq, at);
                    if (aq.length === 2) {
                        ap = this.jFetch("event:pinch:pinchstart");
                        au = this.jFetch("event:pinch:variables") || ad.extend({}, ad.Event.Custom.pinch.handler.variables);
                        ad.Event.Custom.pinch.handler.setVariables(af(aq, at), au);
                        if (!ap) {
                            ap = new ad.Event.Custom.pinch(this, ar, "pinchstart", au);
                            this.jStore("event:pinch:pinchstart", ap);
                            this.jStore("event:pinch:variables", au);
                            ae = au.space;
                            this.jCallEvent("pinch", ap);
                            au.started = true
                        }
                    }
                },
                onTouchEnd: function(au) {
                    var at;
                    var ar;
                    var aw;
                    var ap;
                    var aq = this.jFetch("event:pinch:cache");
                    var av;
                    var ao;
                    if (au.pointerType === "mouse" || au.pointerId && (!aq || !aq.has(au.pointerId))) {
                        return
                    }
                    ar = this.jFetch("event:pinch:pinchstart");
                    aw = this.jFetch("event:pinch:variables");
                    av = this.jFetch("event:pinch:activepoints");
                    at = ab(au, aq);
                    ai(au, aq);
                    ao = an(at, av);
                    if (!ar || !aw || !aw.started || !ao || !av) {
                        return
                    }
                    if (ao) {
                        ag(at, av)
                    }
                    ap = "pinchend";
                    if (at.length > 1) {
                        ap = "pinchresize"
                    } else {
                        au.target.jRemoveEvent(["touchend", "pointerup"], this.jFetch("event:pinch:listeners:touchend"));
                        if (aq) {
                            aq.clear()
                        }
                        this.jDel("event:pinch:pinchstart");
                        this.jDel("event:pinch:variables");
                        this.jDel("event:pinch:cache");
                        this.jDel("event:pinch:activepoints")
                    }
                    ad.Event.Custom.pinch.handler.setVariables(af(at, av), aw);
                    ar = new ad.Event.Custom.pinch(this, au, ap, aw);
                    this.jCallEvent("pinch", ar)
                }
            }
        }(W));
        (function(af) {
            var ad = af.$;
            af.Event.Custom.mousescroll = new af.Class(af.extend(af.Event.Custom, {
                type: "mousescroll",
                init: function(al, ak, an, ah, ag, am, ai) {
                    var aj = ak.jGetPageXY();
                    this.x = aj.x;
                    this.y = aj.y;
                    this.timeStamp = ak.timeStamp;
                    this.target = al;
                    this.delta = an || 0;
                    this.deltaX = ah || 0;
                    this.deltaY = ag || 0;
                    this.deltaZ = am || 0;
                    this.deltaFactor = ai || 0;
                    this.deltaMode = ak.deltaMode || 0;
                    this.isMouse = false;
                    this.pushToEvents(ak)
                }
            }));
            var ae, ab;

            function aa() {
                ae = null
            }

            function ac(ag, ah) {
                return (ag > 50) || (1 === ah && !("win" == af.browser.platform && ag < 1)) || (0 === ag % 12) || (0 == ag % 4.000244140625)
            }
            af.Event.Custom.mousescroll.handler = {
                eventType: "onwheel" in document || af.browser.ieMode > 8 ? "wheel" : "mousewheel",
                add: function() {
                    this.jAddEvent(af.Event.Custom.mousescroll.handler.eventType, af.Event.Custom.mousescroll.handler.handle, 1)
                },
                jRemove: function() {
                    this.jRemoveEvent(af.Event.Custom.mousescroll.handler.eventType, af.Event.Custom.mousescroll.handler.handle, 1)
                },
                handle: function(al) {
                    var am = 0,
                        aj = 0,
                        ah = 0,
                        ag = 0,
                        ak, ai;
                    if (al.detail) {
                        ah = al.detail * -1
                    }
                    if (al.wheelDelta !== undefined) {
                        ah = al.wheelDelta
                    }
                    if (al.wheelDeltaY !== undefined) {
                        ah = al.wheelDeltaY
                    }
                    if (al.wheelDeltaX !== undefined) {
                        aj = al.wheelDeltaX * -1
                    }
                    if (al.deltaY) {
                        ah = -1 * al.deltaY
                    }
                    if (al.deltaX) {
                        aj = al.deltaX
                    }
                    if (0 === ah && 0 === aj) {
                        return
                    }
                    am = 0 === ah ? aj : ah;
                    ag = Math.max(Math.abs(ah), Math.abs(aj));
                    if (!ae || ag < ae) {
                        ae = ag
                    }
                    ak = am > 0 ? "floor" : "ceil";
                    am = Math[ak](am / ae);
                    aj = Math[ak](aj / ae);
                    ah = Math[ak](ah / ae);
                    if (ab) {
                        clearTimeout(ab)
                    }
                    ab = setTimeout(aa, 200);
                    ai = new af.Event.Custom.mousescroll(this, al, am, aj, ah, 0, ae);
                    ai.isMouse = ac(ae, al.deltaMode || 0);
                    this.jCallEvent("mousescroll", ai)
                }
            }
        })(W);
        Q.win = Q.$(window);
        Q.doc = Q.$(document);
        return W
    })();
    (function(M) {
        if (!M) {
            throw "MagicJS not found"
        }
        var L = M.$;
        var K = window.URL || window.webkitURL || null;
        B.ImageLoader = new M.Class({
            img: null,
            ready: false,
            options: {
                onprogress: M.$F,
                onload: M.$F,
                onabort: M.$F,
                onerror: M.$F,
                oncomplete: M.$F,
                onxhrerror: M.$F,
                xhr: false,
                progressiveLoad: true
            },
            size: null,
            _timer: null,
            loadedBytes: 0,
            _handlers: {
                onprogress: function(N) {
                    if (N.target && (200 === N.target.status || 304 === N.target.status) && N.lengthComputable) {
                        this.options.onprogress.jBind(null, (N.loaded - (this.options.progressiveLoad ? this.loadedBytes : 0)) / N.total).jDelay(1);
                        this.loadedBytes = N.loaded
                    }
                },
                onload: function(N) {
                    if (N) {
                        L(N).stop()
                    }
                    this._unbind();
                    if (this.ready) {
                        return
                    }
                    this.ready = true;
                    this._cleanup();
                    !this.options.xhr && this.options.onprogress.jBind(null, 1).jDelay(1);
                    this.options.onload.jBind(null, this).jDelay(1);
                    this.options.oncomplete.jBind(null, this).jDelay(1)
                },
                onabort: function(N) {
                    if (N) {
                        L(N).stop()
                    }
                    this._unbind();
                    this.ready = false;
                    this._cleanup();
                    this.options.onabort.jBind(null, this).jDelay(1);
                    this.options.oncomplete.jBind(null, this).jDelay(1)
                },
                onerror: function(N) {
                    if (N) {
                        L(N).stop()
                    }
                    this._unbind();
                    this.ready = false;
                    this._cleanup();
                    this.options.onerror.jBind(null, this).jDelay(1);
                    this.options.oncomplete.jBind(null, this).jDelay(1)
                }
            },
            _bind: function() {
                L(["load", "abort", "error"]).jEach(function(N) {
                    this.img.jAddEvent(N, this._handlers["on" + N].jBindAsEvent(this).jDefer(1))
                }, this)
            },
            _unbind: function() {
                if (this._timer) {
                    try {
                        clearTimeout(this._timer)
                    } catch (N) {}
                    this._timer = null
                }
                L(["load", "abort", "error"]).jEach(function(O) {
                    this.img.jRemoveEvent(O)
                }, this)
            },
            _cleanup: function() {
                this.jGetSize();
                if (this.img.jFetch("new")) {
                    var N = this.img.parentNode;
                    this.img.jRemove().jDel("new").jSetCss({
                        position: "static",
                        top: "auto"
                    });
                    N.kill()
                }
            },
            loadBlob: function(O) {
                var P = new XMLHttpRequest(),
                    N;
                L(["abort", "progress"]).jEach(function(Q) {
                    P["on" + Q] = L(function(R) {
                        this._handlers["on" + Q].call(this, R)
                    }).jBind(this)
                }, this);
                P.onerror = L(function() {
                    this.options.onxhrerror.jBind(null, this).jDelay(1);
                    this.options.xhr = false;
                    this._bind();
                    this.img.src = O
                }).jBind(this);
                P.onload = L(function() {
                    if (200 !== P.status && 304 !== P.status) {
                        this._handlers.onerror.call(this);
                        return
                    }
                    N = P.response;
                    this._bind();
                    if (K && !M.browser.trident && !("ios" === M.browser.platform && M.browser.version < 537)) {
                        this.img.setAttribute("src", K.createObjectURL(N))
                    } else {
                        this.img.src = O
                    }
                }).jBind(this);
                P.open("GET", O);
                P.responseType = "blob";
                P.send()
            },
            init: function(O, N) {
                this.options = M.extend(this.options, N);
                this.img = L(O) || M.$new("img", {}, {
                    "max-width": "none",
                    "max-height": "none"
                }).jAppendTo(M.$new("div").jAddClass("magic-temporary-img").jSetCss({
                    position: "absolute",
                    top: -10000,
                    width: 10,
                    height: 10,
                    overflow: "hidden"
                }).jAppendTo(document.body)).jStore("new", true);
                if (M.browser.features.xhr2 && this.options.xhr && "string" == M.jTypeOf(O)) {
                    this.loadBlob(O);
                    return
                }
                var P = function() {
                    if (this.isReady()) {
                        this._handlers.onload.call(this)
                    } else {
                        this._handlers.onerror.call(this)
                    }
                    P = null
                }.jBind(this);
                this._bind();
                if ("string" == M.jTypeOf(O)) {
                    this.img.src = O
                } else {
                    if (M.browser.trident && 5 == M.browser.version && M.browser.ieMode < 9) {
                        this.img.onreadystatechange = function() {
                            if (/loaded|complete/.test(this.img.readyState)) {
                                this.img.onreadystatechange = null;
                                P && P()
                            }
                        }.jBind(this)
                    }
                    this.img.src = O.getAttribute("src")
                }
                this.img && this.img.complete && P && (this._timer = P.jDelay(100))
            },
            destroy: function() {
                this._unbind();
                this._cleanup();
                this.ready = false;
                return this
            },
            isReady: function() {
                var N = this.img;
                return (N.naturalWidth) ? (N.naturalWidth > 0) : (N.readyState) ? ("complete" == N.readyState) : N.width > 0
            },
            jGetSize: function() {
                return this.size || (this.size = {
                    width: this.img.naturalWidth || this.img.width,
                    height: this.img.naturalHeight || this.img.height
                })
            }
        })
    })(B);
    (function(L) {
        if (!L) {
            throw "MagicJS not found"
        }
        if (L.FX) {
            return
        }
        var K = L.$;
        L.FX = new L.Class({
            init: function(N, M) {
                var O;
                this.el = L.$(N);
                this.options = L.extend(this.options, M);
                this.timer = false;
                this.easeFn = this.cubicBezierAtTime;
                O = L.FX.Transition[this.options.transition] || this.options.transition;
                if ("function" === L.jTypeOf(O)) {
                    this.easeFn = O
                } else {
                    this.cubicBezier = this.parseCubicBezier(O) || this.parseCubicBezier("ease")
                }
                if ("string" == L.jTypeOf(this.options.cycles)) {
                    this.options.cycles = "infinite" === this.options.cycles ? Infinity : parseInt(this.options.cycles) || 1
                }
            },
            options: {
                fps: 60,
                duration: 600,
                transition: "ease",
                cycles: 1,
                direction: "normal",
                onStart: L.$F,
                onComplete: L.$F,
                onBeforeRender: L.$F,
                onAfterRender: L.$F,
                forceAnimation: false,
                roundCss: false
            },
            styles: null,
            cubicBezier: null,
            easeFn: null,
            setTransition: function(M) {
                this.options.transition = M;
                M = L.FX.Transition[this.options.transition] || this.options.transition;
                if ("function" === L.jTypeOf(M)) {
                    this.easeFn = M
                } else {
                    this.easeFn = this.cubicBezierAtTime;
                    this.cubicBezier = this.parseCubicBezier(M) || this.parseCubicBezier("ease")
                }
            },
            start: function(O) {
                var M = /\%$/,
                    N;
                this.styles = O || {};
                this.cycle = 0;
                this.state = 0;
                this.curFrame = 0;
                this.pStyles = {};
                this.alternate = "alternate" === this.options.direction || "alternate-reverse" === this.options.direction;
                this.continuous = "continuous" === this.options.direction || "continuous-reverse" === this.options.direction;
                for (N in this.styles) {
                    M.test(this.styles[N][0]) && (this.pStyles[N] = true);
                    if ("reverse" === this.options.direction || "alternate-reverse" === this.options.direction || "continuous-reverse" === this.options.direction) {
                        this.styles[N].reverse()
                    }
                }
                this.startTime = L.now();
                this.finishTime = this.startTime + this.options.duration;
                this.options.onStart.call();
                if (0 === this.options.duration) {
                    this.render(1);
                    this.options.onComplete.call()
                } else {
                    this.loopBind = this.loop.jBind(this);
                    if (!this.options.forceAnimation && L.browser.features.requestAnimationFrame) {
                        this.timer = L.browser.requestAnimationFrame.call(window, this.loopBind)
                    } else {
                        this.timer = this.loopBind.interval(Math.round(1000 / this.options.fps))
                    }
                }
                return this
            },
            stopAnimation: function() {
                if (this.timer) {
                    if (!this.options.forceAnimation && L.browser.features.requestAnimationFrame && L.browser.cancelAnimationFrame) {
                        L.browser.cancelAnimationFrame.call(window, this.timer)
                    } else {
                        clearInterval(this.timer)
                    }
                    this.timer = false
                }
            },
            stop: function(M) {
                M = L.defined(M) ? M : false;
                this.stopAnimation();
                if (M) {
                    this.render(1);
                    this.options.onComplete.jDelay(10)
                }
                return this
            },
            calc: function(O, N, M) {
                O = parseFloat(O);
                N = parseFloat(N);
                return (N - O) * M + O
            },
            loop: function() {
                var N = L.now(),
                    M = (N - this.startTime) / this.options.duration,
                    O = Math.floor(M);
                if (N >= this.finishTime && O >= this.options.cycles) {
                    this.stopAnimation();
                    this.render(1);
                    this.options.onComplete.jDelay(10);
                    return this
                }
                if (this.alternate && this.cycle < O) {
                    for (var P in this.styles) {
                        this.styles[P].reverse()
                    }
                }
                this.cycle = O;
                if (!this.options.forceAnimation && L.browser.features.requestAnimationFrame) {
                    this.timer = L.browser.requestAnimationFrame.call(window, this.loopBind)
                }
                this.render((this.continuous ? O : 0) + this.easeFn(M % 1))
            },
            render: function(M) {
                var N = {},
                    P = M;
                for (var O in this.styles) {
                    if ("opacity" === O) {
                        N[O] = Math.round(this.calc(this.styles[O][0], this.styles[O][1], M) * 100) / 100
                    } else {
                        N[O] = this.calc(this.styles[O][0], this.styles[O][1], M);
                        this.pStyles[O] && (N[O] += "%")
                    }
                }
                this.options.onBeforeRender(N, this.el);
                this.set(N);
                this.options.onAfterRender(N, this.el)
            },
            set: function(M) {
                return this.el.jSetCss(M)
            },
            parseCubicBezier: function(M) {
                var N, O = null;
                if ("string" !== L.jTypeOf(M)) {
                    return null
                }
                switch (M) {
                    case "linear":
                        O = K([0, 0, 1, 1]);
                        break;
                    case "ease":
                        O = K([0.25, 0.1, 0.25, 1]);
                        break;
                    case "ease-in":
                        O = K([0.42, 0, 1, 1]);
                        break;
                    case "ease-out":
                        O = K([0, 0, 0.58, 1]);
                        break;
                    case "ease-in-out":
                        O = K([0.42, 0, 0.58, 1]);
                        break;
                    case "easeInSine":
                        O = K([0.47, 0, 0.745, 0.715]);
                        break;
                    case "easeOutSine":
                        O = K([0.39, 0.575, 0.565, 1]);
                        break;
                    case "easeInOutSine":
                        O = K([0.445, 0.05, 0.55, 0.95]);
                        break;
                    case "easeInQuad":
                        O = K([0.55, 0.085, 0.68, 0.53]);
                        break;
                    case "easeOutQuad":
                        O = K([0.25, 0.46, 0.45, 0.94]);
                        break;
                    case "easeInOutQuad":
                        O = K([0.455, 0.03, 0.515, 0.955]);
                        break;
                    case "easeInCubic":
                        O = K([0.55, 0.055, 0.675, 0.19]);
                        break;
                    case "easeOutCubic":
                        O = K([0.215, 0.61, 0.355, 1]);
                        break;
                    case "easeInOutCubic":
                        O = K([0.645, 0.045, 0.355, 1]);
                        break;
                    case "easeInQuart":
                        O = K([0.895, 0.03, 0.685, 0.22]);
                        break;
                    case "easeOutQuart":
                        O = K([0.165, 0.84, 0.44, 1]);
                        break;
                    case "easeInOutQuart":
                        O = K([0.77, 0, 0.175, 1]);
                        break;
                    case "easeInQuint":
                        O = K([0.755, 0.05, 0.855, 0.06]);
                        break;
                    case "easeOutQuint":
                        O = K([0.23, 1, 0.32, 1]);
                        break;
                    case "easeInOutQuint":
                        O = K([0.86, 0, 0.07, 1]);
                        break;
                    case "easeInExpo":
                        O = K([0.95, 0.05, 0.795, 0.035]);
                        break;
                    case "easeOutExpo":
                        O = K([0.19, 1, 0.22, 1]);
                        break;
                    case "easeInOutExpo":
                        O = K([1, 0, 0, 1]);
                        break;
                    case "easeInCirc":
                        O = K([0.6, 0.04, 0.98, 0.335]);
                        break;
                    case "easeOutCirc":
                        O = K([0.075, 0.82, 0.165, 1]);
                        break;
                    case "easeInOutCirc":
                        O = K([0.785, 0.135, 0.15, 0.86]);
                        break;
                    case "easeInBack":
                        O = K([0.6, -0.28, 0.735, 0.045]);
                        break;
                    case "easeOutBack":
                        O = K([0.175, 0.885, 0.32, 1.275]);
                        break;
                    case "easeInOutBack":
                        O = K([0.68, -0.55, 0.265, 1.55]);
                        break;
                    default:
                        M = M.replace(/\s/g, "");
                        if (M.match(/^cubic-bezier\((?:-?[0-9\.]{0,}[0-9]{1,},){3}(?:-?[0-9\.]{0,}[0-9]{1,})\)$/)) {
                            O = M.replace(/^cubic-bezier\s*\(|\)$/g, "").split(",");
                            for (N = O.length - 1; N >= 0; N--) {
                                O[N] = parseFloat(O[N])
                            }
                        }
                }
                return K(O)
            },
            cubicBezierAtTime: function(Y) {
                var M = 0,
                    X = 0,
                    U = 0,
                    Z = 0,
                    W = 0,
                    S = 0,
                    T = this.options.duration;

                function R(aa) {
                    return ((M * aa + X) * aa + U) * aa
                }

                function Q(aa) {
                    return ((Z * aa + W) * aa + S) * aa
                }

                function O(aa) {
                    return (3 * M * aa + 2 * X) * aa + U
                }

                function V(aa) {
                    return 1 / (200 * aa)
                }

                function N(aa, ab) {
                    return Q(P(aa, ab))
                }

                function P(ah, ai) {
                    var ag, af, ae, ab, aa, ad;

                    function ac(aj) {
                        if (aj >= 0) {
                            return aj
                        } else {
                            return 0 - aj
                        }
                    }
                    for (ae = ah, ad = 0; ad < 8; ad++) {
                        ab = R(ae) - ah;
                        if (ac(ab) < ai) {
                            return ae
                        }
                        aa = O(ae);
                        if (ac(aa) < 0.000001) {
                            break
                        }
                        ae = ae - ab / aa
                    }
                    ag = 0;
                    af = 1;
                    ae = ah;
                    if (ae < ag) {
                        return ag
                    }
                    if (ae > af) {
                        return af
                    }
                    while (ag < af) {
                        ab = R(ae);
                        if (ac(ab - ah) < ai) {
                            return ae
                        }
                        if (ah > ab) {
                            ag = ae
                        } else {
                            af = ae
                        }
                        ae = (af - ag) * 0.5 + ag
                    }
                    return ae
                }
                U = 3 * this.cubicBezier[0];
                X = 3 * (this.cubicBezier[2] - this.cubicBezier[0]) - U;
                M = 1 - U - X;
                S = 3 * this.cubicBezier[1];
                W = 3 * (this.cubicBezier[3] - this.cubicBezier[1]) - S;
                Z = 1 - S - W;
                return N(Y, V(T))
            }
        });
        L.FX.Transition = {
            linear: "linear",
            sineIn: "easeInSine",
            sineOut: "easeOutSine",
            expoIn: "easeInExpo",
            expoOut: "easeOutExpo",
            quadIn: "easeInQuad",
            quadOut: "easeOutQuad",
            cubicIn: "easeInCubic",
            cubicOut: "easeOutCubic",
            backIn: "easeInBack",
            backOut: "easeOutBack",
            elasticIn: function(N, M) {
                M = M || [];
                return Math.pow(2, 10 * --N) * Math.cos(20 * N * Math.PI * (M[0] || 1) / 3)
            },
            elasticOut: function(N, M) {
                return 1 - L.FX.Transition.elasticIn(1 - N, M)
            },
            bounceIn: function(O) {
                for (var N = 0, M = 1; 1; N += M, M /= 2) {
                    if (O >= (7 - 4 * N) / 11) {
                        return M * M - Math.pow((11 - 6 * N - 11 * O) / 4, 2)
                    }
                }
            },
            bounceOut: function(M) {
                return 1 - L.FX.Transition.bounceIn(1 - M)
            },
            none: function(M) {
                return 0
            }
        }
    })(B);
    (function(L) {
        if (!L) {
            throw "MagicJS not found"
        }
        if (L.PFX) {
            return
        }
        var K = L.$;
        L.PFX = new L.Class(L.FX, {
            init: function(M, N) {
                this.el_arr = M;
                this.options = L.extend(this.options, N);
                this.timer = false;
                this.$parent.init()
            },
            start: function(Q) {
                var M = /\%$/,
                    P, O, N = Q.length;
                this.styles_arr = Q;
                this.pStyles_arr = new Array(N);
                for (O = 0; O < N; O++) {
                    this.pStyles_arr[O] = {};
                    for (P in Q[O]) {
                        M.test(Q[O][P][0]) && (this.pStyles_arr[O][P] = true);
                        if ("reverse" === this.options.direction || "alternate-reverse" === this.options.direction || "continuous-reverse" === this.options.direction) {
                            this.styles_arr[O][P].reverse()
                        }
                    }
                }
                this.$parent.start({});
                return this
            },
            render: function(M) {
                for (var N = 0; N < this.el_arr.length; N++) {
                    this.el = L.$(this.el_arr[N]);
                    this.styles = this.styles_arr[N];
                    this.pStyles = this.pStyles_arr[N];
                    this.$parent.render(M)
                }
            }
        })
    })(B);
    (function(L) {
        if (!L) {
            throw "MagicJS not found";
            return
        }
        if (L.Tooltip) {
            return
        }
        var K = L.$;
        L.Tooltip = function(N, O) {
            var M = this.tooltip = L.$new("div", null, {
                position: "absolute",
                "z-index": 999
            }).jAddClass("MagicToolboxTooltip");
            L.$(N).jAddEvent("mouseover", function() {
                M.jAppendTo(document.body)
            });
            L.$(N).jAddEvent("mouseout", function() {
                M.jRemove()
            });
            L.$(N).jAddEvent("mousemove", function(T) {
                var V = 20,
                    S = L.$(T).jGetPageXY(),
                    R = M.jGetSize(),
                    Q = L.$(window).jGetSize(),
                    U = L.$(window).jGetScroll();

                function P(Y, W, X) {
                    return (X < (Y - W) / 2) ? X : ((X > (Y + W) / 2) ? (X - W) : (Y - W) / 2)
                }
                M.jSetCss({
                    left: U.x + P(Q.width, R.width + 2 * V, S.x - U.x) + V,
                    top: U.y + P(Q.height, R.height + 2 * V, S.y - U.y) + V
                })
            });
            this.text(O)
        };
        L.Tooltip.prototype.text = function(M) {
            this.tooltip.firstChild && this.tooltip.removeChild(this.tooltip.firstChild);
            this.tooltip.append(document.createTextNode(M))
        }
    })(B);
    (function(L) {
        if (!L) {
            throw "MagicJS not found";
            return
        }
        if (L.MessageBox) {
            return
        }
        var K = L.$;
        L.Message = function(P, O, N, M) {
            this.hideTimer = null;
            this.messageBox = L.$new("span", null, {
                position: "absolute",
                "z-index": 999,
                visibility: "hidden",
                opacity: 0.8
            }).jAddClass(M || "").jAppendTo(N || document.body);
            this.setMessage(P);
            this.show(O)
        };
        L.Message.prototype.show = function(M) {
            this.messageBox.show();
            this.hideTimer = this.hide.jBind(this).jDelay(L.ifndef(M, 5000))
        };
        L.Message.prototype.hide = function(M) {
            clearTimeout(this.hideTimer);
            this.hideTimer = null;
            if (this.messageBox && !this.hideFX) {
                this.hideFX = new B.FX(this.messageBox, {
                    duration: L.ifndef(M, 500),
                    onComplete: function() {
                        this.messageBox.kill();
                        delete this.messageBox;
                        this.hideFX = null
                    }.jBind(this)
                }).start({
                    opacity: [this.messageBox.jGetCss("opacity"), 0]
                })
            }
        };
        L.Message.prototype.setMessage = function(M) {
            this.messageBox.firstChild && this.tooltip.removeChild(this.messageBox.firstChild);
            this.messageBox.append(document.createTextNode(M))
        }
    })(B);
    (function(L) {
        if (!L) {
            throw "MagicJS not found"
        }
        if (L.Options) {
            return
        }
        var O = L.$,
            K = null,
            S = {
                "boolean": 1,
                array: 2,
                number: 3,
                "function": 4,
                string: 100
            },
            M = {
                "boolean": function(V, U, T) {
                    if ("boolean" != L.jTypeOf(U)) {
                        if (T || "string" != L.jTypeOf(U)) {
                            return false
                        } else {
                            if (!/^(true|false)$/.test(U)) {
                                return false
                            } else {
                                U = U.jToBool()
                            }
                        }
                    }
                    if (V.hasOwnProperty("enum") && !O(V["enum"]).contains(U)) {
                        return false
                    }
                    K = U;
                    return true
                },
                string: function(V, U, T) {
                    if ("string" !== L.jTypeOf(U)) {
                        return false
                    } else {
                        if (V.hasOwnProperty("enum") && !O(V["enum"]).contains(U)) {
                            return false
                        } else {
                            K = "" + U;
                            return true
                        }
                    }
                },
                number: function(W, V, U) {
                    var T = false,
                        Y = /%$/,
                        X = (L.jTypeOf(V) == "string" && Y.test(V));
                    if (U && !"number" == typeof V) {
                        return false
                    }
                    V = parseFloat(V);
                    if (isNaN(V)) {
                        return false
                    }
                    if (isNaN(W.minimum)) {
                        W.minimum = Number.NEGATIVE_INFINITY
                    }
                    if (isNaN(W.maximum)) {
                        W.maximum = Number.POSITIVE_INFINITY
                    }
                    if (W.hasOwnProperty("enum") && !O(W["enum"]).contains(V)) {
                        return false
                    }
                    if (W.minimum > V || V > W.maximum) {
                        return false
                    }
                    K = X ? (V + "%") : V;
                    return true
                },
                array: function(W, U, T) {
                    if ("string" === L.jTypeOf(U)) {
                        try {
                            U = window.JSON.parse(U)
                        } catch (V) {
                            return false
                        }
                    }
                    if (L.jTypeOf(U) === "array") {
                        K = U;
                        return true
                    } else {
                        return false
                    }
                },
                "function": function(V, U, T) {
                    if (L.jTypeOf(U) === "function") {
                        K = U;
                        return true
                    } else {
                        return false
                    }
                }
            },
            N = function(Y, X, U) {
                var W;
                W = Y.hasOwnProperty("oneOf") ? Y.oneOf : [Y];
                if ("array" != L.jTypeOf(W)) {
                    return false
                }
                for (var V = 0, T = W.length - 1; V <= T; V++) {
                    if (M[W[V].type](W[V], X, U)) {
                        return true
                    }
                }
                return false
            },
            Q = function(Y) {
                var W, V, X, T, U;
                if (Y.hasOwnProperty("oneOf")) {
                    T = Y.oneOf.length;
                    for (W = 0; W < T; W++) {
                        for (V = W + 1; V < T; V++) {
                            if (S[Y.oneOf[W]["type"]] > S[Y.oneOf[V].type]) {
                                U = Y.oneOf[W];
                                Y.oneOf[W] = Y.oneOf[V];
                                Y.oneOf[V] = U
                            }
                        }
                    }
                }
                return Y
            },
            R = function(W) {
                var V;
                V = W.hasOwnProperty("oneOf") ? W.oneOf : [W];
                if ("array" != L.jTypeOf(V)) {
                    return false
                }
                for (var U = V.length - 1; U >= 0; U--) {
                    if (!V[U].type || !S.hasOwnProperty(V[U].type)) {
                        return false
                    }
                    if (L.defined(V[U]["enum"])) {
                        if ("array" !== L.jTypeOf(V[U]["enum"])) {
                            return false
                        }
                        for (var T = V[U]["enum"].length - 1; T >= 0; T--) {
                            if (!M[V[U].type]({
                                    type: V[U].type
                                }, V[U]["enum"][T], true)) {
                                return false
                            }
                        }
                    }
                }
                if (W.hasOwnProperty("default") && !N(W, W["default"], true)) {
                    return false
                }
                return true
            },
            P = function(T) {
                this.schema = {};
                this.options = {};
                this.parseSchema(T)
            };
        L.extend(P.prototype, {
            parseSchema: function(V) {
                var U, T, W;
                for (U in V) {
                    if (!V.hasOwnProperty(U)) {
                        continue
                    }
                    T = (U + "").jTrim().jCamelize();
                    if (!this.schema.hasOwnProperty(T)) {
                        this.schema[T] = Q(V[U]);
                        if (!R(this.schema[T])) {
                            throw "Incorrect definition of the '" + U + "' parameter in " + V
                        }
                        this.options[T] = undefined
                    }
                }
            },
            set: function(U, T) {
                U = (U + "").jTrim().jCamelize();
                if (L.jTypeOf(T) == "string") {
                    T = T.jTrim()
                }
                if (this.schema.hasOwnProperty(U)) {
                    K = T;
                    if (N(this.schema[U], T)) {
                        this.options[U] = K
                    }
                    K = null
                }
            },
            get: function(T) {
                T = (T + "").jTrim().jCamelize();
                if (this.schema.hasOwnProperty(T)) {
                    return L.defined(this.options[T]) ? this.options[T] : this.schema[T]["default"]
                }
            },
            fromJSON: function(U) {
                for (var T in U) {
                    this.set(T, U[T])
                }
            },
            getJSON: function() {
                var U = L.extend({}, this.options);
                for (var T in U) {
                    if (undefined === U[T] && undefined !== this.schema[T]["default"]) {
                        U[T] = this.schema[T]["default"]
                    }
                }
                return U
            },
            fromString: function(T) {
                O(T.split(";")).jEach(O(function(U) {
                    U = U.split(":");
                    this.set(U.shift().jTrim(), U.join(":"))
                }).jBind(this))
            },
            exists: function(T) {
                T = (T + "").jTrim().jCamelize();
                return this.schema.hasOwnProperty(T)
            },
            isset: function(T) {
                T = (T + "").jTrim().jCamelize();
                return this.exists(T) && L.defined(this.options[T])
            },
            jRemove: function(T) {
                T = (T + "").jTrim().jCamelize();
                if (this.exists(T)) {
                    delete this.options[T];
                    delete this.schema[T]
                }
            }
        });
        L.Options = P
    })(B);
    (function(O) {
        if (!O) {
            throw "MagicJS not found";
            return
        }
        var N = O.$;
        if (O.SVGImage) {
            return
        }
        var M = "http://www.w3.org/2000/svg",
            L = "http://www.w3.org/1999/xlink";
        var K = function(P) {
            this.filters = {};
            this.originalImage = N(P);
            this.canvas = N(document.createElementNS(M, "svg"));
            this.canvas.setAttribute("width", this.originalImage.naturalWidth || this.originalImage.width);
            this.canvas.setAttribute("height", this.originalImage.naturalHeight || this.originalImage.height);
            this.image = N(document.createElementNS(M, "image"));
            this.image.setAttributeNS(L, "href", this.originalImage.getAttribute("src"));
            this.image.setAttribute("width", "100%");
            this.image.setAttribute("height", "100%");
            this.image.jAppendTo(this.canvas)
        };
        K.prototype.getNode = function() {
            return this.canvas
        };
        K.prototype.blur = function(P) {
            if (Math.round(P) < 1) {
                return
            }
            if (!this.filters.blur) {
                this.filters.blur = N(document.createElementNS(M, "filter"));
                this.filters.blur.setAttribute("id", "filterBlur");
                this.filters.blur.appendChild(N(document.createElementNS(M, "feGaussianBlur")).setProps({
                    "in": "SourceGraphic",
                    stdDeviation: P
                }));
                this.filters.blur.jAppendTo(this.canvas);
                this.image.setAttribute("filter", "url(#filterBlur)")
            } else {
                this.filters.blur.firstChild.setAttribute("stdDeviation", P)
            }
            return this
        };
        O.SVGImage = K
    }(B));
    var E = (function(M) {
        var L = M.$;
        var K = function(O, N) {
            this.settings = {
                cssPrefix: "magic",
                orientation: "horizontal",
                position: "bottom",
                size: {
                    units: "px",
                    width: "auto",
                    height: "auto"
                },
                sides: ["height", "width"]
            };
            this.parent = O;
            this.root = null;
            this.wrapper = null;
            this.context = null;
            this.buttons = {};
            this.items = [];
            this.selectedItem = null;
            this.scrollFX = null;
            this.resizeCallback = null;
            this.settings = M.extend(this.settings, N);
            this.rootCSS = this.settings.cssPrefix + "-thumbs";
            this.itemCSS = this.settings.cssPrefix + "-thumb";
            this.setupContent()
        };
        K.prototype = {
            setupContent: function() {
                this.root = M.$new("div").jAddClass(this.rootCSS).jAddClass(this.rootCSS + "-" + this.settings.orientation).jSetCss({
                    visibility: "hidden"
                });
                this.wrapper = M.$new("div").jAddClass(this.rootCSS + "-wrapper").jAppendTo(this.root);
                this.root.jAppendTo(this.parent);
                L(["prev", "next"]).jEach(function(N) {
                    this.buttons[N] = M.$new("button").jAddClass(this.rootCSS + "-button").jAddClass(this.rootCSS + "-button-" + N).jAppendTo(this.root).jAddEvent("btnclick tap", (function(P, O) {
                        L(P).events[0].stop().stopQueue();
                        L(P).stopDistribution();
                        this.scroll(O)
                    }).jBindAsEvent(this, N))
                }.jBind(this));
                this.buttons.prev.jAddClass(this.rootCSS + "-button-disabled");
                this.context = M.$new("ul").jAddEvent("btnclick tap", function(N) {
                    N.stop()
                })
            },
            addItem: function(O) {
                var N = M.$new("li").jAddClass(this.itemCSS).append(O).jAppendTo(this.context);
                new M.ImageLoader(O, {
                    oncomplete: this.reflow.jBind(this)
                });
                this.items.push(N);
                return N
            },
            selectItem: function(O) {
                var N = this.selectedItem || this.context.byClass(this.itemCSS + "-selected")[0];
                if (N) {
                    L(N).jRemoveClass(this.itemCSS + "-selected")
                }
                this.selectedItem = L(O);
                if (!this.selectedItem) {
                    return
                }
                this.selectedItem.jAddClass(this.itemCSS + "-selected");
                this.scroll(this.selectedItem)
            },
            run: function() {
                if (this.wrapper !== this.context.parentNode) {
                    L(this.context).jAppendTo(this.wrapper);
                    this.initDrag();
                    L(window).jAddEvent("resize", this.resizeCallback = this.reflow.jBind(this));
                    this.run.jBind(this).jDelay(1);
                    return
                }
                var N = this.parent.jGetSize();
                if (N.height > 0 && N.height > N.width) {
                    this.setOrientation("vertical")
                } else {
                    this.setOrientation("horizontal")
                }
                this.reflow();
                this.root.jSetCss({
                    visibility: ""
                })
            },
            stop: function() {
                if (this.resizeCallback) {
                    L(window).jRemoveEvent("resize", this.resizeCallback)
                }
                this.root.kill()
            },
            scroll: function(aa, Q) {
                var S = {
                        x: 0,
                        y: 0
                    },
                    ad = "vertical" == this.settings.orientation ? "top" : "left",
                    V = "vertical" == this.settings.orientation ? "height" : "width",
                    R = "vertical" == this.settings.orientation ? "y" : "x",
                    Z = this.context.parentNode.jGetSize()[V],
                    W = this.context.parentNode.jGetPosition(),
                    P = this.context.jGetSize()[V],
                    Y, N, ac, T, O, X, U, ab = [];
                if (this.scrollFX) {
                    this.scrollFX.stop()
                } else {
                    this.context.jSetCss("transition", M.browser.cssTransformProp + String.fromCharCode(32) + "0s")
                }
                if (undefined === Q) {
                    Q = 600
                }
                Y = this.context.jGetPosition();
                if ("string" == M.jTypeOf(aa)) {
                    S[R] = ("next" == aa) ? Math.max(Y[ad] - W[ad] - Z, Z - P) : Math.min(Y[ad] - W[ad] + Z, 0)
                } else {
                    if ("element" == M.jTypeOf(aa)) {
                        N = aa.jGetSize();
                        ac = aa.jGetPosition();
                        S[R] = Math.min(0, Math.max(Z - P, Y[ad] + Z / 2 - ac[ad] - N[V] / 2))
                    } else {
                        return
                    }
                }
                if (M.browser.gecko && "android" == M.browser.platform || M.browser.ieMode && M.browser.ieMode < 10) {
                    if ("string" == M.jTypeOf(aa) && S[R] == Y[ad] - W[ad]) {
                        Y[ad] += 0 === Y[ad] - W[ad] ? 30 : -30
                    }
                    S["margin-" + ad] = [((P <= Z) ? 0 : (Y[ad] - W[ad])), S[R]];
                    delete S.x;
                    delete S.y;
                    if (!this.selectorsMoveFX) {
                        this.selectorsMoveFX = new M.PFX([this.context], {
                            duration: 500
                        })
                    }
                    ab.push(S);
                    this.selectorsMoveFX.start(ab);
                    U = S["margin-" + ad][1]
                } else {
                    this.context.jSetCss({
                        transition: M.browser.cssTransformProp + String.fromCharCode(32) + Q + "ms ease",
                        transform: "translate3d(" + S.x + "px, " + S.y + "px, 0)"
                    });
                    U = S[R]
                }
                if (U >= 0) {
                    this.buttons.prev.jAddClass(this.rootCSS + "-button-disabled");
                    this.buttons.prev.disabled = true
                } else {
                    this.buttons.prev.jRemoveClass(this.rootCSS + "-button-disabled");
                    this.buttons.prev.disabled = false
                }
                if (U <= Z - P) {
                    this.buttons.next.jAddClass(this.rootCSS + "-button-disabled");
                    this.buttons.next.disabled = true
                } else {
                    this.buttons.next.jRemoveClass(this.rootCSS + "-button-disabled");
                    this.buttons.next.disabled = false
                }
                U = null
            },
            initDrag: function() {
                var P, O, Q, X, W, Z, R, V, U, Y, ae, ab, ac, aa = {
                        x: 0,
                        y: 0
                    },
                    N, T, S = 300,
                    ad = function(ah) {
                        var ag, af = 0;
                        for (ag = 1.5; ag <= 90; ag += 1.5) {
                            af += (ah * Math.cos(ag / Math.PI / 2))
                        }(X < 0) && (af *= (-1));
                        return af
                    };
                W = L(function(af) {
                    aa = {
                        x: 0,
                        y: 0
                    };
                    N = "vertical" == this.settings.orientation ? "top" : "left";
                    T = "vertical" == this.settings.orientation ? "height" : "width";
                    P = "vertical" == this.settings.orientation ? "y" : "x";
                    ab = this.context.parentNode.jGetSize()[T];
                    ae = this.context.jGetSize()[T];
                    Q = ab - ae;
                    if (Q >= 0) {
                        return
                    }
                    if (af.state == "dragstart") {
                        if (undefined === ac) {
                            ac = 0
                        }
                        this.context.jSetCssProp("transition", M.browser.cssTransformProp + String.fromCharCode(32) + "0ms");
                        Z = af[P];
                        U = af.y;
                        V = af.x;
                        Y = false
                    } else {
                        if ("dragend" == af.state) {
                            if (Y) {
                                return
                            }
                            R = ad(Math.abs(X));
                            ac += R;
                            (ac <= Q) && (ac = Q);
                            (ac >= 0) && (ac = 0);
                            aa[P] = ac;
                            this.context.jSetCssProp("transition", M.browser.cssTransformProp + String.fromCharCode(32) + S + "ms  cubic-bezier(.0, .0, .0, 1)");
                            this.context.jSetCssProp("transform", "translate3d(" + aa.x + "px, " + aa.y + "px, 0px)");
                            X = 0
                        } else {
                            if (Y) {
                                return
                            }
                            if ("horizontal" == this.settings.orientation && Math.abs(af.x - V) > Math.abs(af.y - U) || "vertical" == this.settings.orientation && Math.abs(af.x - V) < Math.abs(af.y - U)) {
                                af.stop();
                                X = af[P] - Z;
                                ac += X;
                                aa[P] = ac;
                                this.context.jSetCssProp("transform", "translate3d(" + aa.x + "px, " + aa.y + "px, 0px)");
                                if (ac >= 0) {
                                    this.buttons.prev.jAddClass(this.rootCSS + "-button-disabled")
                                } else {
                                    this.buttons.prev.jRemoveClass(this.rootCSS + "-button-disabled")
                                }
                                if (ac <= Q) {
                                    this.buttons.next.jAddClass(this.rootCSS + "-button-disabled")
                                } else {
                                    this.buttons.next.jRemoveClass(this.rootCSS + "-button-disabled")
                                }
                            } else {
                                Y = true
                            }
                        }
                        Z = af[P]
                    }
                }).jBind(this);
                this.context.jAddEvent("touchdrag", W)
            },
            reflow: function() {
                var Q, P, N, O = this.parent.jGetSize();
                if (O.height > 0 && O.height > O.width) {
                    this.setOrientation("vertical")
                } else {
                    this.setOrientation("horizontal")
                }
                Q = "vertical" == this.settings.orientation ? "height" : "width";
                P = this.context.jGetSize()[Q];
                N = this.root.jGetSize()[Q];
                if (P <= N) {
                    this.root.jAddClass("no-buttons");
                    this.context.jSetCssProp("transition", "").jGetSize();
                    this.context.jSetCssProp("transform", "translate3d(0,0,0)");
                    this.buttons.prev.jAddClass(this.rootCSS + "-button-disabled");
                    this.buttons.next.jRemoveClass(this.rootCSS + "-button-disabled")
                } else {
                    this.root.jRemoveClass("no-buttons")
                }
                if (this.selectedItem) {
                    this.scroll(this.selectedItem, 0)
                }
            },
            setOrientation: function(N) {
                if ("vertical" !== N && "horizontal" !== N || N == this.settings.orientation) {
                    return
                }
                this.root.jRemoveClass(this.rootCSS + "-" + this.settings.orientation);
                this.settings.orientation = N;
                this.root.jAddClass(this.rootCSS + "-" + this.settings.orientation);
                this.context.jSetCssProp("transition", "none").jGetSize();
                this.context.jSetCssProp("transform", "").jSetCssProp("margin", "")
            }
        };
        return K
    })(B);
    var v = q.$;
    if (typeof Object.assign !== "function") {
        Object.assign = function(N) {
            if (N == null) {
                throw new TypeError("Cannot convert undefined or null to object")
            }
            N = Object(N);
            for (var K = 1; K < arguments.length; K++) {
                var M = arguments[K];
                if (M != null) {
                    for (var L in M) {
                        if (Object.prototype.hasOwnProperty.call(M, L)) {
                            N[L] = M[L]
                        }
                    }
                }
            }
            return N
        }
    }
    if (!q.browser.cssTransform) {
        q.browser.cssTransform = q.normalizeCSS("transform").dashize()
    }
    var b = {
        zoomOn: {
            type: "string",
            "enum": ["click", "hover"],
            "default": "hover"
        },
        zoomMode: {
            oneOf: [{
                type: "string",
                "enum": ["zoom", "magnifier", "preview", "off"],
                "default": "zoom"
            }, {
                type: "boolean",
                "enum": [false]
            }],
            "default": "zoom"
        },
        zoomWidth: {
            oneOf: [{
                type: "string",
                "enum": ["auto"]
            }, {
                type: "number",
                minimum: 1
            }],
            "default": "auto"
        },
        zoomHeight: {
            oneOf: [{
                type: "string",
                "enum": ["auto"]
            }, {
                type: "number",
                minimum: 1
            }],
            "default": "auto"
        },
        zoomPosition: {
            type: "string",
            "default": "right"
        },
        zoomDistance: {
            type: "number",
            minimum: 0,
            "default": 15
        },
        zoomCaption: {
            oneOf: [{
                type: "string",
                "enum": ["bottom", "top", "off"],
                "default": "off"
            }, {
                type: "boolean",
                "enum": [false]
            }],
            "default": "off"
        },
        expand: {
            oneOf: [{
                type: "string",
                "enum": ["window", "fullscreen", "off"]
            }, {
                type: "boolean",
                "enum": [false]
            }],
            "default": "window"
        },
        expandZoomMode: {
            oneOf: [{
                type: "string",
                "enum": ["zoom", "magnifier", "off"],
                "default": "zoom"
            }, {
                type: "boolean",
                "enum": [false]
            }],
            "default": "zoom"
        },
        expandZoomOn: {
            type: "string",
            "enum": ["click", "always"],
            "default": "click"
        },
        expandCaption: {
            type: "boolean",
            "default": true
        },
        closeOnClickOutside: {
            type: "boolean",
            "default": true
        },
        history: {
            type: "boolean",
            "default": true
        },
        hint: {
            oneOf: [{
                type: "string",
                "enum": ["once", "always", "off"]
            }, {
                type: "boolean",
                "enum": [false]
            }],
            "default": "once"
        },
        smoothing: {
            type: "boolean",
            "default": true
        },
        upscale: {
            type: "boolean",
            "default": true
        },
        variableZoom: {
            type: "boolean",
            "default": false
        },
        lazyZoom: {
            type: "boolean",
            "default": false
        },
        autostart: {
            type: "boolean",
            "default": true
        },
        rightClick: {
            type: "boolean",
            "default": false
        },
        transitionEffect: {
            type: "boolean",
            "default": true
        },
        selectorTrigger: {
            type: "string",
            "enum": ["click", "hover"],
            "default": "click"
        },
        cssClass: {
            type: "string"
        },
        forceTouch: {
            type: "boolean",
            "default": false
        },
        textHoverZoomHint: {
            type: "string",
            "default": "Hover to zoom"
        },
        textClickZoomHint: {
            type: "string",
            "default": "Click to zoom"
        },
        textBtnNext: {
            type: "string",
            "default": "Next"
        },
        textBtnPrev: {
            type: "string",
            "default": "Previous"
        },
        textBtnClose: {
            type: "string",
            "default": "Close"
        },
        textExpandHint: {
            type: "string",
            "default": "Click to expand"
        }
    };
    var D = {
        zoomMode: {
            oneOf: [{
                type: "string",
                "enum": ["zoom", "magnifier", "off"],
                "default": "zoom"
            }, {
                type: "boolean",
                "enum": [false]
            }],
            "default": "zoom"
        },
        expandZoomOn: {
            type: "string",
            "enum": ["click", "always"],
            "default": "click"
        },
        textExpandHint: {
            type: "string",
            "default": "Tap or pinch to expand"
        },
        textHoverZoomHint: {
            type: "string",
            "default": "Touch to zoom"
        },
        textClickZoomHint: {
            type: "string",
            "default": "Double tap or pinch to zoom"
        }
    };
    var a = "MagicZoom";
    var j = "mz";
    var k = 20;
    var u = ["onZoomReady", "onUpdate", "onZoomIn", "onZoomOut", "onExpandOpen", "onExpandClose"];
    var w = 600;
    var x = 1.1;
    var c = 0.5;
    var e;
    var F = {};
    var t = v([]);
    var r;
    var f = window.devicePixelRatio || 1;
    var p;
    var l = true;
    var d = q.browser.features.perspective ? "translate3d(" : "translate(";
    var C = q.browser.features.perspective ? ",0)" : ")";
    var h = null;
    var G;
    var H = (function() {
        var L, O, N, M, K;
        return K
    })();
    var y = function() {
        return "mgctlbxN$MZ" + "p".toUpperCase() + " mgctlbxV$" + "v5.3.7".replace("v", "") + " mgctlbxL$" + "c".toUpperCase() + ((window.mgctlbx$Pltm && q.jTypeOf(window.mgctlbx$Pltm) === "string") ? " mgctlbxP$" + window.mgctlbx$Pltm.toLowerCase() : "")
    };

    function i(M) {
        var L, K;
        L = "";
        for (K = 0; K < M.length; K++) {
            L += String.fromCharCode(14 ^ M.charCodeAt(K))
        }
        return L
    }

    function n(M) {
        var L = [],
            K = null;
        (M && (K = v(M))) && (L = t.filter(function(N) {
            return N.placeholder === K
        }));
        return L.length ? L[0] : null
    }

    function s(M) {
        var L = v(window).jGetSize();
        var K = v(window).jGetScroll();
        M = M || 0;
        return {
            left: M,
            right: L.width - M,
            top: M,
            bottom: L.height - M,
            x: K.x,
            y: K.y
        }
    }

    function m(K) {
        return Object.assign({}, K, {
            type: K.type,
            pageX: K.pageX,
            pageY: K.pageY,
            screenX: K.screenX,
            screenY: K.screenY,
            clientX: K.clientX,
            clientY: K.clientY,
            cloned: true
        })
    }

    function I() {
        var M = q.$A(arguments);
        var L = M.shift();
        var K = F[L];
        if (K) {
            for (var N = 0; N < K.length; N++) {
                K[N].apply(null, M)
            }
        }
    }

    function g() {
        var O = arguments[0],
            K, N, L = [];
        try {
            do {
                N = O.tagName;
                if (/^[A-Za-z]*$/.test(N)) {
                    if (K = O.getAttribute("id")) {
                        if (/^[A-Za-z][-A-Za-z0-9_]*/.test(K)) {
                            N += "#" + K
                        }
                    }
                    L.push(N)
                }
                O = O.parentNode
            } while (O && O !== document.documentElement);
            L = L.reverse();
            q.addCSS(L.join(" ") + "> .mz-figure > img", {
                transition: "none",
                transform: "none"
            }, "mz-runtime-css", true);
            q.addCSS(L.join(" ") + ":not(.mz-no-rt-width-css)> .mz-figure:not(.mz-no-rt-width-css) > img", {
                width: "100% !important;"
            }, "mz-runtime-css", true)
        } catch (M) {}
    }

    function J() {
        var L = null,
            M = null,
            K = function() {
                window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
                window.dispatchEvent(new Event("resize"))
            };
        M = setInterval(function() {
            var P = window.orientation === 90 || window.orientation === -90;
            var O = window.innerHeight;
            var N = (P ? screen.availWidth : screen.availHeight) * 0.85;
            if ((L === null || L === false) && ((P && O < N) || (!P && O < N))) {
                L = true;
                K()
            } else {
                if ((L === null || L === true) && ((P && O > N) || (!P && O > N))) {
                    L = false;
                    K()
                }
            }
        }, 250);
        return M
    }

    function A() {
        q.addCSS(".magic-hidden-wrapper, .magic-temporary-img", {
            display: "block !important",
            "min-height": "0 !important",
            "min-width": "0 !important",
            "max-height": "none !important",
            "max-width": "none !important",
            width: "10px !important",
            height: "10px !important",
            position: "absolute !important",
            top: "-10000px !important",
            left: "0 !important",
            overflow: "hidden !important",
            "-webkit-transform": "none !important",
            transform: "none !important",
            "-webkit-transition": "none !important",
            transition: "none !important"
        }, "magiczoom-reset-css");
        q.addCSS(".magic-temporary-img img, .magic-temporary-img picture", {
            display: "inline-block !important",
            border: "0 !important",
            padding: "0 !important",
            "min-height": "0 !important",
            "min-width": "0 !important",
            "max-height": "none !important",
            "max-width": "none !important",
            "-webkit-transform": "none !important",
            transform: "none !important",
            "-webkit-transition": "none !important",
            transition: "none !important"
        }, "magiczoom-reset-css");
        q.addCSS(".magic-temporary-img picture, .magic-temporary-img picture > img", {
            width: "auto !important",
            height: "auto !important"
        }, "magiczoom-reset-css");
        if (q.browser.androidBrowser) {
            q.addCSS(".mobile-magic .mz-expand .mz-expand-bg", {
                display: "none !important"
            }, "magiczoom-reset-css")
        }
        if (q.browser.androidBrowser && (q.browser.uaName !== "chrome" || q.browser.uaVersion === 44)) {
            q.addCSS(".mobile-magic .mz-zoom-window.mz-magnifier, .mobile-magic .mz-zoom-window.mz-magnifier:before", {
                "border-radius": "0 !important"
            }, "magiczoom-reset-css")
        }
    }
    var o = function(N, O, L, M, K) {
        this.small = {
            src: null,
            url: null,
            dppx: 1,
            node: null,
            state: 0,
            size: {
                width: 0,
                height: 0
            },
            loaded: false
        };
        this.zoom = {
            src: null,
            url: null,
            dppx: 1,
            node: null,
            state: 0,
            size: {
                width: 0,
                height: 0
            },
            loaded: false
        };
        if (q.jTypeOf(N) === "object") {
            this.small = N
        } else {
            if (q.jTypeOf(N) === "string") {
                this.small.url = q.getAbsoluteURL(N)
            }
        }
        if (q.jTypeOf(O) === "object") {
            this.zoom = O
        } else {
            if (q.jTypeOf(O) === "string") {
                this.zoom.url = q.getAbsoluteURL(O)
            }
        }
        this.alt = "";
        this.caption = L;
        this.options = M;
        this.origin = K;
        this.callback = null;
        this.link = null;
        this.node = null
    };
    o.prototype = {
        parseNode: function(M, L, K) {
            var N = M.byTag("img")[0];
            if (K) {
                this.small.node = N || q.$new("img").jAppendTo(M)
            }
            if (f > 1) {
                this.small.url = M.getAttribute("data-image-2x");
                if (this.small.url) {
                    this.small.dppx = 2
                }
                this.zoom.url = M.getAttribute("data-zoom-image-2x");
                if (this.zoom.url) {
                    this.zoom.dppx = 2
                }
            }
            this.small.src = M.getAttribute("data-image") || M.getAttribute("rev") || (N ? N.currentSrc || N.getAttribute("src") : null);
            if (this.small.src) {
                this.small.src = q.getAbsoluteURL(this.small.src)
            }
            this.small.url = this.small.url || this.small.src;
            if (this.small.url) {
                this.small.url = q.getAbsoluteURL(this.small.url)
            }
            this.zoom.src = M.getAttribute("data-zoom-image") || M.getAttribute("href");
            if (this.zoom.src) {
                this.zoom.src = q.getAbsoluteURL(this.zoom.src)
            }
            this.zoom.url = this.zoom.url || this.zoom.src;
            if (this.zoom.url) {
                this.zoom.url = q.getAbsoluteURL(this.zoom.url)
            }
            this.caption = M.getAttribute("data-caption") || M.getAttribute("title") || L;
            this.link = M.getAttribute("data-link");
            this.origin = M;
            if (N) {
                this.alt = N.getAttribute("alt") || ""
            }
            return this
        },
        loadImg: function(K) {
            var L = null;
            if (arguments.length > 1 && q.jTypeOf(arguments[1]) === "function") {
                L = arguments[1]
            }
            if (this[K].state !== 0) {
                if (this[K].loaded) {
                    this.onload(L)
                }
                return
            }
            if (this[K].url && this[K].node && !this[K].node.getAttribute("src") && !this[K].node.getAttribute("srcset")) {
                this[K].node.setAttribute("src", this[K].url)
            }
            this[K].state = 1;
            new q.ImageLoader(this[K].node || this[K].url, {
                oncomplete: v(function(M) {
                    this[K].loaded = true;
                    this[K].state = M.ready ? 2 : -1;
                    if (M.ready) {
                        if (this[K].size.width === 0 && this[K].size.height === 0) {
                            this[K].size = M.jGetSize()
                        }
                        if (!this[K].node) {
                            this[K].node = v(M.img);
                            this[K].node.getAttribute("style");
                            this[K].node.removeAttribute("style");
                            this[K].node.alt = this.alt;
                            this[K].size.width /= this[K].dppx;
                            this[K].size.height /= this[K].dppx
                        } else {
                            this[K].node.jSetCss({
                                maxWidth: this[K].size.width,
                                maxHeight: this[K].size.height
                            });
                            if (this[K].node.currentSrc && this[K].node.currentSrc !== this[K].node.src) {
                                this[K].url = this[K].node.currentSrc
                            } else {
                                if (q.getAbsoluteURL(this[K].node.getAttribute("src") || "") !== this[K].url) {
                                    this[K].node.setAttribute("src", this[K].url)
                                }
                            }
                        }
                    }
                    this.onload(L)
                }).jBind(this)
            })
        },
        loadSmall: function() {
            this.loadImg("small", arguments[0])
        },
        loadZoom: function() {
            this.loadImg("zoom", arguments[0])
        },
        load: function() {
            this.callback = null;
            if (arguments.length > 0 && q.jTypeOf(arguments[0]) === "function") {
                this.callback = arguments[0]
            }
            this.loadSmall();
            this.loadZoom()
        },
        onload: function(K) {
            if (K) {
                K.call(null, this)
            }
            if (this.callback && this.small.loaded && this.zoom.loaded) {
                this.callback.call(null, this);
                this.callback = null;
                return
            }
        },
        loaded: function() {
            return (this.small.loaded && this.zoom.loaded)
        },
        ready: function() {
            return (this.small.state === 2 && this.zoom.state === 2)
        },
        getURL: function(L) {
            var K = L === "small" ? "zoom" : "small";
            if (!this[L].loaded || (this[L].loaded && this[L].state === 2)) {
                return this[L].url
            } else {
                if (!this[K].loaded || (this[K].loaded && this[K].state === 2)) {
                    return this[K].url
                }
            }
            return null
        },
        getNode: function(L) {
            var K = L === "small" ? "zoom" : "small";
            if (!this[L].loaded || (this[L].loaded && this[L].state === 2)) {
                return this[L].node
            } else {
                if (!this[K].loaded || (this[K].loaded && this[K].state === 2)) {
                    return this[K].node
                }
            }
            return null
        },
        jGetSize: function(L) {
            var K = L === "small" ? "zoom" : "small";
            if (!this[L].loaded || (this[L].loaded && this[L].state === 2)) {
                return this[L].size
            } else {
                if (!this[K].loaded || (this[K].loaded && this[K].state === 2)) {
                    return this[K].size
                }
            }
            return {
                width: 0,
                height: 0
            }
        },
        setSize: function(L, K) {
            this[L].size = K
        },
        getRatio: function(L) {
            var K = L === "small" ? "zoom" : "small";
            if (!this[L].loaded || (this[L].loaded && this[L].state === 2)) {
                return this[L].dppx
            } else {
                if (!this[K].loaded || (this[K].loaded && this[K].state === 2)) {
                    return this[K].dppx
                }
            }
            return 1
        },
        setCurNode: function(K) {
            this.node = this.getNode(K)
        }
    };
    var z = function(L, K) {
        this.options = new q.Options(b);
        this.option = v(function() {
            if (arguments.length > 1) {
                return this.set(arguments[0], arguments[1])
            }
            return this.get(arguments[0])
        }).jBind(this.options);
        this.touchOptions = new q.Options(D);
        this.additionalImages = [];
        this.image = null;
        this.primaryImage = null;
        this.placeholder = v(L).jAddEvent("dragstart selectstart click", function(M) {
            M.stop()
        });
        this.id = null;
        this.node = null;
        this.stubNode = null;
        this.originalImg = null;
        this.originalImgSrc = null;
        this.originalTitle = null;
        this.normalSize = {
            width: 0,
            height: 0
        };
        this.size = {
            width: 0,
            height: 0
        };
        this.zoomSize = {
            width: 0,
            height: 0
        };
        this.zoomSizeOrigin = {
            width: 0,
            height: 0
        };
        this.boundaries = {
            top: 0,
            left: 0,
            bottom: 0,
            right: 0
        };
        this.ready = false;
        this.expanded = false;
        this.activateTimer = null;
        this.resizeTimer = null;
        this.resizeCallback = v(function() {
            if (this.expanded) {
                if (G) {
                    this.expandBox.jSetCss({
                        height: window.innerHeight,
                        top: Math.abs(G.getBoundingClientRect().top)
                    })
                }
                this.image.node.jSetCss({
                    "max-height": Math.min(this.image.jGetSize("zoom").height, this.expandMaxHeight())
                });
                this.image.node.jSetCss({
                    "max-width": Math.min(this.image.jGetSize("zoom").width, this.expandMaxWidth())
                })
            }
            this.reflowZoom(arguments[0])
        }).jBind(this);
        this.onResize = v(function(M) {
            clearTimeout(this.resizeTimer);
            this.resizeTimer = v(this.resizeCallback).jDelay(10, M.type === "scroll")
        }).jBindAsEvent(this);
        this.onHistoryStateChange = v(function(M) {
            if (!M.state && this.expanded) {
                this.close()
            }
            if (M.state && M.state.mzId === this.id && !this.expanded) {
                this.expand()
            }
        }).jBindAsEvent(this);
        if (y) {
            r.append(q.$new("div", {}, {
                display: "none",
                visibility: "hidden"
            }).append(document.createTextNode(y)));
            y = undefined
        }
        this.lens = null;
        this.zoomBox = null;
        this.hint = null;
        this.hintMessage = null;
        this.hintRuns = 0;
        this.mobileZoomHint = true;
        this.loadingBox = null;
        this.loadTimer = null;
        this.thumb = null;
        this.expandBox = null;
        this.expandBg = null;
        this.expandCaption = null;
        this.expandStage = null;
        this.expandImageStage = null;
        this.expandFigure = null;
        this.navControlsLayer = null;
        this.expandNav = null;
        this.expandThumbs = null;
        this.expandGallery = [];
        this.buttons = {};
        this.startAttempts = 0;
        this.startTimer = null;
        this.start(K)
    };
    z.prototype = {
        loadOptions: function(K) {
            this.options.fromJSON(window[j + "Options"] || {});
            this.options.fromString(this.placeholder.getAttribute("data-options") || "");
            if (!q.browser.touchScreen) {
                this.option("forceTouch", false)
            }
            if (q.browser.mobile || this.option("forceTouch")) {
                this.options.fromJSON(this.touchOptions.getJSON());
                this.options.fromJSON(window[j + "MobileOptions"] || {});
                this.options.fromString(this.placeholder.getAttribute("data-mobile-options") || "")
            }
            if (q.jTypeOf(K) === "string") {
                this.options.fromString(K || "")
            } else {
                this.options.fromJSON(K || {})
            }
            if (this.option("cssClass")) {
                this.option("cssClass", this.option("cssClass").replace(",", " "))
            }
            if (this.option("zoomCaption") === false) {
                this.option("zoomCaption", "off")
            }
            if (this.option("hint") === false) {
                this.option("hint", "off")
            }
            switch (this.option("hint")) {
                case "off":
                    this.hintRuns = 0;
                    break;
                case "always":
                    this.hintRuns = Infinity;
                    break;
                case "once":
                default:
                    this.hintRuns = 2;
                    break
            }
            if (this.option("zoomMode") === "off") {
                this.option("zoomMode", false)
            }
            if (this.option("expand") === "off") {
                this.option("expand", false)
            }
            if (this.option("expandZoomMode") === "off") {
                this.option("expandZoomMode", false)
            }
            if (q.browser.mobile && this.option("zoomMode") === "zoom" && this.option("zoomPosition") === "inner") {
                if (this.option("expand")) {
                    this.option("zoomMode", false)
                } else {
                    this.option("zoomOn", "click")
                }
            }
        },
        start: function(N) {
            var L;
            var K = this;
            var M;
            if (this.startAttempts < 1) {
                this.loadOptions(N);
                if (l && !this.option("autostart")) {
                    return
                }
                this.originalImg = this.placeholder.querySelector("img");
                this.originalImgSrc = this.originalImg ? this.originalImg.getAttribute("src") : null;
                this.originalTitle = v(this.placeholder).getAttribute("title");
                v(this.placeholder).removeAttribute("title");
                if (this.originalImg && this.originalImg.parentNode.tagName === "PICTURE") {
                    this.originalImgSrc = null;
                    var R = q.$new("div").jAddClass("magic-temporary-img").jAppendTo(document.body);
                    var P = this.originalImg.parentNode.cloneNode(true);
                    P.getAttribute("style");
                    P.removeAttribute("style");
                    var O = P.querySelector("img");
                    O.getAttribute("style");
                    O.removeAttribute("style");
                    v(O).jAddEvent("load", function() {
                        K.size = v(O).jGetSize();
                        R.kill();
                        var S = K.originalImg.cloneNode(false);
                        v(S).jSetCss({
                            maxWidth: K.size.width,
                            maxHeight: K.size.height
                        }).setAttribute("src", K.originalImg.currentSrc || K.originalImg.src);
                        K.originalImg = K.placeholder.replaceChild(S, K.originalImg.parentNode);
                        K.start()
                    });
                    R.append(P);
                    ++this.startAttempts;
                    return
                }
            }
            M = new o().parseNode(this.placeholder, this.originalTitle, true);
            M.setSize("small", this.size);
            if (!M.small.url) {
                if (++this.startAttempts <= w) {
                    this.startTimer = setTimeout(function() {
                        K.start()
                    }, 100)
                }
                return
            }
            this.primaryImage = M;
            this.image = this.primaryImage;
            g(this.placeholder);
            this.id = this.placeholder.getAttribute("id") || "mz-" + Math.floor(Math.random() * q.now());
            this.placeholder.setAttribute("id", this.id);
            this.node = q.$new("figure").jAddClass("mz-figure");
            this.node.enclose(this.image.small.node).jAddClass(this.option("cssClass"));
            if (this.option("rightClick") !== true) {
                this.node.jAddEvent("contextmenu", function(S) {
                    S.stop();
                    return false
                })
            }
            this.node.jAddClass("mz-" + this.option("zoomOn") + "-zoom");
            if (!this.option("expand")) {
                this.node.jAddClass("mz-no-expand")
            }
            this.lens = {
                node: q.$new("div", {
                    "class": "mz-lens"
                }, {
                    top: 0
                }).jAppendTo(this.node),
                image: q.$new("img", {
                    src: "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="
                }, {
                    position: "absolute",
                    top: 0,
                    left: 0
                }),
                width: 0,
                height: 0,
                pos: {
                    x: 0,
                    y: 0
                },
                spos: {
                    x: 0,
                    y: 0
                },
                size: {
                    width: 0,
                    height: 0
                },
                border: {
                    x: 0,
                    y: 0
                },
                dx: 0,
                dy: 0,
                innertouch: false,
                hide: function() {
                    if (q.browser.features.transform) {
                        this.node.jSetCss({
                            transform: "translate(-10000px, -10000px)"
                        })
                    } else {
                        this.node.jSetCss({
                            top: -10000
                        })
                    }
                }
            };
            this.lens.hide();
            this.lens.node.append(this.lens.image);
            this.zoomBox = {
                node: q.$new("div", {
                    "class": "mz-zoom-window"
                }, {
                    top: -100000
                }).jAddClass(this.option("cssClass")).jAppendTo(r),
                image: q.$new("img", {
                    src: "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="
                }, {
                    position: "absolute"
                }),
                aspectRatio: 0,
                width: 0,
                height: 0,
                innerWidth: 0,
                innerHeight: 0,
                size: {
                    width: "auto",
                    wunits: "px",
                    height: "auto",
                    hunits: "px"
                },
                mode: this.option("zoomMode"),
                position: this.option("zoomPosition"),
                trigger: this.option("zoomOn"),
                custom: false,
                active: false,
                activating: false,
                enabled: false,
                enable: v(function() {
                    this.zoomBox.enabled = arguments[0] !== false;
                    this.node[this.zoomBox.enabled ? "jRemoveClass" : "jAddClass"]("mz-no-zoom")
                }).jBind(this),
                hide: v(function() {
                    var S = v(this.node).jFetch("cr");
                    this.zoomBox.node.jRemoveEvent("transitionend");
                    this.zoomBox.node.jSetCss({
                        top: -100000
                    }).jAppendTo(r);
                    this.zoomBox.node.jRemoveClass("mz-deactivating mz-p-" + (this.zoomBox.mode === "zoom" ? this.zoomBox.position : this.zoomBox.mode));
                    if (!this.expanded && S) {
                        S.jRemove()
                    }
                    this.zoomBox.image.getAttribute("style");
                    this.zoomBox.image.removeAttribute("style")
                }).jBind(this),
                setMode: v(function(S) {
                    this.node[S === false ? "jAddClass" : "jRemoveClass"]("mz-no-zoom");
                    this.node[S === "magnifier" ? "jAddClass" : "jRemoveClass"]("mz-magnifier-zoom");
                    this.zoomBox.node[S === "magnifier" ? "jAddClass" : "jRemoveClass"]("mz-magnifier");
                    this.zoomBox.node[S === "preview" ? "jAddClass" : "jRemoveClass"]("mz-preview");
                    if (S !== "zoom") {
                        this.node.jRemoveClass("mz-inner-zoom");
                        this.zoomBox.node.jRemoveClass("mz-inner")
                    }
                    this.zoomBox.mode = S;
                    if (S === false) {
                        this.zoomBox.enable(false)
                    }
                }).jBind(this)
            };
            this.zoomBox.node.append(this.zoomBox.image);
            this.zoomBox.setMode(this.option("zoomMode"));
            this.zoomBox.image.removeAttribute("width");
            this.zoomBox.image.removeAttribute("height");
            if (typeof(H) !== "undefined") {
                var Q = Math.floor(Math.random() * q.now());
                v(this.node).jStore("cr", q.$new(((Math.floor(Math.random() * 101) + 1) % 2) ? "span" : "div").setProps({
                    id: "crMz" + Q
                }).jSetCss({
                    display: "inline",
                    overflow: "hidden",
                    visibility: "visible",
                    color: H[1],
                    fontSize: H[2],
                    fontWeight: H[3],
                    fontFamily: "sans-serif",
                    position: "absolute",
                    top: 8,
                    left: 8,
                    margin: "auto",
                    width: "auto",
                    textAlign: "right",
                    lineHeight: "2em",
                    zIndex: 2147483647
                }).changeContent(i(H[0])));
                if (v(v(this.node).jFetch("cr")).byTag("a")[0]) {
                    v(v(v(this.node).jFetch("cr")).byTag("a")[0]).jAddEvent("tap btnclick", function(S) {
                        S.stopDistribution();
                        window.open(this.href)
                    }).setProps({
                        id: "mzCrA" + Q
                    })
                }
                q.addCSS("#" + this.id + " > figure.mz-figure > #" + ("crMz" + Q) + ",#" + this.id + " > figure.mz-figure > #" + ("crMz" + Q) + " > #" + ("mzCrA" + Q) + ",html body .mz-expand > #" + ("crMz" + Q) + ",html body .mz-expand > #" + ("crMz" + Q) + " > #" + ("mzCrA" + Q), {
                    display: "inline !important;",
                    visibility: "visible !important;",
                    color: H[1] + " !important;",
                    "font-size": H[2] + "px !important;",
                    "z-index": "2147483647 !important;"
                }, "mz-runtime-css", true)
            }
            if ((L = ("" + this.option("zoomWidth")).match(/^([0-9]+)?(px|%)?$/))) {
                this.zoomBox.size.wunits = L[2] || "px";
                this.zoomBox.size.width = (parseFloat(L[1]) || "auto")
            }
            if ((L = ("" + this.option("zoomHeight")).match(/^([0-9]+)?(px|%)?$/))) {
                this.zoomBox.size.hunits = L[2] || "px";
                this.zoomBox.size.height = (parseFloat(L[1]) || "auto")
            }
            if (this.zoomBox.mode === "magnifier") {
                this.node.jAddClass("mz-magnifier-zoom");
                this.zoomBox.node.jAddClass("mz-magnifier");
                if (this.zoomBox.size.width === "auto") {
                    this.zoomBox.size.wunits = "%";
                    this.zoomBox.size.width = 70
                }
                if (this.zoomBox.size.height === "auto") {
                    this.zoomBox.size.hunits = "%"
                }
            } else {
                if (this.option("zoom-position").match(/^#/)) {
                    if (this.zoomBox.custom = v(this.option("zoom-position").replace(/^#/, ""))) {
                        if (v(this.zoomBox.custom).jGetSize().height > 50) {
                            if (this.zoomBox.size.width === "auto") {
                                this.zoomBox.size.wunits = "%";
                                this.zoomBox.size.width = 100
                            }
                            if (this.zoomBox.size.height === "auto") {
                                this.zoomBox.size.hunits = "%";
                                this.zoomBox.size.height = 100
                            }
                        }
                    } else {
                        this.option("zoom-position", "right")
                    }
                }
                if (this.zoomBox.mode === "preview") {
                    if (this.zoomBox.size.width === "auto") {
                        this.zoomBox.size.wunits = "px"
                    }
                    if (this.zoomBox.size.height === "auto") {
                        this.zoomBox.size.hunits = "px"
                    }
                }
                if (this.zoomBox.mode === "zoom") {
                    if (this.zoomBox.size.width === "auto" || this.option("zoom-position") === "inner") {
                        this.zoomBox.size.wunits = "%";
                        this.zoomBox.size.width = 100
                    }
                    if (this.zoomBox.size.height === "auto" || this.option("zoom-position") === "inner") {
                        this.zoomBox.size.hunits = "%";
                        this.zoomBox.size.height = 100
                    }
                }
                if (this.option("zoom-position") === "inner") {
                    this.node.jAddClass("mz-inner-zoom")
                }
            }
            this.zoomBox.position = this.zoomBox.custom ? "custom" : this.option("zoom-position");
            this.lens.border.x = parseFloat(this.lens.node.jGetCss("border-left-width") || "0");
            this.lens.border.y = parseFloat(this.lens.node.jGetCss("border-top-width") || "0");
            this.image.loadSmall(function() {
                if (this.image.small.state !== 2) {
                    return
                }
                this.image.setCurNode("small");
                this.size = this.image.node.jGetSize();
                this.registerEvents();
                this.ready = true;
                if (this.option("lazyZoom") === true) {
                    I("onZoomReady", this.id);
                    if (q.browser.mobile) {
                        this.reflowZoom()
                    } else {
                        this.showHint()
                    }
                }
            }.jBind(this));
            if (this.option("lazyZoom") !== true || this.option("zoomOn") === "always") {
                this.image.load(v(function(S) {
                    this.setupZoom(S, true)
                }).jBind(this));
                this.loadTimer = v(this.showLoading).jBind(this).jDelay(400)
            }
            this.setupSelectors();
            this.setupButtons()
        },
        stop: function() {
            clearTimeout(this.startTimer);
            this.unregisterEvents();
            if (this.zoomBox) {
                this.zoomBox.node.kill()
            }
            if (this.expandThumbs) {
                this.expandThumbs.stop();
                this.expandThumbs = null
            }
            if (this.expandBox) {
                this.expandBox.kill()
            }
            if (this.expanded) {
                v(q.browser.getDoc()).jSetCss({
                    overflow: ""
                })
            }
            v(this.additionalImages).jEach(function(K) {
                v(K.origin).jRemoveClass("mz-thumb-selected").jRemoveClass(this.option("cssClass") || "mz-$dummy-css-class-to-jRemove$")
            }, this);
            if (this.originalImg) {
                this.placeholder.append(this.originalImg);
                if (this.originalImgSrc) {
                    this.originalImg.setAttribute("src", this.originalImgSrc)
                }
            }
            if (this.originalTitle) {
                this.placeholder.setAttribute("title", this.originalTitle)
            }
            if (this.node) {
                this.node.kill()
            }
        },
        setupZoom: function(L, M) {
            var K = this.image;
            if (L.zoom.state !== 2) {
                this.image = L;
                this.ready = true;
                this.zoomBox.enable(false);
                return
            }
            this.image = L;
            this.image.setCurNode(this.expanded ? "zoom" : "small");
            this.zoomBox.image.src = this.image.getURL("zoom");
            this.zoomBox.image.alt = this.image.alt;
            this.zoomBox.node.jRemoveClass("mz-preview");
            this.zoomBox.image.getAttribute("style");
            this.zoomBox.image.removeAttribute("style");
            this.zoomBox.node.jGetSize();
            setTimeout(v(function() {
                var O = this.zoomBox.image.jGetSize();
                var N;
                this.zoomSizeOrigin = this.image.jGetSize("zoom");
                if (O.width * O.height > 1 && O.width * O.height < this.zoomSizeOrigin.width * this.zoomSizeOrigin.height) {
                    this.zoomSizeOrigin = O
                }
                this.zoomSize = q.detach(this.zoomSizeOrigin);
                if (this.zoomBox.mode === "preview") {
                    this.zoomBox.node.jAddClass("mz-preview")
                }
                this.setCaption();
                this.lens.image.src = this.image.node.currentSrc || this.image.node.src;
                this.lens.image.alt = this.image.alt;
                this.zoomBox.enable(this.zoomBox.mode && !(this.expanded && this.zoomBox.mode === "preview"));
                this.ready = true;
                this.activateTimer = null;
                this.resizeCallback();
                this.node.jAddClass("mz-ready");
                this.hideLoading();
                if (K !== this.image) {
                    I("onUpdate", this.id, K.origin, this.image.origin);
                    if (this.nextImage) {
                        N = this.nextImage;
                        this.nextImage = null;
                        this.update(N.image, N.onswipe)
                    }
                } else {
                    if (!!M) {
                        I("onZoomReady", this.id)
                    }
                }
                if (this.initEvent) {
                    this.node.jCallEvent(this.initEvent.type, this.initEvent)
                } else {
                    if (this.expanded && this.option("expandZoomOn") === "always") {
                        this.activate()
                    } else {
                        if (!!M) {
                            this.showHint()
                        }
                    }
                }
            }).jBind(this), 256)
        },
        setupSelectors: function() {
            var L = this.id;
            var K;
            var M;
            M = new RegExp("zoom\\-id(\\s+)?:(\\s+)?" + L + "($|;)");
            if (q.browser.features.query) {
                K = q.$A(document.querySelectorAll('[data-zoom-id="' + this.id + '"]'));
                K = v(K).concat(q.$A(document.querySelectorAll('[rel*="zoom-id"]')).filter(function(N) {
                    return M.test(N.getAttribute("rel") || "")
                }))
            } else {
                K = q.$A(document.getElementsByTagName("A")).filter(function(N) {
                    return L === N.getAttribute("data-zoom-id") || M.test(N.getAttribute("rel") || "")
                })
            }
            v(K).jEach(function(O) {
                var N;
                var P;
                v(O).jAddEvent("click", function(Q) {
                    Q.stopDefaults()
                });
                N = new o().parseNode(O, this.originalTitle);
                if ((this.image.zoom.src.has(N.zoom.url) || this.image.zoom.url.has(N.zoom.url)) && (this.image.small.src.has(N.small.url) || this.image.small.url.has(N.small.url))) {
                    v(N.origin).jAddClass("mz-thumb-selected");
                    N = this.image;
                    N.origin = O
                }
                if (!N.link && this.image.link) {
                    N.link = this.image.link
                }
                P = v(function() {
                    this.update(N)
                }).jBind(this);
                v(O).jAddEvent("mousedown", function(Q) {
                    if ("stopImmediatePropagation" in Q) {
                        Q.stopImmediatePropagation()
                    }
                }, 5);
                v(O).jAddEvent("tap " + (this.option("selectorTrigger") === "hover" ? "mouseover mouseout" : "btnclick"), v(function(R, Q) {
                    if (this.updateTimer) {
                        clearTimeout(this.updateTimer)
                    }
                    this.updateTimer = false;
                    if (R.type === "mouseover") {
                        this.updateTimer = v(P).jDelay(Q)
                    } else {
                        if (R.type === "tap" || R.type === "btnclick") {
                            P()
                        }
                    }
                }).jBindAsEvent(this, 60)).jAddClass(this.option("cssClass")).jAddClass("mz-thumb");
                if (this.option("lazyZoom") !== true) {
                    N.loadSmall();
                    N.loadZoom()
                }
                this.additionalImages.push(N)
            }, this)
        },
        update: function(K, M) {
            if (!this.ready) {
                this.nextImage = {
                    image: K,
                    onswipe: M
                };
                return
            }
            if (!K || K === this.image) {
                return false
            }
            this.deactivate(null, true);
            this.ready = false;
            this.node.jRemoveClass("mz-ready");
            this.loadTimer = v(this.showLoading).jBind(this).jDelay(400);
            var L = v(function(T) {
                var N, U, S, P, O, R, Q = (q.browser.ieMode < 10) ? "jGetSize" : "getBoundingClientRect";
                this.hideLoading();
                T.setCurNode("small");
                if (!T.node) {
                    this.ready = true;
                    this.node.jAddClass("mz-ready");
                    return
                }
                this.setActiveThumb(T);
                N = this.image.node[Q]();
                if (this.expanded) {
                    T.setCurNode("zoom");
                    S = q.$new("div").jAddClass("mz-expand-bg");
                    if (q.browser.features.cssFilters || q.browser.ieMode < 10) {
                        S.append(q.$new("img", {
                            srcset: T.getURL("zoom") + " " + T.getRatio("zoom") + "x",
                            src: T.getURL("zoom"),
                            alt: T.alt
                        }).jSetCss({
                            opacity: 0
                        }))
                    } else {
                        S.append(new q.SVGImage(T.node).blur(k).getNode().jSetCss({
                            opacity: 0
                        }))
                    }
                    v(S).jSetCss({
                        "z-index": -99
                    }).jAppendTo(this.expandBox)
                }
                if (this.expanded && this.zoomBox.mode === "zoom" && this.option("expandZoomOn") === "always") {
                    v(T.node).jSetCss({
                        opacity: 0
                    }).jAppendTo(this.node);
                    U = N;
                    O = [T.node, this.image.node];
                    R = [{
                        opacity: [0, 1]
                    }, {
                        opacity: [1, 0]
                    }];
                    v(T.node).jSetCss({
                        "max-width": Math.min(T.jGetSize("zoom").width, this.expandMaxWidth()),
                        "max-height": Math.min(T.jGetSize("zoom").height, this.expandMaxHeight())
                    })
                } else {
                    this.node.jSetCss({
                        height: this.node[Q]().height
                    });
                    this.image.node.jSetCss({
                        position: "absolute",
                        top: 0,
                        left: 0,
                        bottom: 0,
                        right: 0,
                        width: "100%",
                        height: "100%",
                        "max-width": "",
                        "max-height": ""
                    });
                    v(T.node).jSetCss({
                        "max-width": Math.min(T.jGetSize(this.expanded ? "zoom" : "small").width, this.expanded ? this.expandMaxWidth() : Infinity),
                        "max-height": Math.min(T.jGetSize(this.expanded ? "zoom" : "small").height, this.expanded ? this.expandMaxHeight() : Infinity),
                        position: "relative",
                        top: 0,
                        left: 0,
                        opacity: 0,
                        transform: ""
                    }).jAppendTo(this.node);
                    U = v(T.node)[Q]();
                    if (!M) {
                        v(T.node).jSetCss({
                            "min-width": N.width,
                            height: N.height,
                            "max-width": N.width,
                            "max-height": ""
                        })
                    }
                    this.node.jSetCss({
                        height: "",
                        overflow: ""
                    }).jGetSize();
                    v(T.node).jGetSize();
                    O = [T.node, this.image.node];
                    R = [q.extend({
                        opacity: [0, 1]
                    }, M ? {
                        scale: [0.6, 1]
                    } : {
                        "min-width": [N.width, U.width],
                        "max-width": [N.width, U.width],
                        height: [N.height, U.height]
                    }), {
                        opacity: [1, 0]
                    }]
                }
                if (this.expanded) {
                    if (this.expandBg.firstChild && S.firstChild) {
                        P = v(this.expandBg.firstChild).jGetCss("opacity");
                        if (q.browser.gecko) {
                            O = O.concat([S.firstChild]);
                            R = R.concat([{
                                opacity: [0.0001, P]
                            }])
                        } else {
                            O = O.concat([S.firstChild, this.expandBg.firstChild]);
                            R = R.concat([{
                                opacity: [0.0001, P]
                            }, {
                                opacity: [P, 0.0001]
                            }])
                        }
                    }
                }
                new q.PFX(O, {
                    duration: (M || this.option("transitionEffect")) ? M ? 160 : 350 : 0,
                    transition: M ? "cubic-bezier(0.175, 0.885, 0.320, 1)" : (N.width === U.width) ? "linear" : "cubic-bezier(0.25, .1, .1, 1)",
                    onComplete: v(function() {
                        this.image.node.jRemove().getAttribute("style");
                        this.image.node.removeAttribute("style");
                        v(T.node).jSetCss(this.expanded ? {
                            width: "auto",
                            height: "auto"
                        } : {
                            width: "",
                            height: ""
                        }).jSetCss({
                            "min-width": "",
                            "min-height": "",
                            opacity: "",
                            "max-width": Math.min(T.jGetSize(this.expanded ? "zoom" : "small").width, this.expanded ? this.expandMaxWidth() : Infinity),
                            "max-height": Math.min(T.jGetSize(this.expanded ? "zoom" : "small").height, this.expanded ? this.expandMaxHeight() : Infinity)
                        });
                        if (this.expanded) {
                            this.expandBg.jRemove();
                            this.expandBg = undefined;
                            this.expandBg = S.jSetCssProp("z-index", -100);
                            v(this.expandBg.firstChild).jSetCss({
                                opacity: ""
                            });
                            if (this.expandCaption) {
                                if (T.caption) {
                                    if (T.link) {
                                        this.expandCaption.changeContent("").append(q.$new("a", {
                                            href: T.link
                                        }).jAddEvent("tap btnclick", this.openLink.jBind(this)).changeContent(T.caption))
                                    } else {
                                        this.expandCaption.changeContent(T.caption).jAddClass("mz-show")
                                    }
                                } else {
                                    this.expandCaption.jRemoveClass("mz-show")
                                }
                            }
                        }
                        this.setupZoom(T)
                    }).jBind(this),
                    onBeforeRender: v(function(V, W) {
                        if (undefined !== V.scale) {
                            W.jSetCssProp("transform", "scale(" + V.scale + ")")
                        }
                    })
                }).start(R)
            }).jBind(this);
            if (this.expanded) {
                K.load(L)
            } else {
                K.loadSmall(L)
            }
        },
        setActiveThumb: function(L) {
            var K = false;
            v(this.additionalImages).jEach(function(M) {
                v(M.origin).jRemoveClass("mz-thumb-selected");
                if (M === L) {
                    K = true
                }
            });
            if (K && L.origin) {
                v(L.origin).jAddClass("mz-thumb-selected")
            }
            if (this.expandThumbs) {
                this.expandThumbs.selectItem(L.selector)
            }
        },
        setCaption: function(K) {
            if (this.image.caption && this.option("zoomCaption") !== "off" && this.zoomBox.mode !== "magnifier") {
                if (!this.zoomBox.caption) {
                    this.zoomBox.caption = q.$new("div", {
                        "class": "mz-caption"
                    }).jAppendTo(this.zoomBox.node.jAddClass("caption-" + this.option("zoomCaption")))
                }
                this.zoomBox.caption.changeContent(this.image.caption)
            }
        },
        showHint: function(K, N, L) {
            var M;
            if (!this.expanded) {
                if (this.hintRuns <= 0) {
                    return
                }
                if (L !== true) {
                    this.hintRuns--
                }
            }
            if (N === undefined || N === null) {
                if (!this.zoomBox.active && !this.zoomBox.activating) {
                    if (this.option("zoomMode") && (this.zoomBox.enabled || !this.image.loaded()) && !(q.browser.mobile && this.option("expand") && this.zoomBox.mode === "zoom" && this.zoomBox.position === "inner")) {
                        if (this.zoomBox.trigger === "hover") {
                            N = this.option("textHoverZoomHint")
                        } else {
                            if (this.zoomBox.trigger === "click") {
                                N = this.option("textClickZoomHint")
                            }
                        }
                    } else {
                        N = this.option("expand") ? this.option("textExpandHint") : ""
                    }
                } else {
                    N = this.option("expand") ? this.option("textExpandHint") : ""
                }
            }
            if (!N) {
                this.hideHint();
                return
            }
            M = this.node;
            if (!this.hint) {
                this.hint = q.$new("div", {
                    "class": "mz-hint"
                });
                this.hintMessage = q.$new("span", {
                    "class": "mz-hint-message"
                }).append(document.createTextNode(N)).jAppendTo(this.hint);
                v(this.hint).jAppendTo(this.node)
            } else {
                v(this.hintMessage).changeContent(N)
            }
            this.hint.jSetCss({
                "transition-delay": ""
            }).jRemoveClass("mz-hint-hidden");
            if (this.expanded) {
                M = this.expandFigure
            } else {
                if ((this.zoomBox.active || this.zoomBox.activating) && this.zoomBox.mode !== "magnifier" && this.zoomBox.position === "inner") {
                    M = this.zoomBox.node
                }
            }
            if (K === true) {
                setTimeout(v(function() {
                    this.hint.jAddClass("mz-hint-hidden")
                }).jBind(this), 16)
            }
            this.hint.jAppendTo(M)
        },
        hideHint: function() {
            if (this.hint) {
                this.hint.jSetCss({
                    "transition-delay": "0ms"
                }).jAddClass("mz-hint-hidden")
            }
        },
        showLoading: function() {
            if (!this.loadingBox) {
                this.loadingBox = q.$new("div", {
                    "class": "mz-loading"
                });
                this.node.append(this.loadingBox);
                this.loadingBox.jGetSize()
            }
            this.loadingBox.jAddClass("shown")
        },
        hideLoading: function() {
            clearTimeout(this.loadTimer);
            this.loadTimer = null;
            if (this.loadingBox) {
                v(this.loadingBox).jRemoveClass("shown")
            }
        },
        setSize: function(M, Q) {
            var P = q.detach(this.zoomBox.size),
                O = (!this.expanded && this.zoomBox.custom) ? v(this.zoomBox.custom).jGetSize() : {
                    width: 0,
                    height: 0
                },
                L, K, N = this.size,
                R = {
                    x: 0,
                    y: 0
                };
            Q = Q || this.zoomBox.position;
            this.normalSize = this.image.node.jGetSize();
            this.size = this.image.node.jGetSize();
            this.boundaries = this.image.node.getBoundingClientRect();
            if (!O.height) {
                O = this.size
            }
            if (this.option("upscale") === false || this.zoomBox.mode === false || this.zoomBox.mode === "preview") {
                M = false
            }
            if (this.zoomBox.mode === "preview") {
                if (P.width === "auto") {
                    P.width = this.zoomSizeOrigin.width
                }
                if (P.height === "auto") {
                    P.height = this.zoomSizeOrigin.height
                }
            }
            if (this.expanded && this.zoomBox.mode === "magnifier") {
                P.width = 70;
                P.height = "auto"
            }
            if (this.zoomBox.mode === "magnifier" && P.height === "auto") {
                this.zoomBox.width = parseFloat(P.width / 100) * Math.min(O.width, O.height);
                this.zoomBox.height = this.zoomBox.width
            } else {
                if (this.zoomBox.mode === "zoom" && Q === "inner") {
                    this.size = this.node.jGetSize();
                    O = this.size;
                    this.boundaries = this.node.getBoundingClientRect();
                    this.zoomBox.width = O.width;
                    this.zoomBox.height = O.height
                } else {
                    this.zoomBox.width = (P.wunits === "%") ? parseFloat(P.width / 100) * O.width : parseInt(P.width);
                    this.zoomBox.height = (P.hunits === "%") ? parseFloat(P.height / 100) * O.height : parseInt(P.height)
                }
            }
            if (this.zoomBox.mode === "preview") {
                K = Math.min(Math.min(this.zoomBox.width / this.zoomSizeOrigin.width, this.zoomBox.height / this.zoomSizeOrigin.height), 1);
                this.zoomBox.width = this.zoomSizeOrigin.width * K;
                this.zoomBox.height = this.zoomSizeOrigin.height * K
            }
            this.zoomBox.width = Math.ceil(this.zoomBox.width);
            this.zoomBox.height = Math.ceil(this.zoomBox.height);
            this.zoomBox.aspectRatio = this.zoomBox.width / this.zoomBox.height;
            this.zoomBox.node.jSetCss({
                width: this.zoomBox.width,
                height: this.zoomBox.height
            });
            if (M) {
                O = this.expanded ? this.expandBox.jGetSize() : this.zoomBox.node.jGetSize();
                if (!this.expanded && (this.normalSize.width * this.normalSize.height) / (this.zoomSizeOrigin.width * this.zoomSizeOrigin.height) > 0.8) {
                    this.zoomSize.width = 1.5 * this.zoomSizeOrigin.width;
                    this.zoomSize.height = 1.5 * this.zoomSizeOrigin.height
                } else {
                    this.zoomSize = q.detach(this.zoomSizeOrigin)
                }
            }
            if (this.zoomBox.mode !== false && !this.zoomBox.active && !(this.expanded && this.option("expandZoomOn") === "always")) {
                if ((this.normalSize.width * this.normalSize.height) / (this.zoomSize.width * this.zoomSize.height) > 0.8) {
                    this.zoomSize = q.detach(this.zoomSizeOrigin);
                    this.zoomBox.enable(false)
                } else {
                    this.zoomBox.enable(true)
                }
            }
            this.zoomBox.image.jSetCss({
                width: this.zoomSize.width,
                height: this.zoomSize.height
            });
            this.zoomSize.maxWidth = this.zoomSize.width;
            this.zoomSize.maxHeight = this.zoomSize.height;
            L = this.zoomBox.node.getInnerSize();
            this.zoomBox.innerWidth = Math.ceil(L.width);
            this.zoomBox.innerHeight = Math.ceil(L.height);
            this.lens.width = Math.ceil(this.zoomBox.innerWidth / (this.zoomSize.width / this.size.width));
            this.lens.height = Math.ceil(this.zoomBox.innerHeight / (this.zoomSize.height / this.size.height));
            this.lens.node.jSetCss({
                width: this.lens.width,
                height: this.lens.height
            });
            this.lens.image.jSetCss(this.size);
            q.extend(this.lens, this.lens.node.jGetSize());
            if (this.zoomBox.active) {
                clearTimeout(this.moveTimer);
                this.moveTimer = null;
                if (this.lens.innertouch) {
                    this.lens.pos.x *= (this.size.width / N.width);
                    this.lens.pos.y *= (this.size.height / N.height);
                    R.x = this.lens.spos.x;
                    R.y = this.lens.spos.y
                } else {
                    R.x = this.boundaries.left + this.lens.width / 2 + (this.lens.pos.x * (this.size.width / N.width));
                    R.y = this.boundaries.top + this.lens.height / 2 + (this.lens.pos.y * (this.size.height / N.height))
                }
                this.animate(null, R)
            }
        },
        reflowZoom: function(O) {
            var R;
            var Q;
            var K;
            var P;
            var N;
            var M;
            var L = v(this.node).jFetch("cr");
            K = s(5);
            N = this.zoomBox.position;
            P = this.expanded ? "inner" : this.zoomBox.custom ? "custom" : this.option("zoom-position");
            M = this.expanded && this.zoomBox.mode === "zoom" ? this.expandImageStage : document.body;
            if (this.expanded) {
                K.y = 0;
                K.x = 0
            }
            if (!O) {
                this.setSize(true, P)
            }
            R = this.boundaries.top;
            if (this.zoomBox.mode !== "magnifier") {
                if (O) {
                    this.setSize(false);
                    return
                }
                switch (P) {
                    case "inner":
                    case "custom":
                        R = 0;
                        Q = 0;
                        break;
                    case "top":
                        R = this.boundaries.top - this.zoomBox.height - this.option("zoom-distance");
                        if (K.top > R) {
                            R = this.boundaries.bottom + this.option("zoom-distance");
                            P = "bottom"
                        }
                        Q = this.boundaries.left;
                        break;
                    case "bottom":
                        R = this.boundaries.bottom + this.option("zoom-distance");
                        if (K.bottom < R + this.zoomBox.height) {
                            R = this.boundaries.top - this.zoomBox.height - this.option("zoom-distance");
                            P = "top"
                        }
                        Q = this.boundaries.left;
                        break;
                    case "left":
                        Q = this.boundaries.left - this.zoomBox.width - this.option("zoom-distance");
                        if (K.left > Q && K.right >= this.boundaries.right + this.option("zoom-distance") + this.zoomBox.width) {
                            Q = this.boundaries.right + this.option("zoom-distance");
                            P = "right"
                        }
                        break;
                    case "right":
                    default:
                        Q = this.boundaries.right + this.option("zoom-distance");
                        if (K.right < Q + this.zoomBox.width && K.left <= this.boundaries.left - this.zoomBox.width - this.option("zoom-distance")) {
                            Q = this.boundaries.left - this.zoomBox.width - this.option("zoom-distance");
                            P = "left"
                        }
                        break
                }
                switch (this.option("zoom-position")) {
                    case "top":
                    case "bottom":
                        if (K.top > R || K.bottom < R + this.zoomBox.height) {
                            P = "inner"
                        }
                        break;
                    case "left":
                    case "right":
                        if (K.left > Q || K.right < Q + this.zoomBox.width) {
                            P = "inner"
                        }
                        break;
                    default:
                }
                this.zoomBox.position = P;
                if (!this.zoomBox.activating && !this.zoomBox.active) {
                    if (q.browser.mobile && !this.expanded && (this.zoomBox.mode === "zoom" || this.zoomBox.mode === false && this.option("expand"))) {
                        if (this.option("expand")) {
                            this.zoomBox.enable(P !== "inner")
                        } else {
                            if (this.option("zoomOn") !== "click") {
                                this.zoomBox.trigger = P === "inner" ? "click" : this.option("zoomOn");
                                this.unregisterActivateEvent();
                                this.unregisterDeactivateEvent();
                                this.registerActivateEvent(this.zoomBox.trigger === "click");
                                this.registerDeactivateEvent(this.zoomBox.trigger === "click" && !this.option("expand"))
                            }
                        }
                        this.showHint(false, null, !(this.option("lazyZoom") && this.image.loaded()))
                    }
                    return
                }
                this.setSize(false);
                if (O) {
                    return
                }
                if (P === "custom") {
                    M = this.zoomBox.custom;
                    K.y = 0;
                    K.x = 0
                }
                if (P === "inner") {
                    if (this.zoomBox.mode !== "preview") {
                        this.zoomBox.node.jAddClass("mz-inner");
                        this.node.jAddClass("mz-inner-zoom")
                    }
                    this.lens.hide();
                    R = this.boundaries.top + K.y;
                    Q = this.boundaries.left + K.x;
                    R = 0;
                    Q = 0;
                    if (!this.expanded) {
                        M = this.node
                    }
                } else {
                    R += K.y;
                    Q += K.x;
                    this.node.jRemoveClass("mz-inner-zoom");
                    this.zoomBox.node.jRemoveClass("mz-inner")
                }
                this.zoomBox.node.jSetCss({
                    top: R,
                    left: Q
                })
            } else {
                this.setSize(false);
                M = this.node;
                if (q.browser.mobile && !this.expanded && !this.zoomBox.activating && !this.zoomBox.active) {
                    this.showHint(false, null, !(this.option("lazyZoom") && this.image.loaded()))
                }
            }
            this.zoomBox.node[this.expanded ? "jAddClass" : "jRemoveClass"]("mz-expanded");
            if (!this.expanded && L) {
                L.jAppendTo(this.zoomBox.mode === "zoom" && P === "inner" ? this.zoomBox.node : this.node, ((Math.floor(Math.random() * 101) + 1) % 2) ? "top" : "bottom")
            }
            this.zoomBox.node.jAppendTo(M)
        },
        changeZoomLevel: function(Q) {
            var M;
            var K;
            var O;
            var N;
            var P = false;
            var L = Q.isMouse ? 5 : 3 / 54;
            if (!this.zoomBox.active) {
                return
            }
            v(Q).stop();
            L = (100 + L * Math.abs(Q.deltaY)) / 100;
            if (Q.deltaY < 0) {
                L = 1 / L
            }
            if (this.zoomBox.mode === "magnifier") {
                K = Math.max(100, Math.round(this.zoomBox.width * L));
                K = Math.min(K, this.size.width * 0.9);
                O = K / this.zoomBox.aspectRatio;
                this.zoomBox.width = Math.ceil(K);
                this.zoomBox.height = Math.ceil(O);
                this.zoomBox.node.jSetCss({
                    width: this.zoomBox.width,
                    height: this.zoomBox.height
                });
                M = this.zoomBox.node.getInnerSize();
                this.zoomBox.innerWidth = Math.ceil(M.width);
                this.zoomBox.innerHeight = Math.ceil(M.height);
                P = true
            } else {
                if (!this.expanded && this.zoomBox.mode === "zoom") {
                    K = Math.max(this.size.width, Math.round(this.zoomSize.width * L));
                    K = Math.min(K, this.zoomSize.maxWidth);
                    O = K / (this.zoomSize.maxWidth / this.zoomSize.maxHeight);
                    this.zoomSize.width = Math.ceil(K);
                    this.zoomSize.height = Math.ceil(O)
                } else {
                    return
                }
            }
            N = v(window).jGetScroll();
            this.lens.width = (this.zoomBox.innerWidth / (this.zoomSize.width / this.size.width));
            this.lens.height = (this.zoomBox.innerHeight / (this.zoomSize.height / this.size.height));
            this.lens.node.jSetCss({
                width: this.lens.width,
                height: this.lens.height
            });
            q.extend(this.lens, this.lens.node.jGetSize());
            if (this.zoomBox.active) {
                clearTimeout(this.moveTimer);
                this.moveTimer = null;
                if (P) {
                    this.moveTimer = true
                }
                this.animate(null, {
                    x: Q.x - N.x,
                    y: Q.y - N.y
                });
                if (P) {
                    this.moveTimer = null
                }
            }
        },
        registerActivateEvent: function(M) {
            var L;
            var K = M ? "dbltap btnclick" : "touchstart" + (window.navigator.pointerEnabled ? " pointerdown" : window.navigator.msPointerEnabled ? " MSPointerDown" : "") + (window.navigator.pointerEnabled ? " pointermove" : window.navigator.msPointerEnabled ? " MSPointerMove" : " mousemove");
            var N = this.node.jFetch("mz:handlers:activate:fn", (!M) ? v(function(O) {
                if (O.isTouchEvent() && !O.isPrimaryTouch()) {
                    return
                }
                if (O && O.pointerType === "touch" && O.type !== "pointerdown") {
                    return
                }
                L = (q.browser.ieMode < 9) ? q.extend({}, O) : O;
                if (!this.activateTimer) {
                    clearTimeout(this.activateTimer);
                    this.activateTimer = setTimeout(v(function() {
                        this.activate(L)
                    }).jBind(this), 120)
                }
            }).jBindAsEvent(this) : v(this.activate).jBindAsEvent(this));
            this.node.jStore("mz:handlers:activate:event", K).jAddEvent(K, N, 10)
        },
        unregisterActivateEvent: function() {
            var K = this.node.jFetch("mz:handlers:activate:event");
            var L = this.node.jFetch("mz:handlers:activate:fn");
            this.node.jRemoveEvent(K, L);
            this.node.jDel("mz:handlers:activate:fn")
        },
        registerDeactivateEvent: function(L) {
            var K = "touchend";
            if (window.navigator.pointerEnabled) {
                K += " pointerup pointerout pointermove"
            } else {
                if (window.navigator.msPointerEnabled) {
                    K += " MSPointerUp MSPointerOut MSPointerMove"
                } else {
                    K += " mouseout mousemove"
                }
            }
            if (L) {
                if (this.expanded || q.browser.mobile) {
                    K = "dbltap btnclick"
                } else {
                    K += " dbltap btnclick"
                }
            }
            var M = this.node.jFetch("mz:handlers:deactivate:fn", v(function(O) {
                if (O.isTouchEvent() && !O.isPrimaryTouch()) {
                    return
                }
                if (O && O.type === "pointerup" && O.pointerType !== "touch") {
                    return
                }
                if (O && (O.type === "pointermove" || O.type === "MSPointerMove" || O.type === "mousemove")) {
                    if (!this.ready || !this.zoomBox.enabled || !this.zoomBox.active) {
                        return
                    }
                    var N = O.getClientXY();
                    if (N.x < this.boundaries.left || N.x > this.boundaries.right || N.y < this.boundaries.top || N.y > this.boundaries.bottom) {
                        this.deactivate(O);
                        return
                    }
                } else {
                    if (this.zoomBox.node !== O.getRelated() && !((this.zoomBox.position === "inner" || this.zoomBox.mode === "magnifier") && this.zoomBox.node.hasChild(O.getRelated())) && !this.node.hasChild(O.getRelated())) {
                        this.deactivate(O);
                        return
                    }
                }
            }).jBindAsEvent(this));
            this.node.jStore("mz:handlers:deactivate:event", K).jAddEvent(K, M, 20)
        },
        unregisterDeactivateEvent: function() {
            var K = this.node.jFetch("mz:handlers:deactivate:event");
            var L = this.node.jFetch("mz:handlers:deactivate:fn");
            this.node.jRemoveEvent(K, L);
            this.node.jDel("mz:handlers:deactivate:fn")
        },
        registerAnimateEvent: function() {
            var K = "touchmove";
            if (q.browser.platform !== "android") {
                if (window.navigator.pointerEnabled) {
                    K += " pointermove"
                } else {
                    if (window.navigator.msPointerEnabled) {
                        K += " MSPointerMove"
                    } else {
                        K += " mousemove"
                    }
                }
            }
            var L = this.node.jFetch("mz:handlers:animate:fn", v(this.animate).jBindAsEvent(this));
            this.node.jStore("mz:handlers:animate:event", K).jAddEvent(K, L)
        },
        unregisterAnimateEvent: function() {
            var K = this.node.jFetch("mz:handlers:animate:event");
            var L = this.node.jFetch("mz:handlers:animate:fn");
            this.node.jRemoveEvent(K, L)
        },
        registerEvents: function() {
            this.moveBind = this.move.jBind(this);
            this.node.jAddEvent(["touchstart", window.navigator.pointerEnabled ? "pointerdown" : "MSPointerDown"], v(function(K) {
                if ((q.browser.androidBrowser) && this.option("zoomMode") && this.option("zoomOn") !== "click" && K.type === "touchstart") {
                    K.stopDefaults();
                    if (q.browser.gecko) {
                        K.stopDistribution()
                    }
                }
                if (!this.zoomBox.active) {
                    return
                }
                if (this.zoomBox.position === "inner" && K.isPrimaryTouch()) {
                    this.lens.spos = K.getClientXY()
                }
            }).jBindAsEvent(this), 10);
            this.node.jAddEvent(["touchend", window.navigator.pointerEnabled ? "pointerup" : "MSPointerUp"], v(function(K) {
                if (K.isTouchEvent() && K.isPrimaryTouch()) {
                    this.lens.touchmovement = false
                }
            }).jBindAsEvent(this), 10);
            this.registerAnimateEvent();
            if (this.option("zoomMode")) {
                this.registerActivateEvent(this.option("zoomOn") === "click");
                this.registerDeactivateEvent(this.option("zoomOn") === "click")
            }
            this.node.jAddEvent("mousedown", function(K) {
                K.stopDistribution()
            }, 10).jAddEvent("btnclick", v(function(K) {
                this.node.jRaiseEvent("MouseEvent", "click");
                if (this.expanded) {
                    this.expandBox.jCallEvent("btnclick", K)
                }
            }).jBind(this), 15);
            if (this.option("expand")) {
                this.node.jAddEvent("tap btnclick", v(this.expand).jBindAsEvent(this), 15)
            } else {
                this.node.jAddEvent("tap btnclick", v(this.openLink).jBindAsEvent(this), 15)
            }
            if (this.additionalImages.length > 1) {
                this.swipe()
            }
            if (!q.browser.mobile && this.option("variableZoom")) {
                this.node.jAddEvent("mousescroll", this.changeZoomLevel.jBindAsEvent(this))
            }
            if (q.browser.mobile) {
                this.pinchToZoom()
            }
            v(window).jAddEvent(q.browser.mobile ? "resize" : "resize scroll", this.onResize);
            if (this.option("history")) {
                v(window).jAddEvent("popstate", this.onHistoryStateChange)
            }
        },
        unregisterEvents: function() {
            if (this.node) {
                this.node.jRemoveEvent("mousescroll")
            }
            v(window).jRemoveEvent("resize scroll", this.onResize);
            if (this.option("history")) {
                v(window).jRemoveEvent("popstate", this.onHistoryStateChange)
            }
            v(this.additionalImages).jEach(function(K) {
                v(K.origin).jClearEvents()
            })
        },
        activate: function(Q) {
            var R;
            var P;
            var N;
            var O;
            var K;
            var L = 0;
            var M = 0;
            if (!this.image.loaded() || !this.ready || !this.zoomBox.enabled || this.zoomBox.active || this.zoomBox.activating) {
                if (!this.image.loaded() && !this.initEvent) {
                    if (Q) {
                        this.initEvent = m(Q);
                        Q.stopQueue()
                    }
                    this.image.load(this.setupZoom.jBind(this));
                    if (!this.loadTimer) {
                        this.loadTimer = v(this.showLoading).jBind(this).jDelay(400)
                    }
                }
                return
            }
            if (Q && Q.type === "pointermove" && Q.pointerType === "touch") {
                return
            }
            if (!this.option("zoomMode") && this.option("expand") && !this.expanded) {
                this.zoomBox.active = true;
                return
            }
            this.zoomBox.activating = true;
            if (this.expanded && this.zoomBox.mode === "zoom") {
                O = this.image.node.jGetRect();
                this.expandStage.jAddClass("mz-zoom-in");
                K = this.expandFigure.jGetRect();
                M = ((O.left + O.right) / 2 - (K.left + K.right) / 2);
                L = ((O.top + O.bottom) / 2 - (K.top + K.bottom) / 2)
            }
            this.zoomBox.image.jRemoveEvent("transitionend");
            this.zoomBox.node.jRemoveClass("mz-deactivating").jRemoveEvent("transitionend");
            this.zoomBox.node.jAddClass("mz-activating");
            this.node.jAddClass("mz-activating");
            this.reflowZoom();
            P = (this.zoomBox.mode === "zoom") ? this.zoomBox.position : this.zoomBox.mode;
            if (q.browser.features.transition && !(this.expanded && this.option("expandZoomOn") === "always")) {
                if (P === "inner") {
                    N = this.image.node.jGetSize();
                    this.zoomBox.image.jSetCss({
                        transform: "translate3d(0," + L + "px, 0) scale(" + N.width / this.zoomSize.width + ", " + N.height / this.zoomSize.height + ")"
                    }).jGetSize();
                    this.zoomBox.image.jAddEvent("transitionend", v(function() {
                        this.zoomBox.image.jRemoveEvent("transitionend");
                        this.zoomBox.node.jRemoveClass("mz-activating mz-p-" + P);
                        this.zoomBox.activating = false;
                        this.zoomBox.active = true
                    }).jBind(this));
                    this.zoomBox.node.jAddClass("mz-p-" + P).jGetSize();
                    if (!q.browser.mobile && q.browser.chrome && (q.browser.uaName === "chrome" || q.browser.uaName === "opera")) {
                        this.zoomBox.activating = false;
                        this.zoomBox.active = true
                    }
                } else {
                    this.zoomBox.node.jAddEvent("transitionend", v(function() {
                        this.zoomBox.node.jRemoveEvent("transitionend");
                        this.zoomBox.node.jRemoveClass("mz-activating mz-p-" + P)
                    }).jBind(this));
                    this.zoomBox.node.jSetCss({
                        transition: "none"
                    });
                    this.zoomBox.node.jAddClass("mz-p-" + P).jGetSize();
                    this.zoomBox.node.jSetCss({
                        transition: ""
                    }).jGetSize();
                    this.zoomBox.node.jRemoveClass("mz-p-" + P);
                    this.zoomBox.activating = false;
                    this.zoomBox.active = true
                }
            } else {
                this.zoomBox.node.jRemoveClass("mz-activating");
                this.zoomBox.activating = false;
                this.zoomBox.active = true
            }
            if (!this.expanded) {
                this.showHint(true)
            }
            if (Q) {
                Q.stop().stopQueue();
                R = Q.getClientXY();
                if (this.zoomBox.mode === "magnifier" && (/tap/i).test(Q.type)) {
                    R.y -= this.zoomBox.height / 2 + 10
                }
                if (P === "inner" && ((/tap/i).test(Q.type) || Q.isTouchEvent())) {
                    this.lens.pos = {
                        x: 0,
                        y: 0
                    };
                    R.x = -(R.x - this.boundaries.left - this.size.width / 2) * (this.zoomSize.width / this.size.width);
                    R.y = -(R.y - this.boundaries.top - this.size.height / 2) * (this.zoomSize.height / this.size.height)
                }
            } else {
                R = {
                    x: this.boundaries.left + (this.boundaries.right - this.boundaries.left) / 2,
                    y: this.boundaries.top + (this.boundaries.bottom - this.boundaries.top) / 2
                };
                if (q.browser.mobile && this.expanded && this.option("expandZoomOn") === "always") {
                    this.lens.innertouch = true;
                    this.lens.pos = {
                        x: 0,
                        y: 0
                    };
                    R.x = -(R.x - this.boundaries.left - this.size.width / 2) * (this.zoomSize.width / this.size.width);
                    R.y = -(R.y - this.boundaries.top - this.size.height / 2) * (this.zoomSize.height / this.size.height)
                }
            }
            this.node.jRemoveClass("mz-activating").jAddClass("mz-active");
            R.x += -M;
            R.y += -L;
            this.lens.spos = {
                x: 0,
                y: 0
            };
            this.lens.dx = 0;
            this.lens.dy = 0;
            this.animate(Q, R, true);
            I("onZoomIn", this.id)
        },
        deactivate: function(M, R) {
            var P;
            var N;
            var K;
            var L;
            var O = 0;
            var Q = 0;
            var S = this.zoomBox.active;
            this.initEvent = null;
            if (!this.ready) {
                return
            }
            if (M && M.type === "pointerout" && M.pointerType === "touch") {
                return
            }
            clearTimeout(this.moveTimer);
            this.moveTimer = null;
            clearTimeout(this.activateTimer);
            this.activateTimer = null;
            this.zoomBox.activating = false;
            this.zoomBox.active = false;
            if (R !== true && !this.expanded) {
                if (S) {
                    if (q.browser.mobile && !this.expanded && this.zoomBox.mode === "zoom") {
                        this.reflowZoom()
                    } else {
                        this.showHint()
                    }
                }
            }
            if (!this.zoomBox.enabled) {
                return
            }
            if (M) {
                M.stop()
            }
            this.zoomBox.image.jRemoveEvent("transitionend");
            this.zoomBox.node.jRemoveClass("mz-activating").jRemoveEvent("transitionend");
            if (this.expanded) {
                L = this.expandFigure.jGetRect();
                if (this.option("expandZoomOn") !== "always") {
                    this.expandStage.jRemoveClass("mz-zoom-in")
                }
                this.image.node.jSetCss({
                    "max-height": this.expandMaxHeight()
                });
                K = this.image.node.jGetRect();
                Q = ((K.left + K.right) / 2 - (L.left + L.right) / 2);
                O = ((K.top + K.bottom) / 2 - (L.top + L.bottom) / 2)
            }
            P = (this.zoomBox.mode === "zoom") ? this.zoomBox.position : this.zoomBox.mode;
            if (q.browser.features.transition && M && !(this.expanded && this.option("expandZoomOn") === "always")) {
                if (P === "inner") {
                    this.zoomBox.image.jAddEvent("transitionend", v(function() {
                        this.zoomBox.image.jRemoveEvent("transitionend");
                        this.node.jRemoveClass("mz-active");
                        setTimeout(v(function() {
                            this.zoomBox.hide()
                        }).jBind(this), 32)
                    }).jBind(this));
                    N = this.image.node.jGetSize();
                    this.zoomBox.node.jAddClass("mz-deactivating mz-p-" + P).jGetSize();
                    this.zoomBox.image.jSetCss({
                        transform: "translate3d(0," + O + "px,0) scale(" + N.width / this.zoomSize.maxWidth + ", " + N.height / this.zoomSize.maxHeight + ")"
                    })
                } else {
                    this.zoomBox.node.jAddEvent("transitionend", v(function() {
                        this.zoomBox.hide();
                        this.node.jRemoveClass("mz-active")
                    }).jBind(this));
                    this.zoomBox.node.jGetCss("opacity");
                    this.zoomBox.node.jAddClass("mz-deactivating mz-p-" + P);
                    this.node.jRemoveClass("mz-active")
                }
            } else {
                this.zoomBox.hide();
                this.node.jRemoveClass("mz-active")
            }
            this.lens.dx = 0;
            this.lens.dy = 0;
            this.lens.spos = {
                x: 0,
                y: 0
            };
            this.lens.hide();
            if (S) {
                I("onZoomOut", this.id)
            }
        },
        animate: function(U, T, S) {
            var M = T;
            var O;
            var N;
            var Q = 0;
            var L;
            var P = 0;
            var K;
            var V;
            var R = false;
            if (!this.zoomBox.active && !S) {
                return
            }
            if (U) {
                v(U).stopDefaults().stopDistribution();
                if (U.isTouchEvent() && !U.isPrimaryTouch()) {
                    return
                }
                R = (/tap/i).test(U.type) || U.isTouchEvent();
                if (R && !this.lens.touchmovement) {
                    this.lens.touchmovement = R
                }
                if (!M) {
                    M = U.getClientXY()
                }
            }
            if (this.zoomBox.mode === "preview") {
                return
            }
            if (this.zoomBox.mode === "zoom" && this.zoomBox.position === "inner" && (U && R || !U && this.lens.innertouch)) {
                this.lens.innertouch = true;
                O = this.lens.pos.x + (M.x - this.lens.spos.x);
                N = this.lens.pos.y + (M.y - this.lens.spos.y);
                this.lens.spos = M;
                Q = Math.min(0, this.zoomBox.innerWidth - this.zoomSize.width) / 2;
                L = -Q;
                P = Math.min(0, this.zoomBox.innerHeight - this.zoomSize.height) / 2;
                K = -P
            } else {
                this.lens.innertouch = false;
                if (this.zoomBox.mode === "magnifier") {
                    M.y = Math.max(this.boundaries.top, Math.min(M.y, this.boundaries.bottom));
                    M.x = Math.max(this.boundaries.left, Math.min(M.x, this.boundaries.right))
                }
                O = M.x - this.boundaries.left;
                N = M.y - this.boundaries.top;
                L = this.size.width - this.lens.width;
                K = this.size.height - this.lens.height;
                O -= this.lens.width / 2;
                N -= this.lens.height / 2
            }
            if (this.zoomBox.mode !== "magnifier") {
                O = Math.max(Q, Math.min(O, L));
                N = Math.max(P, Math.min(N, K))
            }
            this.lens.pos.x = O;
            this.lens.pos.y = N;
            if (this.zoomBox.mode === "zoom") {
                if (q.browser.features.transform) {
                    this.lens.node.jSetCss({
                        transform: "translate(" + this.lens.pos.x + "px," + this.lens.pos.y + "px)"
                    });
                    this.lens.image.jSetCss({
                        transform: "translate(" + -(this.lens.pos.x + this.lens.border.x) + "px, " + -(this.lens.pos.y + this.lens.border.y) + "px)"
                    })
                } else {
                    this.lens.node.jSetCss({
                        top: this.lens.pos.y,
                        left: this.lens.pos.x
                    });
                    this.lens.image.jSetCss({
                        top: -(this.lens.pos.y + this.lens.border.y),
                        left: -(this.lens.pos.x + this.lens.border.x)
                    })
                }
            }
            if (this.zoomBox.mode === "magnifier") {
                if (this.lens.touchmovement && !(U && U.type === "dbltap")) {
                    M.y -= this.zoomBox.height / 2 + 10
                }
                this.zoomBox.node.jSetCss({
                    top: M.y - this.boundaries.top - this.zoomBox.height / 2,
                    left: M.x - this.boundaries.left - this.zoomBox.width / 2
                })
            }
            if (!this.moveTimer) {
                this.lens.dx = 0;
                this.lens.dy = 0;
                this.move(1)
            }
        },
        move: function(P) {
            var N;
            var L;
            var K;
            var Q;
            var O;
            var M;
            if (!isFinite(P)) {
                if (this.lens.innertouch) {
                    P = this.lens.touchmovement ? 0.4 : 0.16
                } else {
                    P = this.option("smoothing") ? 0.2 : this.lens.touchmovement ? 0.4 : 0.8
                }
            }
            N = ((this.lens.pos.x - this.lens.dx) * P);
            L = ((this.lens.pos.y - this.lens.dy) * P);
            this.lens.dx += N;
            this.lens.dy += L;
            if (!this.moveTimer || Math.abs(N) > 0.000001 || Math.abs(L) > 0.000001) {
                if (this.lens.innertouch) {
                    K = this.lens.dx;
                    Q = this.lens.dy
                } else {
                    K = (this.lens.dx * (this.zoomSize.width / this.size.width) - Math.max(0, this.zoomSize.width - this.zoomBox.innerWidth) / 2);
                    Q = (this.lens.dy * (this.zoomSize.height / this.size.height) - Math.max(0, this.zoomSize.height - this.zoomBox.innerHeight) / 2);
                    if (this.zoomBox.mode === "magnifier") {
                        K = Math.round(K);
                        Q = Math.round(Q)
                    }
                    K = -K;
                    Q = -Q
                }
                O = this.zoomSize.width / this.zoomSize.maxWidth;
                M = this.zoomSize.height / this.zoomSize.maxHeight;
                this.zoomBox.image.jSetCss(q.browser.features.transform ? {
                    transform: d + K + "px," + Q + "px" + C + " scale(" + O + "," + M + ")"
                } : {
                    width: this.zoomSize.width,
                    height: this.zoomSize.height,
                    left: -(this.lens.dx * (this.zoomSize.width / this.size.width) + Math.min(0, this.zoomSize.width - this.zoomBox.innerWidth) / 2),
                    top: -(this.lens.dy * (this.zoomSize.height / this.size.height) + Math.min(0, this.zoomSize.height - this.zoomBox.innerHeight) / 2)
                })
            }
            if (this.zoomBox.mode === "magnifier") {
                return
            }
            this.moveTimer = setTimeout(this.moveBind, 16)
        },
        swipe: function() {
            var W;
            var M;
            var R = 30;
            var O = 201;
            var T;
            var U = "";
            var L = {};
            var K;
            var Q;
            var V = 0;
            var X = {
                transition: q.browser.cssTransform + String.fromCharCode(32) + "300ms cubic-bezier(.18,.35,.58,1)"
            };
            var N;
            var S;
            var P = v(function(Y) {
                if (!this.ready || this.zoomBox.active) {
                    return
                }
                if (Y.state === "dragstart") {
                    clearTimeout(this.activateTimer);
                    this.activateTimer = null;
                    V = 0;
                    L = {
                        x: Y.x,
                        y: Y.y,
                        ts: Y.timeStamp
                    };
                    W = this.size.width;
                    M = W / 2;
                    this.image.node.jRemoveEvent("transitionend");
                    this.image.node.jSetCssProp("transition", "");
                    this.image.node.jSetCssProp("transform", "translate3d(0, 0, 0)");
                    S = null
                } else {
                    K = (Y.x - L.x);
                    Q = {
                        x: 0,
                        y: 0,
                        z: 0
                    };
                    if (S === null) {
                        S = (Math.abs(Y.x - L.x) < Math.abs(Y.y - L.y))
                    }
                    if (S) {
                        return
                    }
                    Y.stop();
                    if (Y.state === "dragend") {
                        V = 0;
                        N = null;
                        T = Y.timeStamp - L.ts;
                        if (Math.abs(K) > M || (T < O && Math.abs(K) > R)) {
                            if ((U = (K > 0) ? "backward" : (K <= 0) ? "forward" : "")) {
                                if (U === "backward") {
                                    N = this.getPrev();
                                    V += W * 10
                                } else {
                                    N = this.getNext();
                                    V -= W * 10
                                }
                            }
                        }
                        Q.x = V;
                        Q.deg = -90 * (Q.x / W);
                        this.image.node.jAddEvent("transitionend", v(function(Z) {
                            this.image.node.jRemoveEvent("transitionend");
                            this.image.node.jSetCssProp("transition", "");
                            if (N) {
                                this.image.node.jSetCss({
                                    transform: "translate3d(" + Q.x + "px, 0px, 0px)"
                                });
                                this.update(N, true)
                            }
                        }).jBind(this));
                        this.image.node.jSetCss(X);
                        this.image.node.jSetCss({
                            "transition-duration": Q.x ? "100ms" : "300ms",
                            opacity: 1 - 0.2 * Math.abs(Q.x / W),
                            transform: "translate3d(" + Q.x + "px, 0px, 0px)"
                        });
                        K = 0;
                        return
                    }
                    Q.x = K;
                    Q.z = -50 * Math.abs(Q.x / M);
                    Q.deg = -60 * (Q.x / M);
                    this.image.node.jSetCss({
                        opacity: 1 - 0.2 * Math.abs(Q.x / M),
                        transform: "translate3d(" + Q.x + "px, 0px, " + Q.z + "px)"
                    })
                }
            }).jBind(this);
            this.node.jAddEvent("touchdrag", P)
        },
        pinchToZoom: function() {
            var M = {
                width: 0,
                height: 0
            };
            var O = false;
            var N;
            var L = v(function(T, P, S) {
                var Q;
                var R;
                if (!this.zoomBox.active && !S) {
                    return
                }
                var U = q.detach(this.zoomSize);
                Q = Math.max(N.width, Math.round(M.width * T));
                Q = Math.min(Q, this.zoomSize.maxWidth);
                R = Q / (this.zoomSize.maxWidth / this.zoomSize.maxHeight);
                this.zoomSize.width = Math.floor(Q);
                this.zoomSize.height = Math.floor(R);
                this.lens.width = Math.ceil(this.zoomBox.innerWidth / (this.zoomSize.width / N.width));
                this.lens.height = Math.ceil(this.zoomBox.innerHeight / (this.zoomSize.height / N.height));
                this.lens.node.jSetCss({
                    width: this.lens.width,
                    height: this.lens.height
                });
                q.extend(this.lens, this.lens.node.jGetSize());
                clearTimeout(this.moveTimer);
                this.moveTimer = null;
                P.x = this.lens.spos.x * (this.zoomSize.width / U.width) + (P.x - this.boundaries.left - this.size.width / 2) * (1 - (this.zoomSize.width / U.width));
                P.y = this.lens.spos.y * (this.zoomSize.height / U.height) + (P.y - this.boundaries.top - this.size.height / 2) * (1 - (this.zoomSize.height / U.height));
                this.lens.spos = {
                    x: 0,
                    y: 0
                };
                this.lens.pos = {
                    x: 0,
                    y: 0
                };
                this.lens.innertouch = true;
                this.animate(null, {
                    x: P.x,
                    y: P.y
                });
                clearTimeout(this.moveTimer);
                this.moveTimer = null
            }).jBind(this);
            var K = v(function(R) {
                if (!O && R.state !== "pinchstart" && !R.cloned) {
                    return
                }
                R.stop();
                var Q = v(window).jGetScroll();
                var P = false;
                var S = {
                    x: R.centerPoint.x - Q.x,
                    y: R.centerPoint.y - Q.y
                };
                switch (R.state) {
                    case "pinchstart":
                        this.unregisterAnimateEvent();
                        M = q.detach(this.zoomSize);
                        if (this.expanded) {
                            N = this.image.node.jGetSize()
                        } else {
                            N = this.size
                        }
                        clearTimeout(this.moveTimer);
                        this.moveTimer = null;
                        if (this.zoomBox.active) {
                            this.lens.spos = q.detach(this.lens.pos)
                        }
                        O = true;
                        break;
                    case "pinchend":
                        O = false;
                        if (this.zoomBox.active) {
                            if (this.option("expandZoomOn") !== "always" && this.zoomSize.width <= N.width && this.zoomSize.height <= N.height) {
                                O = false;
                                this.deactivate(null)
                            } else {
                                if (R.points.length > 0) {
                                    this.lens.spos = {
                                        x: R.points[0].clientX,
                                        y: R.points[0].clientY
                                    }
                                }
                            }
                        }
                        this.registerAnimateEvent();
                        break;
                    case "pinchresize":
                        break;
                    case "pinchmove":
                        if (this.expanded && R.zoom === -1 && (!this.zoomBox.active || this.option("expandZoomOn") === "always")) {
                            if (R.scale < c) {
                                this.close()
                            }
                        } else {
                            if (this.expanded && R.zoom === 1 && this.option("expandZoomOn") === "always") {} else {
                                if (this.option("expand") && !this.expanded) {
                                    if (R.scale > x) {
                                        O = false;
                                        this.registerAnimateEvent();
                                        this.expand(R);
                                        return
                                    }
                                } else {
                                    if (R.zoom === 1 && !this.zoomBox.active) {
                                        if (!this.image.loaded() || !this.ready || !this.zoomBox.enabled) {
                                            if (!this.image.loaded() && !this.initEvent) {
                                                if (R) {
                                                    this.initEvent = m(R);
                                                    R.stopQueue()
                                                }
                                                this.image.load(this.setupZoom.jBind(this));
                                                if (!this.loadTimer) {
                                                    this.loadTimer = v(this.showLoading).jBind(this).jDelay(400)
                                                }
                                            }
                                            return
                                        }
                                        this.zoomBox.activating = true;
                                        if (this.expanded && this.zoomBox.mode === "zoom") {
                                            this.expandStage.jAddClass("mz-zoom-in")
                                        }
                                        this.zoomBox.image.jRemoveEvent("transitionend");
                                        this.zoomBox.node.jRemoveClass("mz-deactivating").jRemoveEvent("transitionend");
                                        this.zoomBox.node.jAddClass("mz-activating");
                                        this.node.jAddClass("mz-activating");
                                        this.reflowZoom();
                                        this.zoomSize.width = N.width;
                                        this.zoomSize.height = N.height;
                                        this.zoomBox.activating = false;
                                        this.zoomBox.active = true;
                                        M = q.detach(this.zoomSize);
                                        this.zoomBox.node.jRemoveClass("mz-activating");
                                        this.node.jRemoveClass("mz-activating").jAddClass("mz-active");
                                        this.lens.spos = {
                                            x: 0,
                                            y: 0
                                        };
                                        this.lens.pos = {
                                            x: 0,
                                            y: 0
                                        };
                                        P = true;
                                        if (!this.expanded) {
                                            this.showHint(true)
                                        }
                                    }
                                    L(R.scale, S, P);
                                    if (P) {
                                        I("onZoomIn", this.id)
                                    }
                                }
                            }
                        }
                        break
                }
            }).jBind(this);
            this.node.jAddEvent("pinch", K)
        },
        setupButtons: function() {
            var K = document.createDocumentFragment();
            v(["prev", "next", "close"]).jEach(function(M) {
                var L = "mz-button";
                this.buttons[M] = q.$new("button", {
                    type: "button",
                    title: this.option("text-btn-" + M)
                }).jAddClass(L).jAddClass(L + "-" + M);
                K.appendChild(this.buttons[M]);
                switch (M) {
                    case "prev":
                        this.buttons[M].jAddEvent("tap btnclick", function(N) {
                            N.stop();
                            this.update(this.getPrev())
                        }.jBindAsEvent(this));
                        break;
                    case "next":
                        this.buttons[M].jAddEvent("tap btnclick", function(N) {
                            N.stop();
                            this.update(this.getNext())
                        }.jBindAsEvent(this));
                        break;
                    case "close":
                        this.buttons[M].jAddEvent("tap btnclick", function(N) {
                            N.stop();
                            this.close()
                        }.jBindAsEvent(this)).hide();
                        break;
                    default:
                }
            }, this);
            this.toggleNavButtons(this.additionalImages.length > 1);
            this.navControlsLayer = q.$new("div").jAddClass("mz-nav-controls").append(K).jAppendTo(this.node)
        },
        toggleNavButtons: function(K) {
            if (K) {
                this.buttons.next.show();
                this.buttons.prev.show()
            } else {
                this.buttons.next.hide();
                this.buttons.prev.hide()
            }
        },
        setupExpandGallery: function() {
            var L;
            var K;
            if (this.additionalImages.length) {
                this.expandGallery = this.additionalImages
            } else {
                L = this.placeholder.getAttribute("data-gallery");
                if (L) {
                    if (q.browser.features.query) {
                        K = q.$A(document.querySelectorAll('.MagicZoom[data-gallery="' + L + '"], .MagicZoomPlus[data-gallery="' + L + '"]'))
                    } else {
                        K = q.$A(document.getElementsByTagName("A")).filter(function(M) {
                            return L === M.getAttribute("data-gallery")
                        })
                    }
                    v(K).jEach(function(N) {
                        var M;
                        var O;
                        M = n(N);
                        if (M && M.additionalImages.length > 0) {
                            return
                        }
                        if (M) {
                            O = new o(M.image.small.url, M.image.zoom.url, M.image.caption, null, M.image.origin);
                            O.link = M.image.link;
                            O.alt = M.image.alt
                        } else {
                            O = new o().parseNode(N, M ? M.originalTitle : null)
                        }
                        if ((this.image.zoom.src.has(O.zoom.url) || this.image.zoom.url.has(O.zoom.url)) && (this.image.small.src.has(O.small.url) || this.image.small.url.has(O.small.url))) {
                            O = this.image
                        }
                        this.expandGallery.push(O)
                    }, this);
                    this.primaryImage = this.image
                }
            }
            if (!this.expandedViewId) {
                this.expandedViewId = Math.floor(Math.random() * q.now())
            }
            if (this.expandGallery.length > 1) {
                this.expandStage.jAddClass("with-thumbs");
                this.expandNav = q.$new("div", {
                    "class": "mz-expand-thumbnails"
                }).jAppendTo(this.expandStage);
                this.expandThumbs = new E(this.expandNav);
                v(this.expandGallery).jEach(function(M) {
                    var N = v(function(O) {
                        this.setActiveThumb(M);
                        this.update(M)
                    }).jBind(this);
                    M.selector = this.expandThumbs.addItem(q.$new("img", {
                        src: M.getURL("small"),
                        alt: M.alt
                    }).jAddEvent("tap btnclick", function(O) {
                        O.stop()
                    }).jAddEvent("tap " + (this.option("selectorTrigger") === "hover" ? "mouseover mouseout" : "btnclick"), v(function(P, O) {
                        if (this.updateTimer) {
                            clearTimeout(this.updateTimer)
                        }
                        this.updateTimer = false;
                        if (P.type === "mouseover") {
                            this.updateTimer = v(N).jDelay(O)
                        } else {
                            if (P.type === "tap" || P.type === "btnclick") {
                                N()
                            }
                        }
                    }).jBindAsEvent(this, 60)))
                }, this)
            } else {
                this.expandStage.jRemoveClass("with-thumbs")
            }
            this.toggleNavButtons(this.expandGallery.length > 1);
            this.buttons.close.show()
        },
        destroyExpandGallery: function() {
            var K;
            if (this.expandThumbs) {
                this.expandThumbs.stop();
                this.expandThumbs = null
            }
            if (this.expandNav) {
                this.expandNav.jRemove();
                this.expandNav = null
            }
            this.toggleNavButtons(this.additionalImages.length > 1);
            this.buttons.close.hide();
            if (this.expandGallery.length > 1 && !this.additionalImages.length) {
                this.node.jRemoveEvent("touchdrag");
                this.image.node.jRemove().getAttribute("style");
                this.image.node.removeAttribute("style");
                this.primaryImage.node.jAppendTo(this.node);
                this.setupZoom(this.primaryImage);
                while (K = this.expandGallery.pop()) {
                    if (K !== this.primaryImage) {
                        if (K.small.node) {
                            K.small.node.kill();
                            K.small.node = null
                        }
                        if (K.zoom.node) {
                            K.zoom.node.kill();
                            K.zoom.node = null
                        }
                        K = null
                    }
                }
            }
            this.expandGallery = []
        },
        close: function() {
            if (!this.ready || !this.expanded) {
                return
            }
            if (q.browser.platform === "ios" && q.browser.uaName === "safari" && parseInt(q.browser.uaVersion) === 7) {
                clearInterval(h);
                h = null
            }
            v(document).jRemoveEvent("keydown", this.keyboardCallback);
            this.deactivate(null, true);
            this.ready = false;
            if (q.browser.fullScreen.capable && q.browser.fullScreen.enabled()) {
                q.browser.fullScreen.cancel()
            } else {
                if (q.browser.features.transition) {
                    this.node.jRemoveEvent("transitionend").jSetCss({
                        transition: ""
                    });
                    this.node.jAddEvent("transitionend", this.onClose);
                    if (q.browser.webkit) {
                        setTimeout(v(function() {
                            this.onClose()
                        }).jBind(this), 260)
                    }
                    this.expandBg.jRemoveEvent("transitionend").jSetCss({
                        transition: ""
                    });
                    this.expandBg.jSetCss({
                        transition: "all 0.6s cubic-bezier(0.895, 0.030, 0.685, 0.220) 0.0s"
                    }).jGetSize();
                    this.node.jSetCss({
                        transition: "all .3s cubic-bezier(0.600, 0, 0.735, 0.045) 0s"
                    }).jGetSize();
                    if (this.zoomBox.mode !== false && this.option("expandZoomOn") === "always" && this.option("expandZoomMode") !== "magnifier") {
                        this.image.node.jSetCss({
                            "max-height": this.image.jGetSize("zoom").height
                        });
                        this.image.node.jSetCss({
                            "max-width": this.image.jGetSize("zoom").width
                        })
                    }
                    this.expandBg.jSetCss({
                        opacity: 0.4
                    });
                    this.node.jSetCss({
                        opacity: 0.01,
                        transform: "scale(0.4)"
                    })
                } else {
                    this.onClose()
                }
            }
        },
        expand: function(L) {
            if (!this.image.loaded() || !this.ready || this.expanded) {
                if (!this.image.loaded() && !this.initEvent) {
                    if (L) {
                        this.initEvent = m(L);
                        L.stopQueue();
                        if (L.type === "tap") {
                            L.events[1].stopQueue()
                        }
                    }
                    this.image.load(this.setupZoom.jBind(this));
                    if (!this.loadTimer) {
                        this.loadTimer = v(this.showLoading).jBind(this).jDelay(400)
                    }
                }
                return
            }
            if (L) {
                L.stopQueue()
            }
            var K = v(this.node).jFetch("cr");
            this.hideHint();
            this.hintRuns--;
            this.deactivate(null, true);
            this.unregisterActivateEvent();
            this.unregisterDeactivateEvent();
            this.ready = false;
            if (!this.expandBox) {
                this.expandBox = q.$new("div").jAddClass("mz-expand").jAddClass(this.option("cssClass")).jSetCss({
                    opacity: 0
                });
                this.expandStage = q.$new("div").jAddClass("mz-expand-stage").jAppendTo(this.expandBox);
                this.expandBox.jAddEvent("mousescroll touchstart dbltap", v(function(M) {
                    v(M).stop()
                }));
                if (this.option("closeOnClickOutside")) {
                    this.expandBox.jAddEvent("tap btnclick", function(O) {
                        var N = O.jGetPageXY();
                        var M = v(this.option("expandZoomMode") === "magnifier" ? this.zoomBox.node : this.zoomBox.image).jGetRect();
                        if (this.option("expandZoomOn") !== "always" && M.top <= N.y && N.y <= M.bottom && M.left <= N.x && N.x <= M.right) {
                            O.stopQueue();
                            this.deactivate(O);
                            return
                        }
                        if (this.option("expandZoomOn") !== "always" && this.node.hasChild(O.getOriginalTarget())) {
                            return
                        }
                        O.stop();
                        this.close()
                    }.jBindAsEvent(this))
                }
                this.keyboardCallback = v(function(N) {
                    var M = null;
                    if (N.keyCode !== 27 && N.keyCode !== 37 && N.keyCode !== 39) {
                        return
                    }
                    v(N).stop();
                    if (N.keyCode === 27) {
                        this.close()
                    } else {
                        M = (N.keyCode === 37) ? this.getPrev() : this.getNext();
                        if (M) {
                            this.update(M)
                        }
                    }
                }).jBindAsEvent(this);
                this.onExpand = v(function() {
                    var O;
                    this.node.jRemoveEvent("transitionend").jSetCss({
                        transition: "",
                        transform: "translate3d(0, 0, 0)"
                    });
                    if (this.expanded) {
                        return
                    }
                    this.expanded = true;
                    if (this.option("history")) {
                        try {
                            var M = "#mz-expanded-view-" + this.expandedViewId;
                            if (window.location.hash !== M) {
                                if (history.state && history.state.expandedView && history.state.mzId) {
                                    history.replaceState({
                                        expandedView: this.expandedViewId,
                                        mzId: this.id
                                    }, document.title, M)
                                } else {
                                    history.pushState({
                                        expandedView: this.expandedViewId,
                                        mzId: this.id
                                    }, document.title, M)
                                }
                            }
                        } catch (N) {}
                    }
                    this.expandBox.jRemoveClass("mz-expand-opening").jSetCss({
                        opacity: 1
                    });
                    this.zoomBox.setMode(this.option("expandZoomMode"));
                    this.zoomSize = q.detach(this.zoomSizeOrigin);
                    this.resizeCallback();
                    if (this.expandCaption && this.image.caption) {
                        this.expandCaption.jAddClass("mz-show")
                    }
                    if (this.option("expandZoomOn") !== "always") {
                        this.registerActivateEvent(true);
                        this.registerDeactivateEvent(true)
                    }
                    this.ready = true;
                    if (this.option("expandZoomOn") === "always") {
                        if (this.zoomBox.mode !== false) {
                            this.zoomBox.enable(true)
                        }
                        if (q.browser.mobile && this.mobileZoomHint) {
                            this.mobileZoomHint = false
                        }
                        this.activate()
                    }
                    if ((q.browser.mobile || this.option("forceTouch")) && this.mobileZoomHint && this.zoomBox.enabled) {
                        this.showHint(true, this.option("textClickZoomHint"));
                        if (this.hintRuns !== Infinity) {
                            this.mobileZoomHint = false
                        }
                    }
                    this.navControlsLayer.jRemoveClass("mz-hidden").jAddClass("mz-fade mz-visible");
                    if (this.expandNav) {
                        this.expandNav.jRemoveClass("mz-hidden").jAddClass("mz-fade mz-visible")
                    }
                    if (this.expandThumbs) {
                        this.expandThumbs.run();
                        this.setActiveThumb(this.image)
                    }
                    if (K) {
                        K.jAppendTo(this.expandBox, ((Math.floor(Math.random() * 101) + 1) % 2) ? "top" : "bottom")
                    }
                    if (this.expandGallery.length > 1 && !this.additionalImages.length) {
                        this.swipe()
                    }
                    v(document).jAddEvent("keydown", this.keyboardCallback);
                    if (q.browser.platform === "ios" && q.browser.uaName === "safari" && parseInt(q.browser.uaVersion) === 7) {
                        h = J()
                    }
                    I("onExpandOpen", this.id)
                }).jBind(this);
                this.onClose = v(function() {
                    this.node.jRemoveEvent("transitionend");
                    if (!this.expanded) {
                        return
                    }
                    if (this.expanded) {
                        v(document).jRemoveEvent("keydown", this.keyboardCallback);
                        this.deactivate(null, true)
                    }
                    this.setSize(true);
                    this.destroyExpandGallery();
                    this.expanded = false;
                    if (this.option("history")) {
                        if (window.location.hash === "#mz-expanded-view-" + this.expandedViewId) {
                            history.back()
                        }
                    }
                    this.zoomBox.setMode(this.option("zoomMode"));
                    this.node.replaceChild(this.image.getNode("small"), this.image.node);
                    this.image.setCurNode("small");
                    v(this.image.node).jSetCss({
                        width: "",
                        height: "",
                        "max-width": Math.min(this.image.jGetSize("small").width),
                        "max-height": Math.min(this.image.jGetSize("small").height)
                    });
                    this.lens.image.src = this.image.getURL("small");
                    this.node.jSetCss({
                        opacity: "",
                        transition: ""
                    });
                    this.node.jSetCss({
                        transform: "translate3d(0, 0, 0)"
                    });
                    v(this.placeholder).replaceChild(this.node, this.stubNode);
                    this.navControlsLayer.jRemoveClass("mz-expand-controls").jRemoveClass("mz-hidden").jAddClass("mz-fade mz-visible").jAppendTo(this.node);
                    this.setSize(true);
                    if (this.expandCaption) {
                        this.expandCaption.jRemove();
                        this.expandCaption = null
                    }
                    this.unregisterActivateEvent();
                    this.unregisterDeactivateEvent();
                    if (this.option("zoomOn") === "always") {
                        this.activate()
                    } else {
                        if (this.option("zoomMode") !== false) {
                            this.registerActivateEvent(this.option("zoomOn") === "click");
                            this.registerDeactivateEvent(this.option("zoomOn") === "click")
                        }
                    }
                    this.showHint();
                    this.expandBg.jRemoveEvent("transitionend");
                    this.expandBox.jRemove();
                    this.expandBg.jRemove();
                    this.expandBg = null;
                    if (G) {
                        G.jRemove()
                    }
                    v(q.browser.getDoc()).jRemoveClass("mz-expanded-view-open");
                    this.ready = true;
                    if (q.browser.ieMode < 10) {
                        this.resizeCallback()
                    } else {
                        v(window).jRaiseEvent("UIEvent", "resize")
                    }
                    I("onExpandClose", this.id)
                }).jBind(this);
                this.expandImageStage = q.$new("div", {
                    "class": "mz-image-stage"
                }).jAppendTo(this.expandStage);
                this.expandFigure = q.$new("figure").jAppendTo(this.expandImageStage);
                this.stubNode = this.node.cloneNode(false)
            }
            this.navControlsLayer.jAddClass("mz-expand-controls").jAppendTo(this.expandImageStage);
            this.setupExpandGallery();
            if (G) {
                G.jAppendTo(document.body)
            }
            v(q.browser.getDoc()).jAddClass("mz-expanded-view-open");
            v(document.body).jGetSize();
            if (this.option("expand") === "fullscreen") {
                this.prepareExpandedView();
                q.browser.fullScreen.request(this.expandBox, {
                    onEnter: v(function() {
                        this.onExpand()
                    }).jBind(this),
                    onExit: this.onClose,
                    fallback: v(function() {
                        this.expandToWindow()
                    }).jBind(this)
                })
            } else {
                setTimeout(v(function() {
                    this.prepareExpandedView();
                    this.expandToWindow()
                }).jBind(this), 96)
            }
        },
        prepareExpandedView: function() {
            var L;
            var K;
            L = q.$new("img", {
                srcset: this.image.getURL("zoom") + " " + this.image.getRatio("zoom") + "x",
                src: this.image.getURL("zoom"),
                alt: this.image.alt
            });
            this.expandBg = q.$new("div").jAddClass("mz-expand-bg").append((q.browser.features.cssFilters || q.browser.ieMode < 10) ? L : new q.SVGImage(L).blur(k).getNode()).jAppendTo(this.expandBox);
            if (this.option("expandZoomOn") === "always" && this.option("expandZoomMode") !== false) {
                this.expandStage.jAddClass("mz-always-zoom" + (this.option("expandZoomMode") === "zoom" ? " mz-zoom-in" : "")).jGetSize()
            }
            K = v(this.node)[(q.browser.ieMode < 10) ? "jGetSize" : "getBoundingClientRect"]();
            v(this.stubNode).jSetCss({
                width: K.width,
                height: K.height
            });
            this.node.replaceChild(this.image.getNode("zoom"), this.image.node);
            this.image.setCurNode("zoom");
            this.expandBox.jAppendTo(document.body);
            if (G) {
                this.expandBox.jSetCss({
                    height: window.innerHeight,
                    maxHeight: "100vh",
                    top: Math.abs(G.getBoundingClientRect().top)
                })
            }
            this.expandMaxWidth = function() {
                var M = this.expandImageStage;
                if (v(this.expandFigure).jGetSize().width > 50) {
                    M = this.expandFigure
                }
                return function() {
                    return this.option("expandZoomOn") === "always" && this.option("expandZoomMode") !== false && this.option("expandZoomMode") !== "magnifier" ? Infinity : Math.round(v(M).getInnerSize().width)
                }
            }.call(this);
            this.expandMaxHeight = function() {
                var M = this.expandImageStage;
                if (v(this.expandFigure).jGetSize().height > 50) {
                    M = this.expandFigure
                }
                return function() {
                    return this.option("expandZoomOn") === "always" && this.option("expandZoomMode") !== false && this.option("expandZoomMode") !== "magnifier" ? Infinity : Math.round(v(M).getInnerSize().height)
                }
            }.call(this);
            this.navControlsLayer.jRemoveClass("mz-fade mz-visible").jAddClass("mz-hidden");
            if (this.expandNav) {
                this.expandNav.jRemoveClass("mz-fade mz-visible").jAddClass("mz-hidden")
            }
            if (this.option("expandCaption")) {
                this.expandCaption = q.$new("figcaption", {
                    "class": "mz-caption"
                }).jAppendTo(this.expandImageStage);
                if (this.expandCaption && this.image.caption) {
                    if (this.image.link) {
                        this.expandCaption.append(q.$new("a", {
                            href: this.image.link
                        }).jAddEvent("tap btnclick", this.openLink.jBind(this)).changeContent(this.image.caption))
                    } else {
                        this.expandCaption.changeContent(this.image.caption)
                    }
                }
            }
            this.image.node.jSetCss({
                "max-height": Math.min(this.image.jGetSize("zoom").height, this.expandMaxHeight())
            });
            this.image.node.jSetCss({
                "max-width": Math.min(this.image.jGetSize("zoom").width, this.expandMaxWidth())
            });
            this.expandFigure.append(v(this.placeholder).replaceChild(this.stubNode, this.node))
        },
        expandToWindow: function() {
            this.node.jSetCss({
                transition: ""
            });
            this.node.jSetCss({
                transform: "scale(0.6)"
            }).jGetSize();
            this.node.jSetCss({
                transition: q.browser.cssTransform + " 0.4s cubic-bezier(0.175, 0.885, 0.320, 1) 0s"
            });
            if (q.browser.features.transition) {
                this.node.jAddEvent("transitionend", this.onExpand);
                if (q.browser.chrome && (q.browser.uaName === "chrome" || q.browser.uaName === "opera")) {
                    setTimeout(v(function() {
                        this.onExpand()
                    }).jBind(this), 500)
                }
            } else {
                this.onExpand.jDelay(16, this)
            }
            this.expandBox.jSetCss({
                opacity: 1
            });
            this.node.jSetCss({
                transform: "scale(1)"
            })
        },
        openLink: function() {
            if (this.image.link) {
                window.open(this.image.link, "_self")
            }
        },
        getNext: function() {
            var K = (this.expanded ? this.expandGallery : this.additionalImages).filter(function(N) {
                return (N.small.state !== -1 || N.zoom.state !== -1)
            });
            var L = K.length;
            var M = v(K).indexOf(this.image) + 1;
            return (L <= 1) ? null : K[(M >= L) ? 0 : M]
        },
        getPrev: function() {
            var K = (this.expanded ? this.expandGallery : this.additionalImages).filter(function(N) {
                return (N.small.state !== -1 || N.zoom.state !== -1)
            });
            var L = K.length;
            var M = v(K).indexOf(this.image) - 1;
            return (L <= 1) ? null : K[(M < 0) ? L - 1 : M]
        },
        imageByURL: function(L, M) {
            var K = this.additionalImages.filter(function(N) {
                return ((N.zoom.src.has(L) || N.zoom.url.has(L)) && (N.small.src.has(M) || N.small.url.has(M)))
            }) || [];
            return K[0] || ((M && L && q.jTypeOf(M) === "string" && q.jTypeOf(L) === "string") ? new o(M, L) : null)
        },
        imageByOrigin: function(L) {
            var K = this.additionalImages.filter(function(M) {
                return (M.origin === L)
            }) || [];
            return K[0]
        },
        imageByIndex: function(K) {
            return this.additionalImages[K]
        }
    };
    e = {
        version: "v5.3.7 (Plus)",
        start: function(N, L) {
            var M = null;
            var K = [];
            q.$A((N ? [v(N)] : q.$A(document.byClass("MagicZoom")).concat(q.$A(document.byClass("MagicZoomPlus"))))).jEach(v(function(O) {
                if (v(O)) {
                    if (!n(O)) {
                        M = new z(O, L);
                        if (l && !M.option("autostart")) {
                            M.stop();
                            M = null
                        } else {
                            t.push(M);
                            K.push(M)
                        }
                    }
                }
            }).jBind(this));
            return N ? K[0] : K
        },
        stop: function(N) {
            var L, M, K;
            if (N) {
                (M = n(N)) && (M = t.splice(t.indexOf(M), 1)) && M[0].stop() && (delete M[0]);
                return
            }
            while (L = t.length) {
                M = t.splice(L - 1, 1);
                M[0].stop();
                delete M[0]
            }
        },
        refresh: function(K) {
            this.stop(K);
            return this.start(K)
        },
        update: function(P, O, N, L) {
            var M = n(P);
            var K;
            if (M) {
                K = q.jTypeOf(O) === "element" ? M.imageByOrigin(O) : M.imageByURL(O, N);
                if (K) {
                    M.update(K)
                }
            }
        },
        switchTo: function(N, M) {
            var L = n(N);
            var K;
            if (L) {
                switch (q.jTypeOf(M)) {
                    case "element":
                        K = L.imageByOrigin(M);
                        break;
                    case "number":
                        K = L.imageByIndex(M);
                        break;
                    default:
                }
                if (K) {
                    L.update(K)
                }
            }
        },
        prev: function(L) {
            var K;
            (K = n(L)) && K.update(K.getPrev())
        },
        next: function(L) {
            var K;
            (K = n(L)) && K.update(K.getNext())
        },
        zoomIn: function(L) {
            var K;
            (K = n(L)) && K.activate()
        },
        zoomOut: function(L) {
            var K;
            (K = n(L)) && K.deactivate()
        },
        expand: function(L) {
            var K;
            (K = n(L)) && K.expand()
        },
        close: function(L) {
            var K;
            (K = n(L)) && K.close()
        },
        registerCallback: function(K, L) {
            if (!F[K]) {
                F[K] = []
            }
            if (q.jTypeOf(L) === "function") {
                F[K].push(L)
            }
        },
        running: function(K) {
            return !!n(K)
        }
    };
    v(document).jAddEvent("domready", function() {
        var L = window[j + "Options"] || {};
        y = y();
        A();
        r = q.$new("div", {
            "class": "magic-hidden-wrapper"
        }).jAppendTo(document.body);
        p = (q.browser.mobile && window.matchMedia && window.matchMedia("(max-device-width: 767px), (max-device-height: 767px)").matches);
        if (q.browser.mobile) {
            q.extend(b, D)
        }
        if (p && q.browser.platform === "ios") {
            G = q.$new("div").jSetCss({
                position: "fixed",
                top: 0,
                width: 0,
                height: "100vh"
            })
        }
        for (var K = 0; K < u.length; K++) {
            if (L[u[K]] && q.$F !== L[u[K]]) {
                e.registerCallback(u[K], L[u[K]])
            }
        }
        e.start();
        l = false
    });
    window.MagicZoomPlus = window.MagicZoomPlus || {};
    return e
})();
                                    

#34 JavaScript::Eval (size: 146, repeated: 1) - SHA256: d67512fb8a2482d49dd63aabdcd0a7f55cdfea443e91e8fd6343b5fb548f30f4

                                        0,
function(Z, N, Q, k, R, f) {
    for (f = 0; f < Z.length; f++) R = Z.charAt ? (k = Z.charCodeAt(f), -~k + (255 ^ k) + 2 * (-256 ^ k) - (-256 | k)) : Z[f], N.push(R);
    N.d.push(Z.length, Q)
}
                                    

#35 JavaScript::Eval (size: 2, repeated: 1) - SHA256: e04fd6756c3e077c61d1d5dc69a87ac9ea7371bc7bd5890c1b306732ad63e0af

                                        tS
                                    

#36 JavaScript::Eval (size: 10, repeated: 1) - SHA256: 269d4d56785ffc82f3ed05d8ee3b84fc18d7474663ddd06c6fd285165190bb19

                                        /[^\d.]+/g
                                    

#37 JavaScript::Eval (size: 27, repeated: 1) - SHA256: 0bc774ed3674af6aae8dd2c83bf89261e13ee293742afeda5161156a54bfc8ee

                                        0,
function(a, b) {
    return a - b
}
                                    

#38 JavaScript::Eval (size: 38245, repeated: 1) - SHA256: 22329f505142d62651af5703c9c40fddcb157f91de8ed8798d45246b398d358f

                                        //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjogMywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiICJdLCJuYW1lcyI6WyJjbG9zdXJlRHluYW1pY0J1dHRvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEifQ==
(function() {
    var S = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X) {
            if (1 == ((Z ^ 92) & 15))
                if (V = R.N.h[String(Q)]) {
                    for (l = (J = (V = V.concat(), N), 0); l < V.length; ++l)(b = V[l]) && !b.j && b.capture == f && (n = b.listener, p = b.ux || b.src, b.O && e(1, N, b, 8, R.N), J = false !== n.call(p, k) && J);
                    X = J && !k.defaultPrevented
                } else X = N;
            if (2 == Z - ((Z + 7 & 73) >= Z && Z - 7 << 2 < Z && (X = Math.floor(this.pY + (this.i() - this.W))), 1) >> 3) {
                for (J = f = 0; f < N.length; f++) J += N.charCodeAt(f), J += J << 10, J = (V = J >> 6, -1 + (~J & V) - (~J | V));
                (l = new Number((p = (R = 1 << Q, (R | 1) - (R & 1) - 2 * (~R & 1)), n = (J += J << 3, J ^= J >> 11, J + (J << 15) >>> 0), -1 - ~n - (n & ~p))), l)[0] = (n >>> Q) % k, X = l
            }
            if (2 > ((Z | 56) == Z && (N.z_ = function() {
                    return N.HC ? N.HC : N.HC = new N
                }, N.HC = void 0), Z >> 1 & 14) && 9 <= (Z - 9 & 11))
                for (p = R.length, f = "string" === typeof R ? R.split(N) : R, n = Q; n < p; n++) n in f && k.call(void 0, f[n], n, R);
            return X
        },
        Zq = function(Z, N, Q, k, R, f, n, p, J, V) {
            if (4 <= N >> (2 == (N + 8 >> 4 || (V = Math.floor(this.i())), N >> 2 & 15) && (k.cC(function(l) {
                    f = l
                }, Q, R), V = f), 2) && 1 > (N ^ Z) >> 4) a: {
                for (n in f)
                    if (R.call(void 0, f[n], n, f)) {
                        V = k;
                        break a
                    }
                V = Q
            }
            if (2 == (N << 1 & 15))
                for (J in f = k, R.h) {
                    for (n = (p = k, R.h)[J]; p < n.length; p++) ++f, m(73, Q, n[p]);
                    delete R.h[R.U--, J]
                }
            return V
        },
        Ql = function(Z, N, Q, k, R, f, n, p, J) {
            if ((N & 61) == ((N & 106) == N && (k.classList ? Array.prototype.forEach.call(Q, function(V) {
                    Nl("string", " ", 0, 8, V, "class", k)
                }) : w(90, "class", k, Array.prototype.filter.call(w(33, "string", k), function(V) {
                    return !nM(11, V, 0, 16, Q)
                }).join(" "))), N) && (J = Q in kg ? kg[Q] : kg[Q] = k + Q), !((N ^ Z) & 3)) a: {
                switch (n) {
                    case 1:
                        J = p ? "disable" : "enable";
                        break a;
                    case 2:
                        J = p ? "highlight" : "unhighlight";
                        break a;
                    case 4:
                        J = p ? "activate" : "deactivate";
                        break a;
                    case Q:
                        J = p ? "select" : "unselect";
                        break a;
                    case R:
                        J = p ? "check" : "uncheck";
                        break a;
                    case k:
                        J = p ? "focus" : "blur";
                        break a;
                    case f:
                        J = p ? "open" : "close";
                        break a
                }
                throw Error("Invalid component state");
            }
            if ((N & 77) == N) {
                if (n = window.btoa) {
                    for (Q = (f = "", 0); Q < k.length; Q += 8192) f += String.fromCharCode.apply(null, k.slice(Q, Q + 8192));
                    R = n(f).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "")
                } else R = void 0;
                J = R
            }
            return J
        },
        JS = function(Z, N, Q, k, R, f, n, p, J, V, l) {
            if (N - 9 << 1 < N && (N + 5 & 15) >= N) a: if ("string" === typeof k) l = "string" !== typeof f || f.length != Q ? -1 : k.indexOf(f, R);
                else {
                    for (n = R; n < k.length; n++)
                        if (n in k && k[n] === f) {
                            l = n;
                            break a
                        }
                    l = -1
                }
            return 2 > ((N | 4) & 8) && 2 <= ((N | 8) & 5) && (Array.isArray(n) && (n = n.join(Q)), p = "aria-" + k, "" === n || void 0 == n ? (Rl || (J = {}, Rl = (J.atomic = R, J.autocomplete = "none", J.dropeffect = "none", J.haspopup = R, J.live = "off", J.multiline = R, J.multiselectable = R, J.orientation = "vertical", J.readonly = R, J.relevant = "additions text", J.required = R, J.sort = "none", J[Z] = R, J.disabled = R, J.hidden = R, J.invalid = "false", J)), V = Rl, k in V ? f.setAttribute(p, V[k]) : f.removeAttribute(p)) : f.setAttribute(p, n)), l
        },
        K = function(Z, N, Q, k, R, f, n, p, J) {
            return (N | 32) == (((N + (N - 7 >> 4 || (n = typeof R, f = n != Z ? n : R ? Array.isArray(R) ? "array" : n : "null", p = f == k || f == Z && typeof R.length == Q), 1) & 46) < N && (N - 1 | 10) >= N && (J = function() {}, J.prototype = k.prototype, Q.H = k.prototype, Q.prototype = new J, Q.prototype.constructor = Q, Q.oR = function(V, l, b) {
                for (var X = Array(arguments.length - Z), x = Z; x < arguments.length; x++) X[x - Z] = arguments[x];
                return k.prototype[l].apply(V, X)
            }), (N - 9 ^ 20) < N) && (N + 1 ^ 22) >= N && (k = typeof Q, p = "object" == k && Q != Z || "function" == k), N) && (this.T = Z), p
        },
        lh = function(Z, N, Q, k, R, f, n, p, J, V, l) {
            if (2 > (2 == (Q - 8 & 3) && (fM.call(this), N || pM || (pM = new Vl), this.Mh = null, this.sT = false, this.Nh = this.Xz = this.bx = this.ye = null, this.g$ = void 0), Q >> 1 & 16) && 1 <= Q + 7 >> 3)
                if (R && R.once) u(n, 67, N, null, R, J, p, f);
                else if (Array.isArray(J))
                for (V = k; V < J.length; V++) lh(9, true, 3, 0, R, f, n, p, J[V]);
            else p = bh(1, Z, p), f && f[Xc] ? f.N.add(String(J), p, false, K(null, 3, R) ? !!R.capture : !!R, n) : u(R, 83, null, false, n, J, p, false, f);
            return (Q & 125) == Q && G.call(this, N, k || r.z_(), R), l
        },
        z = function(Z, N, Q, k, R, f, n) {
            if ((N & 29) == N) {
                for (R = z(Q, 6), f = 0; 0 < k; k--) f = f << 8 | P(435, Z, Q);
                C(Q, R, f)
            }
            return 3 == (((N + 1 ^ ((N ^ 5) >> 4 || (Z.K ? n = eX(Z.G, Z) : (Q = SX(Z, true, 435, 8), Q & 128 && (Q ^= 128, k = SX(Z, true, 435, 2), Q = (Q << 2) + (k | 0)), n = Q)), 26)) < N && (N - 8 ^ 14) >= N && (k = mJ[Z.R](Z.xA), k[Z.R] = function() {
                return Q
            }, k.concat = function(p) {
                Q = p
            }, n = k), N) ^ 61) >> 3 && (R = P(435, Z, Q), (R | 128) - ~(R & 128) + ~(R | 128) && (R = (f = R & 127, k = P(435, Z, Q) << 7, (f & k) + ~(f & k) - ~(f | k))), n = R), n
        },
        u = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x) {
            if (19 > (N ^ 93) && 3 <= (N + 6 & 31)) {
                if (!f) throw Error("Invalid event type");
                if (X = ((l = m(36, (b = K(Q, 64, Z) ? !!Z.capture : !!Z, J))) || (J[xg] = l = new L(J)), l).add(f, n, p, b, R), !X.proxy) {
                    if (((V = cV(23, 3, 24), X.proxy = V, V).src = J, V).listener = X, J.addEventListener) Ml || (Z = b), void 0 === Z && (Z = k), J.addEventListener(f.toString(), V, Z);
                    else if (J.attachEvent) J.attachEvent(Ql(43, 16, f.toString(), "on"), V);
                    else if (J.addListener && J.removeListener) J.addListener(V);
                    else throw Error("addEventListener and attachEvent are unavailable.");
                    AS++
                }
            }
            if ((N - 2 | ((N & 108) == N && (x = (R = Z >>> 8 * Q, k - (~R & k))), 64)) < N && (N - 2 ^ 16) >= N)
                if (Array.isArray(f))
                    for (J = 0; J < f.length; J++) u(Z, 66, true, null, R, f[J], n, p);
                else n = bh(1, 13, n), p && p[Xc] ? p.N.add(String(f), n, Q, K(k, 6, R) ? !!R.capture : !!R, Z) : u(R, 84, null, false, Z, f, n, Q, p);
            return 5 <= ((22 <= (N + 2 & 27) && 37 > N >> 2 && (x = e(1, Z, R, 27) && !!(Z.V & R) != Q && (!(f = Z.z2, -(f | 0) - k * ~(f | R) - (f & ~R) + k * (f | ~R)) || Z.dispatchEvent(Ql(43, 3, 8, 32, 16, 64, R, Q))) && !Z.KY), N) >> 1 & 14) && 13 > (N - 3 & 16) && (f = JS("busy", 3, 1, Z, k, Q), (R = f >= k) && Array.prototype.splice.call(Z, f, 1), x = R), x
        },
        bh = function(Z, N, Q, k, R, f, n, p, J, V) {
            if (N + 9 >> Z < N && (N - 4 ^ 14) >= N) {
                for (R = (J = n = 0, []); n < Q.length; n++)
                    for (J += k, f = f << k | Q[n]; 7 < J;) J -= 8, R.push((p = f >> J, 255 + (p & -256) - (p ^ 255)));
                V = R
            }
            if (17 <= ((N + 7 ^ 19) < N && N - 3 << Z >= N && ("function" === typeof Q ? V = Q : (Q[KM] || (Q[KM] = function(l) {
                    return Q.handleEvent(l)
                }), V = Q[KM])), N - 9) && 30 > N - 8)
                if (Q.classList) Array.prototype.forEach.call(k, function(l, b) {
                    Q.classList ? Q.classList.add(l) : (Q.classList ? Q.classList.contains(l) : nM(11, l, 0, 18, w(38, "string", Q))) || (b = U(24, "", 15, "string", Q), w(89, "class", Q, b + (0 < b.length ? " " + l : l)))
                });
                else {
                    for (f in (Array.prototype.forEach.call(w(36, "string", (n = {}, Q)), function(l) {
                            n[l] = true
                        }), Array.prototype).forEach.call(k, function(l) {
                            n[l] = true
                        }), R = "", n) R += 0 < R.length ? " " + f : f;
                    w(91, "class", Q, R)
                }
            return V
        },
        cV = function(Z, N, Q, k, R, f, n, p, J, V) {
            return (1 == (Q ^ Z) >> N && (V = function(l) {
                return k.call(V.src, V.listener, l)
            }, k = $g, J = V), Q ^ 11) >> N || (q.call(this, k ? k.type : ""), this.relatedTarget = this.currentTarget = this.target = null, this.button = this.screenY = this.screenX = this.clientY = this.clientX = this.offsetY = this.offsetX = 0, this.key = "", this.charCode = this.keyCode = 0, this.metaKey = this.shiftKey = this.altKey = this.ctrlKey = false, this.state = null, this.pointerId = 0, this.pointerType = "", this.g = null, k && (f = this.type = k.type, p = k.changedTouches && k.changedTouches.length ? k.changedTouches[0] : null, this.target = k.target || k.srcElement, this.currentTarget = R, n = k.relatedTarget, n || ("mouseover" == f ? n = k.fromElement : "mouseout" == f && (n = k.toElement)), this.relatedTarget = n, p ? (this.clientX = void 0 !== p.clientX ? p.clientX : p.pageX, this.clientY = void 0 !== p.clientY ? p.clientY : p.pageY, this.screenX = p.screenX || 0, this.screenY = p.screenY || 0) : (this.offsetX = k.offsetX, this.offsetY = k.offsetY, this.clientX = void 0 !== k.clientX ? k.clientX : k.pageX, this.clientY = void 0 !== k.clientY ? k.clientY : k.pageY, this.screenX = k.screenX || 0, this.screenY = k.screenY || 0), this.button = k.button, this.keyCode = k.keyCode || 0, this.key = k.key || "", this.charCode = k.charCode || ("keypress" == f ? k.keyCode : 0), this.ctrlKey = k.ctrlKey, this.altKey = k.altKey, this.shiftKey = k.shiftKey, this.metaKey = k.metaKey, this.pointerId = k.pointerId || 0, this.pointerType = "string" === typeof k.pointerType ? k.pointerType : gq[k.pointerType] || "", this.state = k.state, this.g = k, k.defaultPrevented && d.H.preventDefault.call(this))), J
        },
        Nl = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x, c, M) {
            if (((k & 92) == k && (n.classList ? n.classList.remove(R) : (n.classList ? n.classList.contains(R) : nM(11, R, Q, 10, w(37, Z, n))) && w(88, f, n, Array.prototype.filter.call(w(32, Z, n), function(A) {
                    return A != R
                }).join(N))), k + 1 & 10) < k && (k + 4 ^ 24) >= k) {
                if ((((X = (V = (b = (J = (c = (x = R ? 255 : N ? 5 : 2, (N || Z.ET++, 0 < Z.ZG && Z.JM && Z.UT) && Z.hM <= f && !Z.K && !Z.F && (!N || Z.r$ - Q > f) && 0 == document.hidden), 4 == Z.ET)) || c ? Z.i() : Z.C, b - Z.C), V >> 14), Z.Z && (Z.Z = (l = Z.Z, p = X * (V << 2), (l | 0) - (l & p) + (~l & p))), Z).IZ += X, Z).T = X || Z.T, J) || c) Z.ET = 0, Z.C = b;
                !c || b - Z.W < Z.ZG - x ? M = false : (Z.r$ = Q, n = B(Z, N ? 380 : 120), C(Z, 120, Z.P), Z.X.push([uh, n, N ? Q + f : Q]), Z.F = ih, M = true)
            }
            return M
        },
        tS = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
            if ((R - 3 ^ 15) >= R && (R + 5 ^ 14) < R)
                if (f = "array" === GK("call", k, "null") ? k : [k], this.J) Q(this.J);
                else try {
                    Z = [], N = !this.X.length, O(8, 0, [rq, Z, f], this), O(5, 0, [HV, Q, Z], this), n && !N || zK(0, this, true, n, false)
                } catch (X) {
                    D(28, this, ":", X), Q(this.J)
                }
                return R + 1 >> 4 || (N = [77, -85, 26, 57, -23, 94, N, -2, -44, -39], V = PV, J = f & 7, p = mJ[Z.R](Z.lx), p[Z.R] = function(X) {
                    J = (J += 6 + 7 * f, l = X, Q + ~(J | 7) + (J & -8) + (J | -8))
                }, p.concat = function(X, x, c, M) {
                    return (x = (M = k % Q + 1, +(V() | 0) * M + J + N[c = J + 27, (c | 0) - ~(c & 7) + ~c] * k * M - -2975 * k * l) + n * l * l - -2940 * l + 3 * k * k * M - M * l - 105 * k * k * l, l = void 0, X = N[x], N)[(J + 61 & 7) + (f & 2)] = X, N[J + ((f | 0) - (f ^ 2) - (~f ^ 2) + (~f | 2))] = -85, X
                }, b = p), b
        },
        e = function(Z, N, Q, k, R, f, n) {
            return (2 <= (k << 2 & 7) && 5 > (k << Z & 8) && (n = !!(R = N.u4, -2 * ~R + ~(R | Q) + (~R & Q) + (~R | Q))), (k & 125) == k) && (f = Q.type, f in R.h && u(R.h[f], 13, Q, 0) && (m(65, N, Q), 0 == R.h[f].length && (delete R.h[f], R.U--))), n
        },
        CM = function(Z, N, Q, k, R) {
            return 4 > ((Q ^ ((Q ^ 28) >> 4 || (this.S = a.document || document), N)) & Z) && 0 <= (Q | 2) >> 4 && (R = k), R
        },
        LM = function(Z, N, Q, k, R, f) {
            return (Q + 7 ^ Z) < Q && Q - 9 << 2 >= Q && (this.type = k, this.currentTarget = this.target = R, this.defaultPrevented = this.D = false), f
        },
        w = function(Z, N, Q, k, R, f, n) {
            return 12 <= ((Z | 88) == ((4 == Z + 8 >> 4 && (R = Q, R ^= R << 13, R = (f = R >> 17, (R | f) + ~(R & f) - -1), R ^= R << 5, (R = (k | 0) - (R | k) - ~(R | k) + (R | ~k)) || (R = 1), n = N ^ R), 1) == (Z >> 1 & 11) && (this.src = N, this.h = {}, this.U = 0), Z) && ("string" == typeof Q.className ? Q.className = k : Q.setAttribute && Q.setAttribute(N, k)), Z - 7) && 4 > (Z >> 1 & 12) && (n = Q.classList ? Q.classList : U(24, "", 16, N, Q).match(/\S+/g) || []), n
        },
        O = function(Z, N, Q, k, R, f, n, p, J) {
            return 4 == (Z ^ ((Z | ((Z + 7 & 42) >= Z && Z - 5 << 1 < Z && k.X.splice(N, N, Q), 56)) == Z && "number" !== typeof k && k && !k.j && ((p = k.src) && p[Xc] ? e(1, true, k, 5, p.N) : (f = k.proxy, n = k.type, p.removeEventListener ? p.removeEventListener(n, f, k.capture) : p.detachEvent ? p.detachEvent(Ql(43, 17, n, "on"), f) : p.addListener && p.removeListener && p.removeListener(f), AS--, (R = m(35, p)) ? (e(1, true, k, 12, R), R.U == N && (R.src = Q, p[xg] = Q)) : m(69, true, k))), 1 == (Z - 3 & 13) && (J = (R = UF[N.substring(0, 3) + "_"]) ? R(N.substring(3), Q, k) : U(24, N, 64, Q)), 93)) >> 4 && (this.KY = this.KY), J
        },
        yl = function(Z, N, Q, k, R, f, n, p, J) {
            if (((Q & 105) == (2 == (Q >> 1 & 7) && (N.j ? n = true : (f = new d(k, this), R = N.ux || N.src, p = N.listener, N.O && O(Z, 0, null, N), n = p.call(R, f)), J = n), Q) && (this.listener = N, this.proxy = null, this.src = n, this.type = k, this.capture = !!R, this.ux = f, this.key = ++TK, this.j = this.O = false), 3) <= Q + 6 >> 4 && 23 > (Q ^ 46)) {
                if (!k) throw Error("Invalid class name " + k);
                if ("function" !== typeof N) throw Error("Invalid decorator function " + N);
            }
            return J
        },
        dq = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
            return (N + 2 & 43) >= N && (N - 2 | Z) < N && (b = (J = (n = Q[k] << f, V = Q[-4 - 4 * ~(k | R) - (k ^ R) + 2 * (~k | R)] << 16, ~(n & V) - 2 * ~n - (~n ^ V) + 2 * (~n | V)) | Q[(k | 0) + 2] << 8, p = Q[-2 * ~(k & 3) + -2 + (k ^ 3)], (p | 0) - (~J ^ p) + (J | ~p))), (N & 45) == N && (b = l = function() {
                if (n.T == n) {
                    if (n.u) {
                        var X = [Yg, k, Q, void 0, J, V, arguments];
                        if (p == f) var x = zK(0, (O(3, 0, X, n), n), R, R, false);
                        else if (1 == p) {
                            var c = !n.X.length;
                            O(7, 0, X, n), c && zK(0, n, R, R, false)
                        } else x = WV(279, true, X, n);
                        return x
                    }
                    J && V && J.removeEventListener(V, l, ql)
                }
            }), b
        },
        D = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X) {
            if ((2 > (Z | 8) >> 4 && 10 <= (Z >> 1 & 13) && (N.J = ((N.J ? N.J + "~" : "E:") + k.message + Q + k.stack).slice(0, 2048)), 11 <= Z >> 2) && 1 > (Z << 1 & 16)) {
                if (BV.call(this, k), !(n = N)) {
                    for (J = this.constructor; J;) {
                        if (R = (p = U(24, J, 26), jX)[p]) break;
                        J = (f = Object.getPrototypeOf(J.prototype)) && f.constructor
                    }
                    n = R ? "function" === typeof R.z_ ? R.z_() : new R : null
                }
                this.Y = n
            }
            if (!(Z + 7 >> 4))
                if (f = N.length, f > Q) {
                    for (k = Array(f), R = Q; R < f; R++) k[R] = N[R];
                    X = k
                } else X = [];
            if (1 == (Z - 2 & 7))
                if (Array.isArray(n))
                    for (V = Q; V < n.length; V++) D(19, null, 0, k, R, f, n[V], p);
                else b = K(N, 3, k) ? !!k.capture : !!k, R = bh(1, 11, R), p && p[Xc] ? p.N.remove(String(n), R, b, f) : p && (J = m(39, p)) && (l = J.BC(b, f, R, n)) && O(57, 0, null, l);
            return X
        },
        hS = function(Z, N, Q, k, R, f, n, p, J, V) {
            if ((N + 4 & 6) < Z && 4 <= (N << 1 & 7)) a: {
                for (p = Q; p < R.length; ++p)
                    if (J = R[p], !J.j && J.listener == n && J.capture == !!f && J.ux == k) {
                        V = p;
                        break a
                    }
                V = -1
            }
            return (N + 6 & 26) < N && (N + 9 & 59) >= N && (V = Q && Q.parentNode ? Q.parentNode.removeChild(Q) : null), V
        },
        m = function(Z, N, Q, k, R, f, n) {
            return 13 <= (Z | (Z - 3 & ((Z & 31) == ((Z & 122) == Z && (n = function() {}, R = void 0, k = OF(N, function(p) {
                n && (Q && ih(Q), R = p, n(), n = void 0)
            }, !!Q)[0], f = {
                hot: function(p, J, V, l, b) {
                    function X() {
                        R(function(x) {
                            ih(function() {
                                p(x)
                            })
                        }, V)
                    }
                    if (!J) return l = k(V), p && p(l), l;
                    R ? X() : (b = n, n = function() {
                        (b(), ih)(X)
                    })
                }
            }), Z) && (Dq.call(this), this.N = new L(this), this.d$ = this, this.RZ = null), 10) || (Q = N[xg], f = Q instanceof L ? Q : null), 8)) && 16 > (Z ^ 78) && (Q.j = N, Q.listener = null, Q.proxy = null, Q.src = null, Q.ux = null), f
        },
        nM = function(Z, N, Q, k, R, f) {
            return (k & (17 > (k ^ 9) && k - 1 >= Z && N.Nh && N.Nh.forEach(Q, void 0), 26)) == k && (f = JS("busy", 8, 1, R, Q, N) >= Q), f
        },
        U = function(Z, N, Q, k, R, f) {
            return ((Q | (((Q + 2 ^ Z) < Q && (Q + 1 & 22) >= Q && (f = typeof R.className == k ? R.className : R.getAttribute && R.getAttribute("class") || N), (Q ^ 38) & 5) || (f = mJ[N](mJ.prototype, {
                replace: k,
                pop: k,
                length: k,
                floor: k,
                stack: k,
                splice: k,
                console: k,
                prototype: k,
                document: k,
                parent: k,
                call: k,
                propertyIsEnumerable: k
            })), 64)) == Q && (k(function(n) {
                n(N)
            }), f = [function() {
                return N
            }]), Q + 7 & 47) >= Q && (Q - 1 ^ 23) < Q && (f = Object.prototype.hasOwnProperty.call(N, Il) && N[Il] || (N[Il] = ++sF)), f
        },
        EF = function(Z, N, Q, k, R) {
            if (!(k = (R = N, a.trustedTypes), k) || !k.createPolicy) return R;
            try {
                R = k.createPolicy(Z, {
                    createHTML: Fc,
                    createScript: Fc,
                    createScriptURL: Fc
                })
            } catch (f) {
                if (a.console) a.console[Q](f.message)
            }
            return R
        },
        vV = function(Z, N, Q, k, R, f, n, p, J, V) {
            function l(b) {
                b && R.appendChild("string" === typeof b ? Z.createTextNode(b) : b)
            }
            for (J = 1; J < N.length; J++)
                if (V = N[J], !K(k, 9, "number", f, V) || K(null, 31, V) && 0 < V.nodeType) l(V);
                else {
                    a: {
                        if (V && "number" == typeof V.length) {
                            if (K(null, 5, V)) {
                                p = "function" == typeof V.item || "string" == typeof V.item;
                                break a
                            }
                            if ("function" === typeof V) {
                                p = "function" == typeof V.item;
                                break a
                            }
                        }
                        p = Q
                    }
                    S(34, n, 0, l, p ? D(5, V, 0) : V)
                }
        },
        B = function(Z, N, Q) {
            if (void 0 === (Q = Z.u[N], Q)) throw [Zo, 30, N];
            if (Q.value) return Q.create();
            return Q.create(3 * N * N + -85 * N + -84), Q.prototype
        },
        Nq = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
            for (V = (b = (Q = Z.replace(/\r\n/g, "\n"), 0), []), l = 0; l < Q.length; l++) f = Q.charCodeAt(l), 128 > f ? V[b++] = f : (2048 > f ? V[b++] = f >> 6 | 192 : (55296 == (f & 64512) && l + 1 < Q.length && 56320 == (J = Q.charCodeAt(l + 1), -~J + (J ^ 64512) + 2 * (~J ^ 64512) - (J | -64513)) ? (f = (p = (f | 0) - (f ^ 1023) + (~f & 1023) << 10, 3 * (65536 & p) + ~(65536 & p) - (-65537 ^ p)) + (Q.charCodeAt(++l) & 1023), V[b++] = f >> 18 | 240, V[b++] = (R = f >> N & 63, -1 - ~R + (~R & 128))) : V[b++] = f >> N | 224, V[b++] = (n = (k = f >> 6, (k | 0) - ~(k & 63) + ~(k | 63) + (~k & 63)), -~(n | 128) + (n & -129) + (~n | 128))), V[b++] = (f | 0) + (~f ^ 63) - (f | -64) | 128);
            return V
        },
        Vl = function() {
            return CM.call(this, 8, 24, 16)
        },
        BV = function(Z) {
            return lh.call(this, 9, Z, 34)
        },
        nN = function(Z, N, Q, k, R, f, n, p, J, V) {
            for (p = (V = f[3] | (J = 0, 0), f[2] | 0); 16 > J; J++) n = n >>> 8 | n << Q, V = V >>> 8 | V << Q, n += R | 0, n ^= p + 4043, R = R << 3 | R >>> 29, R ^= n, V += p | 0, V ^= J + 4043, p = p << 3 | p >>> 29, p ^= V;
            return [u(R, 8, 3, 255), u(R, N, 2, 255), u(R, 96, k, 255), u(R, 40, 0, 255), u(n, 8, 3, 255), u(n, Z, 2, 255), u(n, 32, k, 255), u(n, 32, 0, 255)]
        },
        WV = function(Z, N, Q, k, R, f, n, p, J, V) {
            if ((R = Q[0], R) == rq) k.Qe = 25, k.s(Q);
            else if (R == HV) {
                f = Q[1];
                try {
                    J = k.J || k.s(Q)
                } catch (l) {
                    D(29, k, ":", l), J = k.J
                }
                f(J)
            } else if (R == uh) k.s(Q);
            else if (R == kz) k.s(Q);
            else if (R == Qs) {
                try {
                    for (p = 0; p < k.ey.length; p++) try {
                        V = k.ey[p], V[0][V[1]](V[2])
                    } catch (l) {}
                } catch (l) {}(0, Q[1])(function(l, b) {
                    k.cC(l, N, b)
                }, (k.ey = [], function(l) {
                    O(7, 0, (l = !k.X.length, [Rn]), k), l && zK(0, k, false, N, false)
                }))
            } else {
                if (R == Yg) return n = Q[2], C(k, Z, Q[6]), C(k, 166, n), k.s(Q);
                R == Rn ? (k.w$ = [], k.l = [], k.u = null) : R == Jl && "loading" === a.document.readyState && (k.F = function(l, b) {
                    function X() {
                        b || (b = N, l())
                    }(a.document.addEventListener("DOMContentLoaded", X, (b = false, ql)), a).addEventListener("load", X, ql)
                })
            }
        },
        eX = function(Z, N, Q) {
            return (Q = Z.create().shift(), N.K.create()).length || N.G.create().length || (N.G = void 0, N.K = void 0), Q
        },
        pN = function(Z, N) {
            for (var Q, k = 1, R; k < arguments.length; k++) {
                for (Q in R = arguments[k], R) Z[Q] = R[Q];
                for (var f = 0; f < fN.length; f++) Q = fN[f], Object.prototype.hasOwnProperty.call(R, Q) && (Z[Q] = R[Q])
            }
        },
        zK = function(Z, N, Q, k, R, f, n, p) {
            if (N.X.length) {
                ((N.JM && Z(), N).JM = true, N).UT = k;
                try {
                    f = N.i(), N.C = f, N.W = f, N.ET = Z, p = Vs(279, k, ":", null, true, N, false), n = N.i() - N.W, N.pY += n, n < (Q ? 0 : 10) || N.Qe-- <= Z || (n = Math.floor(n), N.w$.push(254 >= n ? n : 254))
                } finally {
                    N.JM = R
                }
                return p
            }
        },
        bZ = function(Z, N, Q, k, R, f, n, p) {
            if (!N.J) {
                N.hM++;
                try {
                    for (p = (R = 0, f = void 0, N).P; --Q;) try {
                        if ((n = void 0, N).K) f = eX(N.K, N);
                        else {
                            if ((R = B(N, 120), R) >= p) break;
                            f = B(N, (n = z(N, (C(N, 380, R), 6)), n))
                        }
                        Nl(N, !(f && f.call ? f(N, Q) : lZ(N, 55, [Zo, 21, n], 0), 1), Q, 3, false, 1)
                    } catch (J) {
                        B(N, Z) ? lZ(N, 55, J, 22) : C(N, Z, J)
                    }
                    if (!Q) {
                        if (N.kA) {
                            N.hM--, bZ(23, N, 128874443292, ":");
                            return
                        }
                        lZ(N, 55, [Zo, 33], 0)
                    }
                } catch (J) {
                    try {
                        lZ(N, 55, J, 22)
                    } catch (V) {
                        D(26, N, k, V)
                    }
                }
                N.hM--
            }
        },
        Xx = function(Z, N, Q, k) {
            try {
                k = Z[((N | 0) + 2) % 3], Z[N] = (Z[N] | 0) - (Z[(-2 - 2 * ~N - (N & -2) + (~N & 1)) % 3] | 0) - (k | 0) ^ (1 == N ? k << Q : k >>> Q)
            } catch (R) {
                throw R;
            }
        },
        SX = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x, c, M, A) {
            if (R = B(Z, 120), R >= Z.P) throw [Zo, 31];
            for (A = (l = Z.hh.length, V = 0, J = R, k); 0 < A;) f = J >> 3, x = J % 8, M = Z.l[f], n = 8 - (x | 0), b = n < A ? n : A, N && (p = Z, p.o != J >> 6 && (p.o = J >> 6, X = B(p, Q), p.Fz = nN(36, 64, 24, 1, p.Z, [0, 0, X[1], X[2]], p.o)), M ^= Z.Fz[f & l]), V |= (M >> 8 - (x | 0) - (b | 0) & (1 << b) - 1) << (A | 0) - (b | 0), J += b, A -= b;
            return C((c = V, Z), 120, (R | 0) + (k | 0)), c
        },
        ei = function(Z, N) {
            for (N = []; Z--;) N.push(255 * Math.random() | 0);
            return N
        },
        Si = function(Z, N, Q, k, R) {
            return bh.call(this, 1, 27, Z, N, Q, k, R)
        },
        mk = function() {
            return w.call(this, 26)
        },
        I = function(Z, N, Q, k, R, f, n, p, J) {
            if (Z.T == Z)
                for (J = B(Z, Q), 328 == Q ? (f = function(V, l, b, X, x) {
                        if ((X = (l = J.length, (l | 0) - 4 >> 3), J).OT != X) {
                            b = [(x = (X << (J.OT = X, 3)) - 4, 0), 0, p[1], p[2]];
                            try {
                                J.qh = nN(36, 64, 24, 1, dq(5, 7, J, x, 1, 24), b, dq(5, 6, J, (x | 0) + 4, 1, 24))
                            } catch (c) {
                                throw c;
                            }
                        }
                        J.push(J.qh[l & 7] ^ V)
                    }, p = B(Z, 52)) : f = function(V) {
                        J.push(V)
                    }, k && f(k & 255), n = N.length, R = 0; R < n; R++) f(N[R])
        },
        xz = function(Z, N, Q, k, R, f, n) {
            I(N, ((f = B(N, (R = (n = Z & (Q = Z & 4, 3), k = z(N, 11), z(N, 3)), k)), Q && (f = Nq("" + f, 12)), n) && I(N, F(2, f.length), R), f), R)
        },
        G = function(Z, N, Q, k, R, f, n, p) {
            return D.call(this, 48, N, Z, Q, k, R, f, n, p)
        },
        q = function(Z, N) {
            return LM.call(this, 31, 1, 13, Z, N)
        },
        $g = function(Z, N, Q, k, R, f) {
            return yl.call(this, 56, Z, 5, N, Q, k, R, f)
        },
        lZ = function(Z, N, Q, k, R, f, n, p, J, V) {
            if (!Z.aZ) {
                if (n = B(((J = (0 == (f = B(Z, ((R = void 0, Q && Q[0] === Zo) && (k = Q[1], R = Q[2], Q = void 0), N)), f).length && (V = B(Z, 380) >> 3, f.push(k, V >> 8 & 255, -255 + (V | 255) - ~(V & 255) + (~V | 255)), void 0 != R && f.push(255 - ~R + -256 - (R & -256))), ""), Q) && (Q.message && (J += Q.message), Q.stack && (J += ":" + Q.stack)), Z), 132), 3 < n) {
                    Z.T = (p = (J = (J = J.slice(0, ~(n & 3) - -1 - ~n + (n | -4)), n -= (J.length | 0) + 3, Nq(J, 12)), Z.T), Z);
                    try {
                        I(Z, F(2, J.length).concat(J), 328, 144)
                    } finally {
                        Z.T = p
                    }
                }
                C(Z, 132, n)
            }
        },
        wj = function(Z, N) {
            return Ql.call(this, 43, 10, N, Z)
        },
        cl = function(Z, N, Q) {
            return lh.call(this, 9, Z, 32, N, Q)
        },
        GK = function(Z, N, Q, k, R) {
            if ("object" == (R = typeof N, R))
                if (N) {
                    if (N instanceof Array) return "array";
                    if (N instanceof Object) return R;
                    if ("[object Window]" == (k = Object.prototype.toString.call(N), k)) return "object";
                    if ("[object Array]" == k || "number" == typeof N.length && "undefined" != typeof N.splice && "undefined" != typeof N.propertyIsEnumerable && !N.propertyIsEnumerable("splice")) return "array";
                    if ("[object Function]" == k || "undefined" != typeof N.call && "undefined" != typeof N.propertyIsEnumerable && !N.propertyIsEnumerable(Z)) return "function"
                } else return Q;
            else if ("function" == R && "undefined" == typeof N.call) return "object";
            return R
        },
        Vs = function(Z, N, Q, k, R, f, n, p, J, V) {
            for (; f.X.length;) {
                V = (f.F = k, f.X).pop();
                try {
                    p = WV(Z, R, V, f)
                } catch (l) {
                    D(24, f, Q, l)
                }
                if (N && f.F) {
                    J = f.F, J(function() {
                        zK(0, f, R, R, n)
                    });
                    break
                }
            }
            return p
        },
        Mq = function(Z, N, Q, k, R) {
            if (3 == Z.length) {
                for (k = 0; 3 > k; k++) N[k] += Z[k];
                for (R = (Q = [13, 8, 13, 12, 16, 5, 3, 10, 15], 0); 9 > R; R++) N[3](N, R % 3, Q[R])
            }
        },
        Al = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x) {
            N.push((x = (X = (b = Z[0] << 24, V = Z[1] << 16, -~(b | V) + (~b & V) + (b | ~V)), Q = Z[2] << 8, 2 * ~(X & Q) - ~X - 2 * ~Q + (X | ~Q)), f = Z[3], -~f + 2 * (x & ~f) + (~x | f))), N.push((n = (p = Z[4] << 24 | Z[5] << 16, l = Z[6] << 8, -(l | 0) + ~l - 3 * ~(p | l) + 2 * (~p | l)), k = Z[7], (n | 0) + (n & ~k) - (n ^ k) + 2 * (~n & k))), N.push((J = Z[8] << 24, R = Z[9] << 16, -(J & R) - 1 - 2 * ~(J | R) + (~J ^ R)) | Z[10] << 8 | Z[11])
        },
        Dq = function() {
            return O.call(this, 16)
        },
        KN = function(Z, N, Q, k) {
            I(Z, F(N, B(Z, (Q = z(Z, (k = z(Z, 15), 15)), k))), Q)
        },
        $z = function() {
            return LM.call(this, 31, 1, 8)
        },
        E = function(Z, N, Q) {
            Q = this;
            try {
                gj(this, N, Z)
            } catch (k) {
                D(25, this, ":", k), Z(function(R) {
                    R(Q.J)
                })
            }
        },
        P = function(Z, N, Q) {
            return Q.K ? eX(Q.G, Q) : SX(Q, N, Z, 8)
        },
        C = function(Z, N, Q) {
            if (120 == N || 380 == N) Z.u[N] ? Z.u[N].concat(Q) : Z.u[N] = z(Z, 56, Q);
            else {
                if (Z.aZ && 435 != N) return;
                184 == N || 328 == N || 501 == N || 55 == N || 52 == N ? Z.u[N] || (Z.u[N] = tS(Z, Q, 16, N, 10, 38, 35)) : Z.u[N] = tS(Z, Q, 16, N, 3, 121, 35)
            }
            435 == N && (Z.Z = SX(Z, false, 435, 32), Z.o = void 0)
        },
        uZ = function(Z, N, Q, k) {
            return m.call(this, 32, Z, N, Q, k)
        },
        GW = function(Z, N, Q, k, R, f) {
            return B((C(k, R, (bZ(23, ((f = B(k, R), k.l) && f < k.P ? (C(k, R, k.P), iZ(R, N, k)) : C(k, R, N), k), Q, Z), f)), k), 166)
        },
        a = this || self,
        OF = function(Z, N, Q, k) {
            return O.call(this, 36, Z, N, Q, k)
        },
        iZ = function(Z, N, Q) {
            C(Q, Z, ((Q.CY.push(Q.u.slice()), Q).u[Z] = void 0, N))
        },
        Hl = function(Z, N, Q, k, R, f, n, p, J, V) {
            for (V = (p = z(k, (J = ((f = z(k, (n = k[rj] || {}, 10)), n).jy = z(k, N), n.L = [], k.T == k) ? (P(435, R, k) | 0) - Q : 1, 3)), 0); V < J; V++) n.L.push(z(k, Z));
            for (n.DG = B(k, p), n.LY = B(k, f); J--;) n.L[J] = B(k, n.L[J]);
            return n
        },
        Fc = function(Z) {
            return CM.call(this, 8, 24, 8, Z)
        },
        v, F = function(Z, N, Q, k, R) {
            for (Q = (Z | 1) + (R = [], ~Z) - 2 * (~Z & 1) - (~Z | 1); 0 <= Q; Q--) R[-~Z + ~(Z | 1) + (Z & -2) - (Q | 0)] = (k = N >> 8 * Q, 256 + (k & -256) + (~k ^ 255));
            return R
        },
        d = function(Z, N, Q, k, R) {
            return cV.call(this, 23, 3, 8, Z, N, Q, k, R)
        },
        L = function(Z) {
            return w.call(this, 3, Z)
        },
        fM = function() {
            return m.call(this, 5)
        },
        gj = function(Z, N, Q, k, R, f) {
            for (k = ((Z.lx = (Z.hh = (Z.th = (Z.yd = zW, on), Z[HV]), U(24, Z.R, 6, {get: function() {
                        return this.concat()
                    }
                })), Z).xA = mJ[Z.R](Z.lx, {
                    value: {
                        value: {}
                    }
                }), f = [], 0); 128 > k; k++) f[k] = String.fromCharCode(k);
            zK(0, Z, true, (O(3, 0, (O((O(5, 0, (new cl((C(Z, (C(Z, (C(Z, 104, (C(Z, 229, (C(Z, 468, (C(Z, (C(Z, (C(Z, (C(Z, 132, (C(Z, 121, ((C(Z, (C(Z, (C((C(Z, 61, (C(Z, 178, ((C(Z, (C(Z, (C(Z, (C(((C(Z, (C(Z, (C(Z, 248, (C(Z, (C(Z, 82, (C(Z, 329, (C(Z, (C(Z, 52, (C(Z, 23, ((C(Z, (C(Z, 190, (C(Z, 222, (C(Z, (C(Z, 328, (C(Z, 337, (C(Z, (C(Z, (C(Z, 380, (C(Z, (Z.AM = (Z.o = (Z.pY = 0, Z.T = Z, Z.hM = 0, (Z.mq = function(n) {
                return K.call(this, n, 41)
            }, (Z.ey = [], Z).Fz = void 0, Z.JM = false, Z.X = [], Z.l = [], Z.IZ = 1, (Z.J = void 0, Z.aZ = !(Z.r$ = 8001, Z.F = null, 1), R = (Z.G = void 0, Z.C = 0, (Z.CY = [], window.performance) || {}), Z).Bm = 0, Z.w$ = [], Z.Z = void 0, Z.P = 0, Z.W = (Z.UT = false, 0), Z).K = void 0, Z.u = [], void 0), (Z.Qe = 25, Z).ZG = 0, R.timeOrigin || (R.timing || {}).navigationStart || 0), Z.ET = void 0, 120), 0), 0)), 501), []), 327), a), function(n, p, J, V, l, b, X, x, c, M, A, g, H, T, y, h) {
                function Y(t, W) {
                    for (; c < t;) V |= P(435, true, n) << c, c += 8;
                    return V >>= (W = V & (1 << t) - 1, t), c -= t, W
                }
                for (y = (l = (c = (T = z(n, 6), V = 0), p = (Y(3) | 0) + 1, Y(5)), H = 0), X = []; y < l; y++) A = Y(1), X.push(A), H += A ? 0 : 1;
                for (h = (g = ((H | 1) - 2 * ~(H & 1) + -6 - (H | -2)).toString(2).length, []), b = 0; b < l; b++) X[b] || (h[b] = Y(g));
                for (M = 0; M < l; M++) X[M] && (h[M] = z(n, 14));
                for (J = (x = [], p); J--;) x.push(B(n, z(n, 14)));
                C(n, T, function(t, W, ol, wq, al) {
                    for (ol = (wq = (al = [], 0), []); wq < l; wq++) {
                        if (!(W = h[wq], X)[wq]) {
                            for (; W >= ol.length;) ol.push(z(t, 11));
                            W = ol[W]
                        }
                        al.push(W)
                    }
                    t.K = z(t, 26, x.slice()), t.G = z(t, 27, al)
                })
            })), ei(4))), 58), function(n) {
                xz(3, n)
            }), function(n, p, J, V, l, b, X) {
                (b = (p = z(n, (J = z(n, 6), 3)), z(n, 7)), n).T == n && (V = B(n, b), l = B(n, J), X = B(n, p), l[X] = V, 435 == J && (n.o = void 0, 2 == X && (n.Z = SX(n, false, 435, 32), n.o = void 0)))
            })), function(n, p, J, V, l) {
                (V = B((l = (p = z(n, (J = z(n, 6), 14)), B(n, p)), n), J), C)(n, p, l + V)
            })), 471), function(n, p, J) {
                C(n, (J = z(n, (p = z(n, 7), 3)), J), "" + B(n, p))
            }), C)(Z, 12, 0), 143)), [0, 0, 0])), 237), function(n, p, J, V, l, b, X, x, c, M) {
                0 !== (l = (X = (V = B(n, (J = z(n, (M = z(n, (x = z(n, 7), 7)), c = z(n, 11), 3)), b = B(n, M), c)), B(n, J)), B(n.T, x)), l) && (p = dq(5, 12, X, V, false, 2, n, 1, l, b), l.addEventListener(b, p, ql), C(n, 12, [l, b, p]))
            }), function(n, p, J, V) {
                if (J = n.CY.pop()) {
                    for (V = P(435, true, n); 0 < V; V--) p = z(n, 14), J[p] = n.u[p];
                    n.u = (J[132] = n.u[J[55] = n.u[55], 132], J)
                } else C(n, 120, n.P)
            })), function(n, p, J, V) {
                C(n, (V = (p = (J = z(n, 3), P(435, true, n)), z)(n, 3), V), B(n, J) >>> p)
            })), 296), function(n, p, J, V, l, b, X, x, c, M, A, g, H, T) {
                if (!Nl(n, true, p, 29, true, 1)) {
                    if ("object" == (g = B(n, (J = B(n, (l = B(n, (c = z((V = z(n, (x = z(n, (H = z(n, 11), 14)), 11)), n), 15), b = B(n, H), x)), c)), V)), GK("call", b, "null"))) {
                        for (X in A = [], b) A.push(X);
                        b = A
                    }
                    for (T = (g = 0 < (M = 0, g) ? g : 1, b.length); M < T; M += g) l(b.slice(M, ~(M & g) - 3 * ~(M | g) + 2 * (~M ^ g)), J)
                }
            }), function(n, p, J, V, l, b, X, x) {
                C(n, (J = (X = B((l = B(n, (p = z(n, (V = z(n, (x = z((b = z(n, 11), n), 15), 10)), 7)), V)), n), p), B(n, x)), b), dq(5, 5, l, J, false, 2, n, X))
            })), C(Z, 60, function(n, p, J, V, l, b, X, x, c) {
                Nl(n, true, p, 6, false, 1) || (l = Hl(7, 14, 1, n.T, true), J = l.L, x = J.length, c = l.jy, X = l.DG, b = l.LY, V = 0 == x ? new X[b] : 1 == x ? new X[b](J[0]) : 2 == x ? new X[b](J[0], J[1]) : 3 == x ? new X[b](J[0], J[1], J[2]) : 4 == x ? new X[b](J[0], J[1], J[2], J[3]) : 2(), C(n, c, V))
            }), 201), function(n) {
                KN(n, 1)
            }), 323), function(n) {
                KN(n, 4)
            }), C)(Z, 167, function() {}), Z), 156, 0), 45), function(n, p, J, V) {
                Nl(n, true, p, 5, false, 1) || (V = z(n, 10), J = z(n, 15), C(n, J, function(l) {
                    return eval(l)
                }(Pl(B(n.T, V)))))
            }), 216), function(n, p, J, V, l) {
                C(n, (p = GK("call", (l = B(n, (J = z(n, (V = z(n, 15), 3)), V)), l), "null"), J), p)
            }), 109), function(n, p, J, V, l, b) {
                C(n, (p = (l = B(n, (b = z(n, (V = (J = z(n, 14), z(n, 15)), 14)), J)), B(n, V)), b), l in p | 0)
            }), Z).K3 = 0, function(n, p, J, V, l, b) {
                (b = B(n, (p = B(n, (l = z(n, (J = (V = z(n, 10), z(n, 10)), 10)), V)), J)), C)(n, l, p[b])
            })), function(n, p) {
                iZ(120, (p = B(n, z(n, 10)), p), n.T)
            })), Z), 166, {}), 309), function(n, p, J, V) {
                0 != B((J = B(n, (V = z(n, 3), p = z(n, 6), p)), n), V) && C(n, 120, J)
            }), 223), function(n, p, J) {
                p = B((J = z(n, 6), n.T), J), p[0].removeEventListener(p[1], p[2], ql)
            }), Z.Pm = 0, C)(Z, 78, function(n, p, J, V, l) {
                for (p = (J = (V = z((l = z(n, 7), true), 34, n), []), 0); p < V; p++) J.push(P(435, true, n));
                C(n, l, J)
            }), function(n, p, J, V, l) {
                !Nl(n, true, p, 11, false, 1) && (J = Hl(7, 14, 1, n, true), V = J.DG, l = J.LY, n.T == n || l == n.mq && V == n) && (C(n, J.jy, l.apply(V, J.L)), n.C = n.i())
            })), 2048)), 53), function(n, p, J, V) {
                C((J = z(n, (V = z(n, (p = z(n, 7), 11)), 15)), n), J, B(n, p) || B(n, V))
            }), 344), function(n) {
                z(true, 16, n, 4)
            }), 184), [57, 0, 0]), function(n, p, J, V, l, b) {
                C(n, (J = B((l = B((V = z((b = z(n, (p = z(n, 6), 7)), n), 10), n), p), n), b), V), +(l == J))
            })), function(n, p, J, V, l, b, X) {
                for (p = (b = (X = (J = (l = z(true, (V = z(n, 11), 33), n), ""), B)(n, 283), X.length), 0); l--;) p = ((p | 0) + (z(true, 32, n) | 0)) % b, J += f[X[p]];
                C(n, V, J)
            })), Z)), Z.RR = 0, 55), []), 238), function(n) {
                xz(4, n)
            }), "Submit")), [Jl]), Z), 8), 0, [kz, N], Z), [Qs, Q]), Z), true), false)
        },
        tl = function(Z, N, Q, k, R) {
            return yl.call(this, 56, Z, 8, R, N, Q, k)
        },
        CN = function() {
            return bh.call(this, 1, 6)
        },
        LN = function(Z) {
            return hS.call(this, 5, 26, Z)
        },
        r = function() {
            return O.call(this, 88)
        },
        Il = "closure_uid_" + (1E9 * Math.random() >>> 0),
        sF = 0,
        pM, Ml = function(Z, N) {
            if (!a.addEventListener || !Object.defineProperty) return false;
            N = Object.defineProperty({}, "passive", (Z = false, {get: function() {
                    Z = true
                }
            }));
            try {
                a.addEventListener("test", function() {}, N), a.removeEventListener("test", function() {}, N)
            } catch (Q) {}
            return Z
        }(),
        gq = {
            2: "touch",
            3: (K(2, 25, (q.prototype.preventDefault = function() {
                this.defaultPrevented = true
            }, q.prototype.stopPropagation = function() {
                this.D = true
            }, Dq.prototype.KY = false, d), q), "pen"),
            4: "mouse"
        },
        Xc = "closure_listenable_" + (1E6 * (d.prototype.stopPropagation = (d.prototype.preventDefault = function(Z) {
            (Z = (d.H.preventDefault.call(this), this).g, Z.preventDefault) ? Z.preventDefault(): Z.returnValue = false
        }, function() {
            (d.H.stopPropagation.call(this), this.g.stopPropagation) ? this.g.stopPropagation(): this.g.cancelBubble = true
        }), Math.random()) | 0),
        TK = 0,
        fN = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),
        xg = "closure_lm_" + ((L.prototype.hasListener = function(Z, N, Q, k, R) {
            return Zq(49, (R = void 0 !== (Q = (k = void 0 !== Z) ? Z.toString() : "", N), 48), false, true, function(f, n) {
                for (n = 0; n < f.length; ++n)
                    if (!(k && f[n].type != Q || R && f[n].capture != N)) return true;
                return false
            }, this.h)
        }, L.prototype.BC = function(Z, N, Q, k, R, f) {
            return -1 < (f = (R = -1, this.h[k.toString()]), f && (R = hS(5, 14, 0, N, f, Z, Q)), R) ? f[R] : null
        }, L).prototype.add = (L.prototype.remove = function(Z, N, Q, k, R, f, n) {
            if (!(f = Z.toString(), f in this.h)) return false;
            return R = hS((n = this.h[f], 5), 7, 0, k, n, Q, N), -1 < R ? (m(70, true, n[R]), Array.prototype.splice.call(n, R, 1), 0 == n.length && (delete this.h[f], this.U--), true) : false
        }, function(Z, N, Q, k, R, f, n, p, J) {
            return (f = hS((n = (J = Z.toString(), this.h[J]), n || (n = this.h[J] = [], this.U++), 5), 6, 0, R, n, k, N), -1) < f ? (p = n[f], Q || (p.O = false)) : (p = new tl(N, !!k, R, this.src, J), p.O = Q, n.push(p)), p
        }), 1E6 * Math.random() | 0),
        kg = {},
        AS = 0,
        KM = "__closure_events_fn_" + (1E9 * Math.random() >>> 0);
    (((K(2, 30, fM, Dq), fM.prototype)[Xc] = true, v = fM.prototype, v.ix = function(Z) {
        this.RZ = Z
    }, v).addEventListener = function(Z, N, Q, k) {
        lh(9, true, 7, 0, Q, this, k, N, Z)
    }, v.removeEventListener = function(Z, N, Q, k) {
        D(11, null, 0, Q, N, k, Z, this)
    }, v.dispatchEvent = function(Z, N, Q, k, R, f, n, p, J, V, l) {
        if (k = this.RZ)
            for (n = []; k; k = k.RZ) n.push(k);
        if (Q = ((R = (J = (l = this.d$, N = n, Z), J).type || J, "string") === typeof J ? J = new q(J, l) : J instanceof q ? J.target = J.target || l : (f = J, J = new q(R, l), pN(J, f)), true), N)
            for (p = N.length - 1; !J.D && 0 <= p; p--) V = J.currentTarget = N[p], Q = S(13, true, R, J, V, true) && Q;
        if (J.D || (V = J.currentTarget = l, Q = S(77, true, R, J, V, true) && Q, J.D || (Q = S(29, true, R, J, V, false) && Q)), N)
            for (p = 0; !J.D && p < N.length; p++) V = J.currentTarget = N[p], Q = S(45, true, R, J, V, false) && Q;
        return Q
    }, v.BC = function(Z, N, Q, k) {
        return this.N.BC(Z, N, Q, String(k))
    }, v).hasListener = function(Z, N) {
        return this.N.hasListener(void 0 !== Z ? String(Z) : void 0, N)
    };
    var Rl;
    ((((v = ((S((((v = Vl.prototype, v.v = function(Z) {
        return "string" === typeof Z ? this.S.getElementById(Z) : Z
    }, v.getElementsByTagName = function(Z, N) {
        return (N || this.S).getElementsByTagName(String(Z))
    }, v).createElement = function(Z, N, Q) {
        return "application/xhtml+xml" === (Q = String((N = this.S, Z)), N.contentType) && (Q = Q.toLowerCase()), N.createElement(Q)
    }, v.createTextNode = function(Z) {
        return this.S.createTextNode(String(Z))
    }, v.appendChild = function(Z, N) {
        Z.appendChild(N)
    }, v).append = function(Z, N) {
        vV(9 == Z.nodeType ? Z : Z.ownerDocument || Z.document, arguments, false, "object", Z, "array", "")
    }, v.canHaveChildren = function(Z) {
        if (1 != Z.nodeType) return false;
        switch (Z.tagName) {
            case "APPLET":
            case "AREA":
            case "BASE":
            case "BR":
            case "COL":
            case "COMMAND":
            case "EMBED":
            case "FRAME":
            case "HR":
            case "IMG":
            case "INPUT":
            case "IFRAME":
            case "ISINDEX":
            case "KEYGEN":
            case "LINK":
            case "NOFRAMES":
            case "NOSCRIPT":
            case "META":
            case "OBJECT":
            case "PARAM":
            case "SCRIPT":
            case "SOURCE":
            case "STYLE":
            case "TRACK":
            case "WBR":
                return false
        }
        return true
    }, v.removeNode = LN, v.contains = function(Z, N) {
        if (!Z || !N) return false;
        if (Z.contains && 1 == N.nodeType) return Z == N || Z.contains(N);
        if ("undefined" != typeof Z.compareDocumentPosition) return Z == N || !!(Z.compareDocumentPosition(N) & 16);
        for (; N && Z != N;) N = N.parentNode;
        return N == Z
    }, 59), $z), $z.prototype.fY = "", $z).prototype.T2 = 0, K(2, 23, BV, fM), BV.prototype), v).Sy = $z.z_(), v.v = function() {
        return this.ye
    }, v).getParent = function() {
        return this.bx
    }, v).ix = function(Z) {
        if (this.bx && this.bx != Z) throw Error("Method not supported");
        BV.H.ix.call(this, Z)
    }, v).T_ = function() {
        this.sT = (nM(11, this, function(Z) {
            Z.sT && Z.T_()
        }, 12), this.g$ && Zq(49, 17, true, 0, this.g$), false)
    }, v.removeChild = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
        if (Z && ("string" === typeof Z ? Q = Z : ((k = Z.Mh) || (V = Z.Sy, p = Z, l = V.fY + ":" + (V.T2++).toString(36), k = p.Mh = l), Q = k), R = Q, this.Xz && R ? (f = this.Xz, b = (null !== f && R in f ? f[R] : void 0) || null) : b = null, Z = b, R && Z)) {
            if (null == (u(this.Nh, 14, ((J = this.Xz, R) in J && delete J[R], Z), 0), N && (Z.T_(), Z.ye && LN(Z.ye)), n = Z, n)) throw Error("Unable to set parent component");
            BV.H.ix.call((n.bx = null, n), null)
        }
        if (!Z) throw Error("Child is not in parent component");
        return Z
    };
    var UK, TW = {
            button: "pressed",
            checkbox: "checked",
            menuitem: "selected",
            menuitemcheckbox: "checked",
            menuitemradio: "checked",
            radio: "checked",
            tab: ((v = (S(57, mk), mk.prototype), v).G_ = function() {
                return "goog-control"
            }, "selected"),
            treeitem: "selected"
        },
        jX = ((K(2, 26, CN, (v.tM = (v.B = (v.A = function(Z, N, Q, k) {
            (k = Z.v ? Z.v() : Z) && (Q ? Si : wj)(k, [N])
        }, function(Z, N, Q, k, R, f) {
            if (k = N.v()) this.YA || (R = this.G_(), R.replace(/\xa0|\s/g, " "), this.YA = {
                1: R + "-disabled",
                2: R + "-hover",
                4: R + "-active",
                8: R + "-selected",
                16: R + "-checked",
                32: R + "-focused",
                64: R + "-open"
            }), (f = this.YA[Z]) && this.A(N, f, Q), this.Ve(k, Z, Q)
        }), v.PC = (v.Ve = function(Z, N, Q, k, R, f, n) {
            (n = (UK || (UK = {
                1: "disabled",
                8: "selected",
                16: "checked",
                64: "expanded"
            }), UK[N]), f = Z.getAttribute("role") || null) ? (R = TW[f] || n, k = "checked" == n || "selected" == n ? R : n) : k = n, k && JS("busy", 20, " ", k, false, Z, Q)
        }, function(Z, N, Q, k, R, f) {
            if (e(1, Z, 32, 11) && (f = Z.tM())) {
                if (!N && Z.V & 32) {
                    try {
                        f.blur()
                    } catch (n) {}
                    Z.V & 32 && (Z.vC & 4 && e(1, Z, 4, 3) && Z.setActive(false), Z.vC & 32 && e(1, Z, 32, 35) && u(Z, 22, false, 2, 32) && Z.B(false, 32))
                }
                if (k = f.hasAttribute("tabindex")) Q = f.tabIndex, k = "number" === typeof Q && 0 <= Q && 32768 > Q;
                k != N && (R = f, N ? R.tabIndex = 0 : (R.tabIndex = -1, R.removeAttribute("tabIndex")))
            }
        }), function(Z) {
            return Z.v()
        }), mk)), S)(56, CN), {});
    if ("function" !== ((((((((v = (K(2, 73, ((CN.prototype.G_ = function() {
            return "goog-button"
        }, CN.prototype).Ve = function(Z, N, Q) {
            switch (N) {
                case 8:
                case 16:
                    JS("busy", 21, " ", "pressed", false, Z, Q);
                    break;
                default:
                case 64:
                case 1:
                    CN.H.Ve.call(this, Z, N, Q)
            }
        }, G), BV), G).prototype, v.I = null, v).z2 = 0, v).vC = 255, v.b4 = true, v).u4 = 39, v).T_ = function() {
            ((G.H.T_.call(this), this).nY && this.nY.detach(), this.isVisible()) && this.isEnabled() && this.Y.PC(this, false)
        }, v).A = function(Z, N) {
            N ? Z && (this.I ? nM(11, Z, 0, 8, this.I) || this.I.push(Z) : this.I = [Z], this.Y.A(this, Z, true)) : Z && this.I && u(this.I, 15, Z, 0) && (0 == this.I.length && (this.I = null), this.Y.A(this, Z, false))
        }, v.tM = function() {
            return this.Y.tM(this)
        }, v.V = 0, v.isVisible = function() {
            return this.b4
        }, v).isEnabled = function() {
            return !(this.V & 1)
        }, v.isActive = function() {
            return !!(this.V & 4)
        }, v).setActive = function(Z) {
            u(this, 24, Z, 2, 4) && this.B(Z, 4)
        }, v.getState = function() {
            return this.V
        }, v.B = function(Z, N, Q, k, R, f) {
            Q || 1 != N ? e(1, this, N, 19) && Z != !!(this.V & N) && (this.Y.B(N, this, Z), this.V = Z ? (k = this.V, -2 * ~(k & N) - 1 + ~(k | N) + 2 * (k ^ N)) : this.V & ~N) : (f = !Z, R = this.getParent(), R && "function" == typeof R.isEnabled && !R.isEnabled() || !u(this, 25, !f, 2, 1) || (f || (this.setActive(false), u(this, 23, false, 2, 2) && this.B(false, 2)), this.isVisible() && this.Y.PC(this, f), this.B(!f, 1, true)))
        }, typeof G)) throw Error("Invalid component class " + G);
    if ("function" !== typeof mk) throw Error("Invalid renderer class " + mk);
    var ys = U(24, G, 25),
        ih = (yl(56, function() {
            return new cl(null)
        }, (K(2, 29, cl, ((S(58, (K(2, 24, r, (yl(56, (jX[ys] = mk, function() {
            return new G(null)
        }), 42, "goog-control"), CN)), r)), r.prototype).PC = function() {}, r.prototype.Ve = function() {}, r.prototype.B = function(Z, N, Q, k) {
            (k = (r.H.B.call(this, Z, N, Q), N.v())) && 1 == Z && (k.disabled = Q)
        }, G)), 43), "goog-button"), a.requestIdleCallback ? function(Z) {
            requestIdleCallback(function() {
                Z()
            }, {
                timeout: 4
            })
        } : a.setImmediate ? function(Z) {
            setImmediate(Z)
        } : function(Z) {
            setTimeout(Z, 0)
        }),
        UF, ql = {
            passive: true,
            capture: true
        },
        rj = String.fromCharCode(105, 110, 116, 101, 103, 67, 104, 101, 99, 107, 66, 121, 112, 97, 115, 115),
        uh = [],
        Yg = (E.prototype.kA = !(E.prototype.ef = (E.prototype.i4 = void 0, void 0), 1), []),
        kz = [],
        Zo = {},
        Jl = [],
        Qs = [],
        Rn = [],
        HV = (E.prototype.oZ = "toString", []),
        rq = [],
        mJ = (((Al, ei, function() {})(Xx), Mq, E).prototype.R = "create", Zo.constructor),
        PV = ((v = E.prototype, v.cC = function(Z, N, Q, k, R, f) {
            return tS.call(this, f, k, Z, Q, 21, R, N)
        }, v).i = (window.performance || {}).now ? function() {
            return this.AM + window.performance.now()
        } : function() {
            return +new Date
        }, v.Jh = function(Z, N, Q, k, R) {
            return w.call(this, 56, Z, N, Q, k, R)
        }, void 0),
        on = ((E.prototype.s = (v.Hm = (v.Nm = function() {
            return Zq.call(this, 49, 3)
        }, (v.IR = function(Z, N, Q, k, R, f, n, p, J, V) {
            return S.call(this, 17, Z, N, Q, k, R, f, n, p, J, V)
        }, v).Xy = function() {
            return S.call(this, 5)
        }, function(Z, N, Q, k, R, f, n) {
            return bh.call(this, 1, 25, Z, N, Q, k, R, f, n)
        }), function(Z, N) {
            return N = (Z = (PV = function() {
                    return N == Z ? -84 : -127
                }, {}), {}),
                function(Q, k, R, f, n, p, J, V, l, b, X, x, c, M, A, g, H, T, y, h, Y, t) {
                    N = (l = N, Z);
                    try {
                        if (y = Q[0], y == kz) {
                            t = Q[1];
                            try {
                                for (h = (M = atob(t), f = x = 0, []); f < M.length; f++) A = M.charCodeAt(f), 255 < A && (h[x++] = -~(A | 255) - (~A ^ 255) - 2 * (~A & 255) + 2 * (~A | 255), A >>= 8), h[x++] = A;
                                C(this, 435, [(this.P = (this.l = h, this.l.length) << 3, 0), 0, 0])
                            } catch (W) {
                                lZ(this, 55, W, 17);
                                return
                            }
                            bZ(23, this, 8001, ":")
                        } else if (y == rq) Q[1].push(B(this, 501).length, B(this, 132), B(this, 184).length, B(this, 328).length), C(this, 166, Q[2]), this.u[43] && GW(":", B(this, 43), 8001, this, 120);
                        else {
                            if (y == HV) {
                                this.T = (V = (p = F(2, (B(this, (H = Q[2], 184)).length | 0) + 2), this.T), this);
                                try {
                                    c = B(this, 55), 0 < c.length && I(this, F(2, c.length).concat(c), 184, 147), I(this, F(1, this.IZ), 184, 244), I(this, F(1, this[HV].length), 184), g = 0, g += B(this, 156) & 2047, n = B(this, 328), g -= (B(this, 184).length | 0) + 5, 4 < n.length && (g -= (n.length | 0) + 3), 0 < g && I(this, F(2, g).concat(ei(g)), 184, 150), 4 < n.length && I(this, F(2, n.length).concat(n), 184, 5)
                                } finally {
                                    this.T = V
                                }
                                if (k = ((R = ei(2).concat(B(this, 184)), R[1] = R[0] ^ 159, R)[3] = R[1] ^ p[0], R[4] = (J = R[1], b = p[1], 2 * (J & ~b) - (J | ~b) + (~J | b)), this.WC(R))) k = "$" + k;
                                else
                                    for (T = 0, k = ""; T < R.length; T++) Y = R[T][this.oZ](16), 1 == Y.length && (Y = "0" + Y), k += Y;
                                return (B((C((B(this, (X = k, 501)).length = H.shift(), this), 132, H.shift()), this), 184).length = H.shift(), B(this, 328)).length = H.shift(), X
                            }
                            if (y == uh) GW(":", Q[1], Q[2], this, 120);
                            else if (y == Yg) return GW(":", Q[1], 8001, this, 120)
                        }
                    } finally {
                        N = l
                    }
                }
        })(), E.prototype).Ef = 0, E.prototype.WC = function(Z, N, Q, k, R) {
            return Ql.call(this, 43, 65, N, Z, Q, k, R)
        }, /./),
        zW, Yz = kz.pop.bind((E.prototype[Qs] = [0, 0, 1, (E.prototype.p3 = 0, 1), 0, 1, 1], E.prototype)[rq]),
        Pl = function(Z, N) {
            return (N = EF("ad", null, "error")) && 1 === Z.eval(N.createScript("1")) ? function(Q) {
                return N.createScript(Q)
            } : function(Q) {
                return "" + Q
            }
        }(((zW = U(24, E.prototype.R, (on[E.prototype.oZ] = Yz, 12), {get: Yz
        }), E).prototype.Vd = void 0, a));
    40 < (UF = a.trayride || (a.trayride = {}), UF).m || (UF.m = 41, UF.ad = uZ, UF.a = OF), UF.MBE_ = function(Z, N, Q) {
        return Q = new E(N, Z), [function(k) {
            return Zq(49, 8, false, Q, k)
        }]
    };
}).call(this);
                                    

#39 JavaScript::Eval (size: 1, repeated: 1) - SHA256: a9f51566bd6705f7ea6ad54bb9deb449f795582d6529a0e22207b8981233ec58

                                        E
                                    

#40 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 8d7fe5afe0bfd4e6e1b8390c792dab6ef6ca948c07d4c37581d99ac3d45915b5

                                        0,
function(n) {
    xz(7, n)
}
                                    

#41 JavaScript::Eval (size: 29, repeated: 1) - SHA256: 53c2e7920c06f8fb7419525e31a65bc1b52a34b5c90550b8c16a9e576b20bd3e

                                        0,
function(n) {
    z(true, 16, n, 4)
}
                                    

#42 JavaScript::Eval (size: 78, repeated: 1) - SHA256: f5f222d8a9a1df19c64b4a24fa2cf934da6c973bbcf7947247c9a007a7072670

                                        0,
function(n, p, J, V, l) {
    (V = B((l = (p = z(n, (J = z(n, 6), 14)), B(n, p)), n), J), C)(n, p, l * V)
}
                                    

#43 JavaScript::Eval (size: 217, repeated: 1) - SHA256: 89186b07d2494bd613c9bb87634244cd1ecd1d49995e221c87e57bc300e0e4f3

                                        0, Hl = function(Z, N, Q, k, R, f, n, p, J, V) {
    for (V = (p = z(k, (J = ((f = z(k, (n = k[rj] || {}, 10)), n).jy = z(k, N), n.L = [], k.T == k) ? (P(435, R, k) | 0) - Q : 1, 3)), 0); V < J; V++) n.L.push(z(k, Z));
    for (n.DG = B(k, p), n.LY = B(k, f); J--;) n.L[J] = B(k, n.L[J]);
    return n
}
                                    

#44 JavaScript::Eval (size: 194, repeated: 1) - SHA256: 23f010e071f4759be28de8b76acc566788f4c15db1fe7f6e4c020a63f139cfa3

                                        (function(K) {
    return function(V, a, r) {
        for (r = 0; r != K[5];) V += (a << 4 ^ a >>> 5) + a ^ r + K[r & 3], r += K[4], a += (V << 4 ^ V >>> 5) + V ^ r + K[r >>> 11 & 3];
        return [V >>> 24, V >> 16 & 255, V >> 8 & 255, V & 255, a >>> 24, a >> 16 & 255, a >> 8 & 255, a & 255]
    }
})
                                    

#45 JavaScript::Eval (size: 206, repeated: 1) - SHA256: 1fb437ac78114eda813a7c4d5771b6d3aa34908a5ca3b743d5eb5c79088cf82c

                                        (function(N, u, V, z) {
    return z = (V = this, V.length),
        function(G, a, A, r) {
            function M(K) {
                return (V[K + 2] << 8 | V[K] << 24) + V[K + 3] | V[K + 1] << 16
            }
            for (r = 0; r < G.length; r++) a = V.length, (A = a - z & 7) || (u = N(M(a - 8), M(a - 4))), V[a] = G[r] ^ u[A]
        }
})
                                    

#46 JavaScript::Eval (size: 17424, repeated: 1) - SHA256: 2492234c07e6be9c8cb7cba8146dfae83c0f17009e6c9c610de566cc09c66ba0

                                        (function() {
    var hj = function(T, J, Q, W, v) {
            for (W = (J.DX = (J.zH = ((J.WC = y0, J).XJ = (J.gv = J[E], Jj), Q0({get: function() {
                        return this.concat()
                    }
                }, J.D)), d[J.D](J.zH, {
                    value: {
                        value: {}
                    }
                })), v = [], 0); 128 > W; W++) v[W] = String.fromCharCode(W);
            f(true, J, (n([(n((x(152, (x(494, J, (x(119, J, ((x(365, J, (x(181, J, (x(290, J, (x(428, J, (x((x(478, J, (x(103, J, (x(105, (x(216, (x((x(122, J, (x(118, J, (x(371, (x(112, (x(224, (x(35, J, (x(242, J, (x(156, J, (x((x(346, J, (x(184, (x(4, (x(94, (x(84, (x(210, J, (x(357, (x(64, (x(367, J, (x(266, J, (x(412, J, (x(130, J, (J.cC = (x(264, (x(178, (J.SS = (x(344, (x(194, J, (x((x(13, J, ((x(218, J, ((J.P = 0, (J.S = void 0, J).V = false, J).lz = ((W = (J.C = (J.B = 0, void 0), ((J.pB = 0, J.I = void 0, J).l = (J.N = 1, J.H = [], 0), J.L = [], J).u = void 0, J.LB = false, J.F = false, (J.Y = (J.J = void 0, []), J.G = (J.v = void 0, 0), J).j = null, J.KB = [], J.s9 = function(y) {
                this.K = y
            }, J.A = void 0, (J.X = [], J).K = J, (J.R = 0, J.o = 0, window.performance) || {}), (J.h = 25, J).s = [], J).Z = 8001, W).timeOrigin || (W.timing || {}).navigationStart || 0, 0)), x)(284, J, 0), function(y, Z) {
                y = (Z = S(y), b(y.K, Z)), y[0].removeEventListener(y[1], y[2], M)
            })), 352), J, function(y, Z, z, U, F, h, k) {
                for (z = (F = (U = (Z = G((k = S(y), y)), ""), b(y, 369)), F.length), h = 0; Z--;) h = ((h | 0) + (G(y) | 0)) % z, U += v[F[h]];
                x(k, y, U)
            }), function(y) {
                Zn(3, y)
            })), J), function(y, Z, z, U) {
                Z = b(y, (U = (Z = (z = S(y), S(y)), S(y)), Z)), z = b(y, z), x(U, y, z[Z])
            }), 0), J), function(y, Z, z) {
                x((Z = L((Z = (z = (Z = S(y), S(y)), b)(y, Z), Z)), z), y, Z)
            }), J), function(y, Z) {
                (Z = b(y, S(y)), zS)(Z, y.K)
            }), 0), 0)), 630)), I(4))), function(y, Z, z, U) {
                (z = (Z = b(y, (U = (Z = S(y), z = S(y), S(y)), Z)), b)(y, z), x)(U, y, Z in z | 0)
            })), J), function(y, Z, z, U, F, h) {
                t(y, true, Z, false) || (z = s4(y.K), Z = z.U, F = Z.length, U = z.T, h = z.kF, z = z.wv, Z = 0 == F ? new h[U] : 1 == F ? new h[U](Z[0]) : 2 == F ? new h[U](Z[0], Z[1]) : 3 == F ? new h[U](Z[0], Z[1], Z[2]) : 4 == F ? new h[U](Z[0], Z[1], Z[2], Z[3]) : 2(), x(z, y, Z))
            }), J), function() {}), function(y, Z, z, U) {
                !t(y, true, Z, false) && (Z = s4(y), U = Z.T, z = Z.kF, y.K == y || U == y.s9 && z == y) && (x(Z.wv, y, U.apply(z, Z.U)), y.P = y.g())
            })), J), [0, 0, 0]), J), 0), J), function(y, Z, z) {
                x((Z = (z = S(y), S(y)), Z), y, "" + b(y, z))
            }), J), function(y, Z, z, U, F) {
                (U = (z = (F = b(y, (Z = b(y, (U = (Z = (z = S(y), S)(y), S)(y), F = S(y), Z)), F)), b)(y.K, z), b)(y, U), 0) !== z && (U = U4(1, U, y, F, z, Z), z.addEventListener(Z, U, M), x(130, y, [z, Z, U]))
            }), function(y, Z, z, U) {
                x((Z = b(y, (U = b(y, (z = (U = S((Z = S(y), y)), S(y)), U)), Z)) == U, z), y, +Z)
            })), 485), J, function(y, Z, z, U, F, h) {
                if (!t(y, true, Z, true)) {
                    if ("object" == L((y = b((Z = (Z = S((h = (z = S((F = S(y), y)), S(y)), y)), b(y, Z)), h = b(y, h), z = b(y, z), y), F), y))) {
                        for (U in F = [], y) F.push(U);
                        y = F
                    }
                    for (F = (U = y.length, h = 0 < h ? h : 1, 0); F < U; F += h) z(y.slice(F, (F | 0) + (h | 0)), Z)
                }
            }), function(y, Z, z, U) {
                (Z = b(y, (z = (Z = S(y), S(y)), U = b(y, z), Z)), x)(z, y, U + Z)
            })), function(y) {
                vN(4, y)
            })), [])), J), p), J), function(y, Z, z, U, F) {
                z = b((Z = (U = (U = (Z = (z = (F = S(y), S(y)), S(y)), S(y)), b(y, U)), b(y, Z)), y), z), x(F, y, U4(U, z, y, Z))
            }), J), function(y, Z, z, U) {
                x((Z = (U = (z = S(y), V(y)), S(y)), Z), y, b(y, z) >>> U)
            }), J)), function(y, Z, z) {
                t(y, true, Z, false) || (Z = S(y), z = S(y), x(z, y, function(U) {
                    return eval(U)
                }(WN(b(y.K, Z)))))
            })), 283), J, function(y, Z, z) {
                (Z = b(y, (z = 0 != (Z = (z = S(y), S(y)), b(y, z)), Z)), z) && x(218, y, Z)
            }), J), function(y, Z, z, U) {
                x((U = S((Z = S((z = S(y), y)), y)), U), y, b(y, z) || b(y, Z))
            }), J), function(y) {
                E4(1, y)
            }), function(y, Z, z, U) {
                (z = (U = (Z = S(y), S(y)), S(y)), y.K == y) && (U = b(y, U), z = b(y, z), b(y, Z)[U] = z, 187 == Z && (y.A = void 0, 2 == U && (y.I = P(y, false, 32), y.A = void 0)))
            })), 2048)), 114), J, function(y, Z, z, U, F) {
                for (Z = (F = (z = G((U = S(y), y)), 0), []); F < z; F++) Z.push(V(y));
                x(U, y, Z)
            }), [])), function(y, Z, z, U) {
                if (U = y.KB.pop()) {
                    for (Z = V(y); 0 < Z; Z--) z = S(y), U[z] = y.L[z];
                    U[478] = y.L[U[428] = y.L[428], 478], y.L = U
                } else x(218, y, y.l)
            })), function(y) {
                E4(4, y)
            })), {})), J).PC = 0, [160, 0, 0])), function(y) {
                Zn(4, y)
            })), J), function(y, Z, z, U, F, h, k, B, c, w, X, a) {
                function D(r, l) {
                    for (; w < r;) Z |= V(y) << w, w += 8;
                    return l = (w -= r, Z & (1 << r) - 1), Z >>= r, l
                }
                for (B = (h = (Z = w = (c = S(y), 0), z = (D(3) | 0) + 1, D)(5), X = 0, []), a = 0; a < h; a++) F = D(1), B.push(F), X += F ? 0 : 1;
                for (X = ((X | 0) - 1).toString(2).length, a = 0, U = []; a < h; a++) B[a] || (U[a] = D(X));
                for (X = 0; X < h; X++) B[X] && (U[X] = S(y));
                for (k = []; z--;) k.push(b(y, S(y)));
                x(c, y, function(r, l, Y, m, TS) {
                    for (l = (Y = (TS = [], 0), []); Y < h; Y++) {
                        if (!B[m = U[Y], Y]) {
                            for (; m >= l.length;) l.push(S(r));
                            m = l[m]
                        }
                        TS.push(m)
                    }
                    r.S = dX((r.u = dX(k.slice(), r), TS), r)
                })
            }), [F_]), J), K), T], J), n([xd, Q], J), true))
        },
        P = function(T, J, Q, W, v, y, Z, z, U, F, h, k, B, c) {
            if (z = b(T, 218), z >= T.l) throw [R, 31];
            for (U = (v = z, B = Q, Z = 0, T.gv.length); 0 < B;) k = v % 8, c = v >> 3, W = T.X[c], h = 8 - (k | 0), h = h < B ? h : B, J && (F = T, F.A != v >> 6 && (F.A = v >> 6, y = b(F, 187), F.J = kd([0, 0, y[1], y[2]], F.A, F.I)), W ^= T.J[c & U]), Z |= (W >> 8 - (k | 0) - (h | 0) & (1 << h) - 1) << (B | 0) - (h | 0), B -= h, v += h;
            return x(218, T, (J = Z, (z | 0) + (Q | 0))), J
        },
        wX = function(T, J, Q, W) {
            function v() {}
            return {
                invoke: (Q = BN(T, function(y) {
                    v && (J && C(J), W = y, v(), v = void 0)
                }, (W = void 0, !!J))[0], function(y, Z, z, U) {
                    function F() {
                        W(function(h) {
                            C(function() {
                                y(h)
                            })
                        }, z)
                    }
                    if (!Z) return Z = Q(z), y && y(Z), Z;
                    W ? F() : (U = v, v = function() {
                        U(), C(F)
                    })
                })
            }
        },
        kd = function(T, J, Q, W, v) {
            for (T = T[W = T[3] | 0, 2] | 0, v = 0; 15 > v; v++) J = J >>> 8 | J << 24, J += Q | 0, W = W >>> 8 | W << 24, W += T | 0, Q = Q << 3 | Q >>> 29, J ^= T + 823, T = T << 3 | T >>> 29, W ^= v + 823, T ^= W, Q ^= J;
            return [Q >>> 24 & 255, Q >>> 16 & 255, Q >>> 8 & 255, Q >>> 0 & 255, J >>> 24 & 255, J >>> 16 & 255, J >>> 8 & 255, J >>> 0 & 255]
        },
        Sr = function(T, J) {
            if ((T = (J = null, p).trustedTypes, !T) || !T.createPolicy) return J;
            try {
                J = T.createPolicy("bg", {
                    createHTML: X_,
                    createScript: X_,
                    createScriptURL: X_
                })
            } catch (Q) {
                p.console && p.console.error(Q.message)
            }
            return J
        },
        $d = function(T, J) {
            return (T = T.create().shift(), J.u.create().length) || J.S.create().length || (J.S = void 0, J.u = void 0), T
        },
        V = function(T) {
            return T.u ? $d(T.S, T) : P(T, true, 8)
        },
        vN = function(T, J, Q, W) {
            for (W = (Q = S(J), 0); 0 < T; T--) W = W << 8 | V(J);
            x(Q, J, W)
        },
        H = function(T, J, Q) {
            Q = this;
            try {
                hj(T, this, J)
            } catch (W) {
                q(this, W), J(function(v) {
                    v(Q.v)
                })
            }
        },
        cN = function(T, J, Q, W, v, y, Z, z) {
            return Z = d[(W = [2, 15, 64, -58, 80, -100, (z = Q & 7, v = aX, W), 17, -45, -4], T).D](T.zH), Z[T.D] = function(U) {
                z += (y = U, 6) + 7 * Q, z &= 7
            }, Z.concat = function(U) {
                return ((U = (y = (U = (U = J % 16 + 1, 43 * y * y - 3483 * y + 4 * J * J * U + z) - 645 * J * y - 172 * J * J * y + W[z + 19 & 7] * J * U + (v() | 0) * U - U * y, void 0), W)[U], W)[(z + 53 & 7) + (Q & 2)] = U, W)[z + (Q & 2)] = 15, U
            }, Z
        },
        bf = function(T, J, Q, W) {
            try {
                W = T[((J | 0) + 2) % 3], T[J] = (T[J] | 0) - (T[((J | 0) + 1) % 3] | 0) - (W | 0) ^ (1 == J ? W << Q : W >>> Q)
            } catch (v) {
                throw v;
            }
        },
        Mk = function(T, J) {
            J.push(T[0] << 24 | T[1] << 16 | T[2] << 8 | T[3]), J.push(T[4] << 24 | T[5] << 16 | T[6] << 8 | T[7]), J.push(T[8] << 24 | T[9] << 16 | T[10] << 8 | T[11])
        },
        E4 = function(T, J, Q, W) {
            W = (Q = S(J), S)(J), e(J, W, O(b(J, Q), T))
        },
        Q0 = function(T, J) {
            return d[J](d.prototype, {
                replace: T,
                console: T,
                pop: T,
                floor: T,
                call: T,
                propertyIsEnumerable: T,
                stack: T,
                parent: T,
                document: T,
                length: T,
                prototype: T,
                splice: T
            })
        },
        Lq = function(T, J, Q, W, v) {
            if ((W = J[0], W) == u) T.h = 25, T.W(J);
            else if (W == E) {
                Q = J[1];
                try {
                    v = T.v || T.W(J)
                } catch (y) {
                    q(T, y), v = T.v
                }
                Q(v)
            } else if (W == GS) T.W(J);
            else if (W == K) T.W(J);
            else if (W == xd) {
                try {
                    for (v = 0; v < T.Y.length; v++) try {
                        Q = T.Y[v], Q[0][Q[1]](Q[2])
                    } catch (y) {}
                } catch (y) {}(0, (T.Y = [], J)[1])(function(y, Z) {
                    T.i(y, true, Z)
                }, function(y) {
                    (n([jr], (y = !T.s.length, T)), y) && f(true, T, false)
                })
            } else {
                if (W == rX) return v = J[2], x(501, T, J[6]), x(365, T, v), T.W(J);
                W == jr ? (T.H = [], T.X = [], T.L = null) : W == F_ && "loading" === p.document.readyState && (T.j = function(y, Z) {
                    function z() {
                        Z || (Z = true, y())
                    }(p.document.addEventListener("DOMContentLoaded", (Z = false, z), M), p).addEventListener("load", z, M)
                })
            }
        },
        IX = function(T, J, Q) {
            return T.i(function(W) {
                Q = W
            }, false, J), Q
        },
        dX = function(T, J, Q) {
            return ((Q = d[J.D](J.DX), Q)[J.D] = function() {
                return T
            }, Q).concat = function(W) {
                T = W
            }, Q
        },
        X_ = function(T) {
            return T
        },
        tj = function(T, J, Q, W, v) {
            for (v = (Q = (T = T.replace(/\r\n/g, "\n"), J = 0), []); J < T.length; J++) W = T.charCodeAt(J), 128 > W ? v[Q++] = W : (2048 > W ? v[Q++] = W >> 6 | 192 : (55296 == (W & 64512) && J + 1 < T.length && 56320 == (T.charCodeAt(J + 1) & 64512) ? (W = 65536 + ((W & 1023) << 10) + (T.charCodeAt(++J) & 1023), v[Q++] = W >> 18 | 240, v[Q++] = W >> 12 & 63 | 128) : v[Q++] = W >> 12 | 224, v[Q++] = W >> 6 & 63 | 128), v[Q++] = W & 63 | 128);
            return v
        },
        BN = function(T, J, Q, W) {
            return (W = g[T.substring(0, 3) + "_"]) ? W(T.substring(3), J, Q) : lf(T, J)
        },
        lf = function(T, J) {
            return [(J(function(Q) {
                Q(T)
            }), function() {
                return T
            })]
        },
        x = function(T, J, Q) {
            if (218 == T || 284 == T) J.L[T] ? J.L[T].concat(Q) : J.L[T] = dX(Q, J);
            else {
                if (J.F && 187 != T) return;
                119 == T || 266 == T || 35 == T || 428 == T || 84 == T ? J.L[T] || (J.L[T] = cN(J, T, 38, Q)) : J.L[T] = cN(J, T, 89, Q)
            }
            187 == T && (J.I = P(J, false, 32), J.A = void 0)
        },
        Dn = function(T, J, Q, W) {
            return b(Q, (x(218, (pq(((W = b(Q, 218), Q.X && W < Q.l) ? (x(218, Q, Q.l), zS(T, Q)) : x(218, Q, T), J), Q), Q), W), 365))
        },
        V0 = function(T, J, Q) {
            if (3 == T.length) {
                for (Q = 0; 3 > Q; Q++) J[Q] += T[Q];
                for (Q = (T = [13, 8, 13, 12, 16, 5, 3, 10, 15], 0); 9 > Q; Q++) J[3](J, Q % 3, T[Q])
            }
        },
        e = function(T, J, Q, W, v, y) {
            if (T.K == T)
                for (v = b(T, J), 266 == J ? (J = function(Z, z, U, F) {
                        if ((z = (F = v.length, (F | 0) - 4 >> 3), v).fB != z) {
                            z = [0, (U = ((v.fB = z, z) << 3) - 4, 0), y[1], y[2]];
                            try {
                                v.uz = kd(z, PN((U | 0) + 4, v), PN(U, v))
                            } catch (h) {
                                throw h;
                            }
                        }
                        v.push(v.uz[F & 7] ^ Z)
                    }, y = b(T, 84)) : J = function(Z) {
                        v.push(Z)
                    }, W && J(W & 255), T = 0, W = Q.length; T < W; T++) J(Q[T])
        },
        N = function(T, J, Q, W, v, y) {
            if (!T.F) {
                if (3 < (Q = b(T, ((J = (0 == (y = ((v = void 0, Q && Q[0] === R) && (J = Q[1], v = Q[2], Q = void 0), b)(T, 428), y.length) && (W = b(T, 284) >> 3, y.push(J, W >> 8 & 255, W & 255), void 0 != v && y.push(v & 255)), ""), Q) && (Q.message && (J += Q.message), Q.stack && (J += ":" + Q.stack)), 478)), Q)) {
                    T.K = (v = (J = (J = J.slice(0, (Q | 0) - 3), Q -= (J.length | 0) + 3, tj)(J), T.K), T);
                    try {
                        e(T, 266, O(J.length, 2).concat(J), 9)
                    } finally {
                        T.K = v
                    }
                }
                x(478, T, Q)
            }
        },
        n = function(T, J) {
            J.s.splice(0, 0, T)
        },
        Zn = function(T, J, Q, W, v) {
            e(((W = b(J, (v = S((W = S((T &= (Q = T & 4, 3), J)), J)), W)), Q && (W = tj("" + W)), T) && e(J, v, O(W.length, 2)), J), v, W)
        },
        G = function(T, J) {
            return (J = V(T), J) & 128 && (J = J & 127 | V(T) << 7), J
        },
        s4 = function(T, J, Q, W, v, y) {
            for (y = (J = ((W = S((Q = T[nq] || {}, T)), Q).wv = S(T), Q.U = [], T.K) == T ? (V(T) | 0) - 1 : 1, v = S(T), 0); y < J; y++) Q.U.push(S(T));
            for (Q.kF = b(T, v); J--;) Q.U[J] = b(T, Q.U[J]);
            return Q.T = b(T, W), Q
        },
        S = function(T, J) {
            if (T.u) return $d(T.S, T);
            return (J = P(T, true, 8), J) & 128 && (J ^= 128, T = P(T, true, 2), J = (J << 2) + (T | 0)), J
        },
        f = function(T, J, Q, W, v, y) {
            if (J.s.length) {
                J.LB = (J.V = (J.V && 0(), true), T);
                try {
                    y = J.g(), J.P = y, J.G = y, J.C = 0, W = Kq(J, T), v = J.g() - J.G, J.R += v, v < (Q ? 0 : 10) || 0 >= J.h-- || (v = Math.floor(v), J.H.push(254 >= v ? v : 254))
                } finally {
                    J.V = false
                }
                return W
            }
        },
        b = function(T, J) {
            if (void 0 === (T = T.L[J], T)) throw [R, 30, J];
            if (T.value) return T.create();
            return (T.create(4 * J * J + 15 * J + 81), T).prototype
        },
        Kq = function(T, J, Q, W) {
            for (; T.s.length;) {
                W = (T.j = null, T.s.pop());
                try {
                    Q = Lq(T, W)
                } catch (v) {
                    q(T, v)
                }
                if (J && T.j) {
                    J = T.j, J(function() {
                        f(true, T, true)
                    });
                    break
                }
            }
            return Q
        },
        O = function(T, J, Q, W) {
            for (W = (J | 0) - (Q = [], 1); 0 <= W; W--) Q[(J | 0) - 1 - (W | 0)] = T >> 8 * W & 255;
            return Q
        },
        L = function(T, J, Q) {
            if ((Q = typeof T, "object") == Q)
                if (T) {
                    if (T instanceof Array) return "array";
                    if (T instanceof Object) return Q;
                    if ("[object Window]" == (J = Object.prototype.toString.call(T), J)) return "object";
                    if ("[object Array]" == J || "number" == typeof T.length && "undefined" != typeof T.splice && "undefined" != typeof T.propertyIsEnumerable && !T.propertyIsEnumerable("splice")) return "array";
                    if ("[object Function]" == J || "undefined" != typeof T.call && "undefined" != typeof T.propertyIsEnumerable && !T.propertyIsEnumerable("call")) return "function"
                } else return "null";
            else if ("function" == Q && "undefined" == typeof T.call) return "object";
            return Q
        },
        zS = function(T, J) {
            x(((J.KB.push(J.L.slice()), J).L[218] = void 0, 218), J, T)
        },
        t = function(T, J, Q, W, v, y, Z, z, U) {
            if ((T.K = ((v = (U = (y = (W = (z = (J || T.C++, 0 < (Z = W ? 255 : J ? 5 : 2, T.B) && T.V && T.LB && 1 >= T.o && !T.u && !T.j) && (!J || 1 < T.Z - Q) && 0 == document.hidden, 4 == T.C)) || z ? T.g() : T.P, y - T.P), U >> 14), T.I && (T.I ^= v * (U << 2)), T).N += v, v || T.K), W) || z) T.C = 0, T.P = y;
            if (!z || y - T.G < T.B - Z) return false;
            return !(x(218, (z = b(T, (T.Z = Q, J) ? 284 : 218), T), T.l), T.s.push([GS, z, J ? Q + 1 : Q]), T.j = C, 0)
        },
        g, p = this || self,
        PN = function(T, J) {
            return J[T] << 24 | J[(T | 0) + 1] << 16 | J[(T | 0) + 2] << 8 | J[(T | 0) + 3]
        },
        C = p.requestIdleCallback ? function(T) {
            requestIdleCallback(function() {
                T()
            }, {
                timeout: 4
            })
        } : p.setImmediate ? function(T) {
            setImmediate(T)
        } : function(T) {
            setTimeout(T, 0)
        },
        q = function(T, J) {
            T.v = ((T.v ? T.v + "~" : "E:") + J.message + ":" + J.stack).slice(0, 2048)
        },
        U4 = function(T, J, Q, W, v, y) {
            function Z() {
                if (Q.K == Q) {
                    if (Q.L) {
                        var z = [rX, J, W, void 0, v, y, arguments];
                        if (2 == T) var U = f((n(z, Q), false), Q, false);
                        else if (1 == T) {
                            var F = !Q.s.length;
                            (n(z, Q), F) && f(false, Q, false)
                        } else U = Lq(Q, z);
                        return U
                    }
                    v && y && v.removeEventListener(y, Z, M)
                }
            }
            return Z
        },
        M = {
            passive: true,
            capture: true
        },
        A, I = function(T, J) {
            for (J = []; T--;) J.push(255 * Math.random() | 0);
            return J
        },
        pq = function(T, J, Q, W, v, y) {
            if (!J.v) {
                J.o++;
                try {
                    for (v = (Q = 0, J.l), W = void 0; --T;) try {
                        if (y = void 0, J.u) W = $d(J.u, J);
                        else {
                            if ((Q = b(J, 218), Q) >= v) break;
                            W = (y = (x(284, J, Q), S)(J), b)(J, y)
                        }
                        W && W.call ? W(J, T) : N(J, 0, [R, 21, y]), t(J, false, T, false)
                    } catch (Z) {
                        b(J, 412) ? N(J, 22, Z) : x(412, J, Z)
                    }
                    if (!T) {
                        if (J.rv) {
                            pq(667641748788, (J.o--, J));
                            return
                        }
                        N(J, 0, [R, 33])
                    }
                } catch (Z) {
                    try {
                        N(J, 22, Z)
                    } catch (z) {
                        q(J, z)
                    }
                }
                J.o--
            }
        },
        nq = String.fromCharCode(105, 110, 116, 101, 103, 67, 104, 101, 99, 107, 66, 121, 112, 97, 115, 115),
        E = [],
        jr = [],
        R = {},
        F_ = [],
        K = ((H.prototype.O = "toString", H).prototype.GH = void 0, []),
        u = (H.prototype.rv = false, H.prototype.bz = void 0, []),
        GS = [],
        rX = [],
        xd = [],
        d = (A = ((Mk, I, bf, function() {})(V0), H.prototype), A.Iz = function() {
            return Math.floor(this.R + (this.g() - this.G))
        }, H.prototype.D = "create", R.constructor),
        aX = ((A.jS = function() {
            return Math.floor(this.g())
        }, (A.mB = function(T, J, Q) {
            return T ^ (J ^= J << 13, J ^= J >> 17, (J = (J ^ J << 5) & Q) || (J = 1), J)
        }, A).g = (window.performance || {}).now ? function() {
            return this.lz + window.performance.now()
        } : function() {
            return +new Date
        }, A.U9 = function(T, J, Q, W, v) {
            for (W = v = 0; v < T.length; v++) W += T.charCodeAt(v), W += W << 10, W ^= W >> 6;
            return (v = (W += W << 3, W ^= W >> 11, T = W + (W << 15) >>> 0, new Number(T & (1 << J) - 1)), v)[0] = (T >>> J) % Q, v
        }, A.i = function(T, J, Q, W, v) {
            if ((Q = "array" === L(Q) ? Q : [Q], this).v) T(this.v);
            else try {
                W = [], v = !this.s.length, n([u, W, Q], this), n([E, T, W], this), J && !v || f(J, this, true)
            } catch (y) {
                q(this, y), T(this.v)
            }
        }, A).qR = function(T, J, Q, W, v, y) {
            for (W = (Q = [], y = 0); W < T.length; W++)
                for (y += J, v = v << J | T[W]; 7 < y;) y -= 8, Q.push(v >> y & 255);
            return Q
        }, void 0);
    H.prototype.W = function(T, J) {
        return J = (T = {}, aX = function() {
                return T == J ? 81 : 93
            }, {}),
            function(Q, W, v, y, Z, z, U, F, h, k, B, c, w, X, a) {
                U = T, T = J;
                try {
                    if (a = Q[0], a == K) {
                        v = Q[1];
                        try {
                            for (B = (X = (w = atob(v), c = 0), []); c < w.length; c++) h = w.charCodeAt(c), 255 < h && (B[X++] = h & 255, h >>= 8), B[X++] = h;
                            x(187, (this.l = (this.X = B, this.X.length << 3), this), [0, 0, 0])
                        } catch (D) {
                            N(this, 17, D);
                            return
                        }
                        pq(8001, this)
                    } else if (a == u) Q[1].push(b(this, 266).length, b(this, 35).length, b(this, 478), b(this, 119).length), x(365, this, Q[2]), this.L[121] && Dn(b(this, 121), 8001, this);
                    else {
                        if (a == E) {
                            this.K = (Z = (X = Q[2], O((b(this, 119).length | 0) + 2, 2)), z = this.K, this);
                            try {
                                y = b(this, 428), 0 < y.length && e(this, 119, O(y.length, 2).concat(y), 10), e(this, 119, O(this.N, 1), 109), e(this, 119, O(this[E].length, 1)), w = 0, w -= (b(this, 119).length | 0) + 5, W = b(this, 266), w += b(this, 94) & 2047, 4 < W.length && (w -= (W.length | 0) + 3), 0 < w && e(this, 119, O(w, 2).concat(I(w)), 15), 4 < W.length && e(this, 119, O(W.length, 2).concat(W), 156)
                            } finally {
                                this.K = z
                            }
                            if (k = ((((B = I(2).concat(b(this, 119)), B)[1] = B[0] ^ 6, B)[3] = B[1] ^ Z[0], B)[4] = B[1] ^ Z[1], this.vC(B))) k = "!" + k;
                            else
                                for (w = 0, k = ""; w < B.length; w++) F = B[w][this.O](16), 1 == F.length && (F = "0" + F), k += F;
                            return b((x(478, (b(this, ((c = k, b(this, 266)).length = X.shift(), 35)).length = X.shift(), this), X.shift()), this), 119).length = X.shift(), c
                        }
                        if (a == GS) Dn(Q[1], Q[2], this);
                        else if (a == rX) return Dn(Q[1], 8001, this)
                    }
                } finally {
                    T = U
                }
            }
    }();
    var y0, Jj = /./,
        fq = K.pop.bind((H.prototype.vC = (H.prototype.dv = 0, H.prototype.oz = 0, H.prototype[xd] = [0, 0, 1, 1, 0, 1, 1], function(T, J, Q, W) {
            if (Q = window.btoa) {
                for (J = (W = 0, ""); W < T.length; W += 8192) J += String.fromCharCode.apply(null, T.slice(W, W + 8192));
                T = Q(J).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "")
            } else T = void 0;
            return T
        }), H.prototype)[u]),
        WN = function(T, J) {
            return (J = Sr()) && 1 === T.eval(J.createScript("1")) ? function(Q) {
                return J.createScript(Q)
            } : function(Q) {
                return "" + Q
            }
        }(((y0 = (Jj[H.prototype.O] = fq, Q0({get: fq
        }, H.prototype.D)), H.prototype).AO = void 0, p));
    (g = p.botguard || (p.botguard = {}), 40) < g.m || (g.m = 41, g.bg = wX, g.a = BN), g.RBK_ = function(T, J, Q) {
        return [(Q = new H(T, J), function(W) {
            return IX(Q, W)
        })]
    };
}).call(this);
                                    

#47 JavaScript::Eval (size: 1, repeated: 1) - SHA256: df7e70e5021544f4834bbee64a9e3789febc4be81470df629cad6ddb03320a5c

                                        B
                                    

#48 JavaScript::Eval (size: 57, repeated: 1) - SHA256: 1e7ad7890aafa913ba0996d2758804acadb546e69122f5a39ca7497011b4e6d4

                                        0,
function(n, p, J) {
    C(n, (J = z(n, (p = z(n, 7), 3)), J), "" + B(n, p))
}
                                    

#49 JavaScript::Eval (size: 71, repeated: 1) - SHA256: 81ec8670c74c98af81af2d9d70c5cbbdb68e84c3220590d1c74e0a3c94af936d

                                        0, iZ = function(Z, N, Q) {
    C(Q, Z, ((Q.CY.push(Q.u.slice()), Q).u[Z] = void 0, N))
}
                                    

#50 JavaScript::Eval (size: 421, repeated: 1) - SHA256: 06599b336f7016bd6a597e625e07f7a7516ad0eb2f76ddcfc709acb7ca304370

                                        0, z = function(Z, N, Q, k, R, f, n) {
    if ((N & 29) == N) {
        for (R = z(Q, 6), f = 0; 0 < k; k--) f = f << 8 | P(435, Z, Q);
        C(Q, R, f)
    }
    return 3 == (((N + 1 ^ ((N ^ 5) >> 4 || (Z.K ? n = eX(Z.G, Z) : (Q = SX(Z, true, 435, 8), Q & 128 && (Q ^= 128, k = SX(Z, true, 435, 2), Q = (Q << 2) + (k | 0)), n = Q)), 26)) < N && (N - 8 ^ 14) >= N && (k = mJ[Z.R](Z.xA), k[Z.R] = function() {
        return Q
    }, k.concat = function(p) {
        Q = p
    }, n = k), N) ^ 61) >> 3 && (R = P(435, Z, Q), (R | 128) - ~(R & 128) + ~(R | 128) && (R = (f = R & 127, k = P(435, Z, Q) << 7, (f & k) + ~(f & k) - ~(f | k))), n = R), n
}
                                    

#51 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 2596391eb22caa2664010731fd0ae6309deed4f1712ca7aa6055d034f222ff0f

                                        0,
function(n) {
    KN(n, 1)
}
                                    

#52 JavaScript::Eval (size: 83, repeated: 1) - SHA256: 3eb8abc484d33a620c974de75babdd2caae4fff7dc8daad7d860dd41c93ee611

                                        (function(r, K, a, V) {
    for (V = (a = [], 0); V < r.length; V++) a[V] = r[V] ^ K[V % K.length];
    return a
})
                                    

#53 JavaScript::Eval (size: 15855, repeated: 1) - SHA256: 10bc70e80a961a6af59cdc9a2121dc1c59d38b2b073bd5e138607244b978c4bf

                                        (function() {
    var hj = function(T, J, Q, W, v) {
            for (W = (J.DX = (J.zH = ((J.WC = y0, J).XJ = (J.gv = J[E], Jj), Q0({get: function() {
                        return this.concat()
                    }
                }, J.D)), d[J.D](J.zH, {
                    value: {
                        value: {}
                    }
                })), v = [], 0); 128 > W; W++) v[W] = String.fromCharCode(W);
            f(true, J, (n([(n((x(152, (x(494, J, (x(119, J, ((x(365, J, (x(181, J, (x(290, J, (x(428, J, (x((x(478, J, (x(103, J, (x(105, (x(216, (x((x(122, J, (x(118, J, (x(371, (x(112, (x(224, (x(35, J, (x(242, J, (x(156, J, (x((x(346, J, (x(184, (x(4, (x(94, (x(84, (x(210, J, (x(357, (x(64, (x(367, J, (x(266, J, (x(412, J, (x(130, J, (J.cC = (x(264, (x(178, (J.SS = (x(344, (x(194, J, (x((x(13, J, ((x(218, J, ((J.P = 0, (J.S = void 0, J).V = false, J).lz = ((W = (J.C = (J.B = 0, void 0), ((J.pB = 0, J.I = void 0, J).l = (J.N = 1, J.H = [], 0), J.L = [], J).u = void 0, J.LB = false, J.F = false, (J.Y = (J.J = void 0, []), J.G = (J.v = void 0, 0), J).j = null, J.KB = [], J.s9 = function(y) {
                this.K = y
            }, J.A = void 0, (J.X = [], J).K = J, (J.R = 0, J.o = 0, window.performance) || {}), (J.h = 25, J).s = [], J).Z = 8001, W).timeOrigin || (W.timing || {}).navigationStart || 0, 0)), x)(284, J, 0), function(y, Z) {
                y = (Z = S(y), b(y.K, Z)), y[0].removeEventListener(y[1], y[2], M)
            })), 352), J, function(y, Z, z, U, F, h, k) {
                for (z = (F = (U = (Z = G((k = S(y), y)), ""), b(y, 369)), F.length), h = 0; Z--;) h = ((h | 0) + (G(y) | 0)) % z, U += v[F[h]];
                x(k, y, U)
            }), function(y) {
                Zn(3, y)
            })), J), function(y, Z, z, U) {
                Z = b(y, (U = (Z = (z = S(y), S(y)), S(y)), Z)), z = b(y, z), x(U, y, z[Z])
            }), 0), J), function(y, Z, z) {
                x((Z = L((Z = (z = (Z = S(y), S(y)), b)(y, Z), Z)), z), y, Z)
            }), J), function(y, Z) {
                (Z = b(y, S(y)), zS)(Z, y.K)
            }), 0), 0)), 630)), I(4))), function(y, Z, z, U) {
                (z = (Z = b(y, (U = (Z = S(y), z = S(y), S(y)), Z)), b)(y, z), x)(U, y, Z in z | 0)
            })), J), function(y, Z, z, U, F, h) {
                t(y, true, Z, false) || (z = s4(y.K), Z = z.U, F = Z.length, U = z.T, h = z.kF, z = z.wv, Z = 0 == F ? new h[U] : 1 == F ? new h[U](Z[0]) : 2 == F ? new h[U](Z[0], Z[1]) : 3 == F ? new h[U](Z[0], Z[1], Z[2]) : 4 == F ? new h[U](Z[0], Z[1], Z[2], Z[3]) : 2(), x(z, y, Z))
            }), J), function() {}), function(y, Z, z, U) {
                !t(y, true, Z, false) && (Z = s4(y), U = Z.T, z = Z.kF, y.K == y || U == y.s9 && z == y) && (x(Z.wv, y, U.apply(z, Z.U)), y.P = y.g())
            })), J), [0, 0, 0]), J), 0), J), function(y, Z, z) {
                x((Z = (z = S(y), S(y)), Z), y, "" + b(y, z))
            }), J), function(y, Z, z, U, F) {
                (U = (z = (F = b(y, (Z = b(y, (U = (Z = (z = S(y), S)(y), S)(y), F = S(y), Z)), F)), b)(y.K, z), b)(y, U), 0) !== z && (U = U4(1, U, y, F, z, Z), z.addEventListener(Z, U, M), x(130, y, [z, Z, U]))
            }), function(y, Z, z, U) {
                x((Z = b(y, (U = b(y, (z = (U = S((Z = S(y), y)), S(y)), U)), Z)) == U, z), y, +Z)
            })), 485), J, function(y, Z, z, U, F, h) {
                if (!t(y, true, Z, true)) {
                    if ("object" == L((y = b((Z = (Z = S((h = (z = S((F = S(y), y)), S(y)), y)), b(y, Z)), h = b(y, h), z = b(y, z), y), F), y))) {
                        for (U in F = [], y) F.push(U);
                        y = F
                    }
                    for (F = (U = y.length, h = 0 < h ? h : 1, 0); F < U; F += h) z(y.slice(F, (F | 0) + (h | 0)), Z)
                }
            }), function(y, Z, z, U) {
                (Z = b(y, (z = (Z = S(y), S(y)), U = b(y, z), Z)), x)(z, y, U + Z)
            })), function(y) {
                vN(4, y)
            })), [])), J), p), J), function(y, Z, z, U, F) {
                z = b((Z = (U = (U = (Z = (z = (F = S(y), S(y)), S(y)), S(y)), b(y, U)), b(y, Z)), y), z), x(F, y, U4(U, z, y, Z))
            }), J), function(y, Z, z, U) {
                x((Z = (U = (z = S(y), V(y)), S(y)), Z), y, b(y, z) >>> U)
            }), J)), function(y, Z, z) {
                t(y, true, Z, false) || (Z = S(y), z = S(y), x(z, y, function(U) {
                    return eval(U)
                }(WN(b(y.K, Z)))))
            })), 283), J, function(y, Z, z) {
                (Z = b(y, (z = 0 != (Z = (z = S(y), S(y)), b(y, z)), Z)), z) && x(218, y, Z)
            }), J), function(y, Z, z, U) {
                x((U = S((Z = S((z = S(y), y)), y)), U), y, b(y, z) || b(y, Z))
            }), J), function(y) {
                E4(1, y)
            }), function(y, Z, z, U) {
                (z = (U = (Z = S(y), S(y)), S(y)), y.K == y) && (U = b(y, U), z = b(y, z), b(y, Z)[U] = z, 187 == Z && (y.A = void 0, 2 == U && (y.I = P(y, false, 32), y.A = void 0)))
            })), 2048)), 114), J, function(y, Z, z, U, F) {
                for (Z = (F = (z = G((U = S(y), y)), 0), []); F < z; F++) Z.push(V(y));
                x(U, y, Z)
            }), [])), function(y, Z, z, U) {
                if (U = y.KB.pop()) {
                    for (Z = V(y); 0 < Z; Z--) z = S(y), U[z] = y.L[z];
                    U[478] = y.L[U[428] = y.L[428], 478], y.L = U
                } else x(218, y, y.l)
            })), function(y) {
                E4(4, y)
            })), {})), J).PC = 0, [160, 0, 0])), function(y) {
                Zn(4, y)
            })), J), function(y, Z, z, U, F, h, k, B, c, w, X, a) {
                function D(r, l) {
                    for (; w < r;) Z |= V(y) << w, w += 8;
                    return l = (w -= r, Z & (1 << r) - 1), Z >>= r, l
                }
                for (B = (h = (Z = w = (c = S(y), 0), z = (D(3) | 0) + 1, D)(5), X = 0, []), a = 0; a < h; a++) F = D(1), B.push(F), X += F ? 0 : 1;
                for (X = ((X | 0) - 1).toString(2).length, a = 0, U = []; a < h; a++) B[a] || (U[a] = D(X));
                for (X = 0; X < h; X++) B[X] && (U[X] = S(y));
                for (k = []; z--;) k.push(b(y, S(y)));
                x(c, y, function(r, l, Y, m, TS) {
                    for (l = (Y = (TS = [], 0), []); Y < h; Y++) {
                        if (!B[m = U[Y], Y]) {
                            for (; m >= l.length;) l.push(S(r));
                            m = l[m]
                        }
                        TS.push(m)
                    }
                    r.S = dX((r.u = dX(k.slice(), r), TS), r)
                })
            }), [F_]), J), K), T], J), n([xd, Q], J), true))
        },
        P = function(T, J, Q, W, v, y, Z, z, U, F, h, k, B, c) {
            if (z = b(T, 218), z >= T.l) throw [R, 31];
            for (U = (v = z, B = Q, Z = 0, T.gv.length); 0 < B;) k = v % 8, c = v >> 3, W = T.X[c], h = 8 - (k | 0), h = h < B ? h : B, J && (F = T, F.A != v >> 6 && (F.A = v >> 6, y = b(F, 187), F.J = kd([0, 0, y[1], y[2]], F.A, F.I)), W ^= T.J[c & U]), Z |= (W >> 8 - (k | 0) - (h | 0) & (1 << h) - 1) << (B | 0) - (h | 0), B -= h, v += h;
            return x(218, T, (J = Z, (z | 0) + (Q | 0))), J
        },
        wX = function(T, J, Q, W) {
            function v() {}
            return {
                invoke: (Q = BN(T, function(y) {
                    v && (J && C(J), W = y, v(), v = void 0)
                }, (W = void 0, !!J))[0], function(y, Z, z, U) {
                    function F() {
                        W(function(h) {
                            C(function() {
                                y(h)
                            })
                        }, z)
                    }
                    if (!Z) return Z = Q(z), y && y(Z), Z;
                    W ? F() : (U = v, v = function() {
                        U(), C(F)
                    })
                })
            }
        },
        kd = function(T, J, Q, W, v) {
            for (T = T[W = T[3] | 0, 2] | 0, v = 0; 15 > v; v++) J = J >>> 8 | J << 24, J += Q | 0, W = W >>> 8 | W << 24, W += T | 0, Q = Q << 3 | Q >>> 29, J ^= T + 823, T = T << 3 | T >>> 29, W ^= v + 823, T ^= W, Q ^= J;
            return [Q >>> 24 & 255, Q >>> 16 & 255, Q >>> 8 & 255, Q >>> 0 & 255, J >>> 24 & 255, J >>> 16 & 255, J >>> 8 & 255, J >>> 0 & 255]
        },
        Sr = function(T, J) {
            if ((T = (J = null, p).trustedTypes, !T) || !T.createPolicy) return J;
            try {
                J = T.createPolicy("bg", {
                    createHTML: X_,
                    createScript: X_,
                    createScriptURL: X_
                })
            } catch (Q) {
                p.console && p.console.error(Q.message)
            }
            return J
        },
        $d = function(T, J) {
            return (T = T.create().shift(), J.u.create().length) || J.S.create().length || (J.S = void 0, J.u = void 0), T
        },
        V = function(T) {
            return T.u ? $d(T.S, T) : P(T, true, 8)
        },
        vN = function(T, J, Q, W) {
            for (W = (Q = S(J), 0); 0 < T; T--) W = W << 8 | V(J);
            x(Q, J, W)
        },
        H = function(T, J, Q) {
            Q = this;
            try {
                hj(T, this, J)
            } catch (W) {
                q(this, W), J(function(v) {
                    v(Q.v)
                })
            }
        },
        cN = function(T, J, Q, W, v, y, Z, z) {
            return Z = d[(W = [2, 15, 64, -58, 80, -100, (z = Q & 7, v = aX, W), 17, -45, -4], T).D](T.zH), Z[T.D] = function(U) {
                z += (y = U, 6) + 7 * Q, z &= 7
            }, Z.concat = function(U) {
                return ((U = (y = (U = (U = J % 16 + 1, 43 * y * y - 3483 * y + 4 * J * J * U + z) - 645 * J * y - 172 * J * J * y + W[z + 19 & 7] * J * U + (v() | 0) * U - U * y, void 0), W)[U], W)[(z + 53 & 7) + (Q & 2)] = U, W)[z + (Q & 2)] = 15, U
            }, Z
        },
        bf = function(T, J, Q, W) {
            try {
                W = T[((J | 0) + 2) % 3], T[J] = (T[J] | 0) - (T[((J | 0) + 1) % 3] | 0) - (W | 0) ^ (1 == J ? W << Q : W >>> Q)
            } catch (v) {
                throw v;
            }
        },
        Mk = function(T, J) {
            J.push(T[0] << 24 | T[1] << 16 | T[2] << 8 | T[3]), J.push(T[4] << 24 | T[5] << 16 | T[6] << 8 | T[7]), J.push(T[8] << 24 | T[9] << 16 | T[10] << 8 | T[11])
        },
        E4 = function(T, J, Q, W) {
            W = (Q = S(J), S)(J), e(J, W, O(b(J, Q), T))
        },
        Q0 = function(T, J) {
            return d[J](d.prototype, {
                replace: T,
                console: T,
                pop: T,
                floor: T,
                call: T,
                propertyIsEnumerable: T,
                stack: T,
                parent: T,
                document: T,
                length: T,
                prototype: T,
                splice: T
            })
        },
        Lq = function(T, J, Q, W, v) {
            if ((W = J[0], W) == u) T.h = 25, T.W(J);
            else if (W == E) {
                Q = J[1];
                try {
                    v = T.v || T.W(J)
                } catch (y) {
                    q(T, y), v = T.v
                }
                Q(v)
            } else if (W == GS) T.W(J);
            else if (W == K) T.W(J);
            else if (W == xd) {
                try {
                    for (v = 0; v < T.Y.length; v++) try {
                        Q = T.Y[v], Q[0][Q[1]](Q[2])
                    } catch (y) {}
                } catch (y) {}(0, (T.Y = [], J)[1])(function(y, Z) {
                    T.i(y, true, Z)
                }, function(y) {
                    (n([jr], (y = !T.s.length, T)), y) && f(true, T, false)
                })
            } else {
                if (W == rX) return v = J[2], x(501, T, J[6]), x(365, T, v), T.W(J);
                W == jr ? (T.H = [], T.X = [], T.L = null) : W == F_ && "loading" === p.document.readyState && (T.j = function(y, Z) {
                    function z() {
                        Z || (Z = true, y())
                    }(p.document.addEventListener("DOMContentLoaded", (Z = false, z), M), p).addEventListener("load", z, M)
                })
            }
        },
        IX = function(T, J, Q) {
            return T.i(function(W) {
                Q = W
            }, false, J), Q
        },
        dX = function(T, J, Q) {
            return ((Q = d[J.D](J.DX), Q)[J.D] = function() {
                return T
            }, Q).concat = function(W) {
                T = W
            }, Q
        },
        X_ = function(T) {
            return T
        },
        tj = function(T, J, Q, W, v) {
            for (v = (Q = (T = T.replace(/\r\n/g, "\n"), J = 0), []); J < T.length; J++) W = T.charCodeAt(J), 128 > W ? v[Q++] = W : (2048 > W ? v[Q++] = W >> 6 | 192 : (55296 == (W & 64512) && J + 1 < T.length && 56320 == (T.charCodeAt(J + 1) & 64512) ? (W = 65536 + ((W & 1023) << 10) + (T.charCodeAt(++J) & 1023), v[Q++] = W >> 18 | 240, v[Q++] = W >> 12 & 63 | 128) : v[Q++] = W >> 12 | 224, v[Q++] = W >> 6 & 63 | 128), v[Q++] = W & 63 | 128);
            return v
        },
        BN = function(T, J, Q, W) {
            return (W = g[T.substring(0, 3) + "_"]) ? W(T.substring(3), J, Q) : lf(T, J)
        },
        lf = function(T, J) {
            return [(J(function(Q) {
                Q(T)
            }), function() {
                return T
            })]
        },
        x = function(T, J, Q) {
            if (218 == T || 284 == T) J.L[T] ? J.L[T].concat(Q) : J.L[T] = dX(Q, J);
            else {
                if (J.F && 187 != T) return;
                119 == T || 266 == T || 35 == T || 428 == T || 84 == T ? J.L[T] || (J.L[T] = cN(J, T, 38, Q)) : J.L[T] = cN(J, T, 89, Q)
            }
            187 == T && (J.I = P(J, false, 32), J.A = void 0)
        },
        Dn = function(T, J, Q, W) {
            return b(Q, (x(218, (pq(((W = b(Q, 218), Q.X && W < Q.l) ? (x(218, Q, Q.l), zS(T, Q)) : x(218, Q, T), J), Q), Q), W), 365))
        },
        V0 = function(T, J, Q) {
            if (3 == T.length) {
                for (Q = 0; 3 > Q; Q++) J[Q] += T[Q];
                for (Q = (T = [13, 8, 13, 12, 16, 5, 3, 10, 15], 0); 9 > Q; Q++) J[3](J, Q % 3, T[Q])
            }
        },
        e = function(T, J, Q, W, v, y) {
            if (T.K == T)
                for (v = b(T, J), 266 == J ? (J = function(Z, z, U, F) {
                        if ((z = (F = v.length, (F | 0) - 4 >> 3), v).fB != z) {
                            z = [0, (U = ((v.fB = z, z) << 3) - 4, 0), y[1], y[2]];
                            try {
                                v.uz = kd(z, PN((U | 0) + 4, v), PN(U, v))
                            } catch (h) {
                                throw h;
                            }
                        }
                        v.push(v.uz[F & 7] ^ Z)
                    }, y = b(T, 84)) : J = function(Z) {
                        v.push(Z)
                    }, W && J(W & 255), T = 0, W = Q.length; T < W; T++) J(Q[T])
        },
        N = function(T, J, Q, W, v, y) {
            if (!T.F) {
                if (3 < (Q = b(T, ((J = (0 == (y = ((v = void 0, Q && Q[0] === R) && (J = Q[1], v = Q[2], Q = void 0), b)(T, 428), y.length) && (W = b(T, 284) >> 3, y.push(J, W >> 8 & 255, W & 255), void 0 != v && y.push(v & 255)), ""), Q) && (Q.message && (J += Q.message), Q.stack && (J += ":" + Q.stack)), 478)), Q)) {
                    T.K = (v = (J = (J = J.slice(0, (Q | 0) - 3), Q -= (J.length | 0) + 3, tj)(J), T.K), T);
                    try {
                        e(T, 266, O(J.length, 2).concat(J), 9)
                    } finally {
                        T.K = v
                    }
                }
                x(478, T, Q)
            }
        },
        n = function(T, J) {
            J.s.splice(0, 0, T)
        },
        Zn = function(T, J, Q, W, v) {
            e(((W = b(J, (v = S((W = S((T &= (Q = T & 4, 3), J)), J)), W)), Q && (W = tj("" + W)), T) && e(J, v, O(W.length, 2)), J), v, W)
        },
        G = function(T, J) {
            return (J = V(T), J) & 128 && (J = J & 127 | V(T) << 7), J
        },
        s4 = function(T, J, Q, W, v, y) {
            for (y = (J = ((W = S((Q = T[nq] || {}, T)), Q).wv = S(T), Q.U = [], T.K) == T ? (V(T) | 0) - 1 : 1, v = S(T), 0); y < J; y++) Q.U.push(S(T));
            for (Q.kF = b(T, v); J--;) Q.U[J] = b(T, Q.U[J]);
            return Q.T = b(T, W), Q
        },
        S = function(T, J) {
            if (T.u) return $d(T.S, T);
            return (J = P(T, true, 8), J) & 128 && (J ^= 128, T = P(T, true, 2), J = (J << 2) + (T | 0)), J
        },
        f = function(T, J, Q, W, v, y) {
            if (J.s.length) {
                J.LB = (J.V = (J.V && 0(), true), T);
                try {
                    y = J.g(), J.P = y, J.G = y, J.C = 0, W = Kq(J, T), v = J.g() - J.G, J.R += v, v < (Q ? 0 : 10) || 0 >= J.h-- || (v = Math.floor(v), J.H.push(254 >= v ? v : 254))
                } finally {
                    J.V = false
                }
                return W
            }
        },
        b = function(T, J) {
            if (void 0 === (T = T.L[J], T)) throw [R, 30, J];
            if (T.value) return T.create();
            return (T.create(4 * J * J + 15 * J + 81), T).prototype
        },
        Kq = function(T, J, Q, W) {
            for (; T.s.length;) {
                W = (T.j = null, T.s.pop());
                try {
                    Q = Lq(T, W)
                } catch (v) {
                    q(T, v)
                }
                if (J && T.j) {
                    J = T.j, J(function() {
                        f(true, T, true)
                    });
                    break
                }
            }
            return Q
        },
        O = function(T, J, Q, W) {
            for (W = (J | 0) - (Q = [], 1); 0 <= W; W--) Q[(J | 0) - 1 - (W | 0)] = T >> 8 * W & 255;
            return Q
        },
        L = function(T, J, Q) {
            if ((Q = typeof T, "object") == Q)
                if (T) {
                    if (T instanceof Array) return "array";
                    if (T instanceof Object) return Q;
                    if ("[object Window]" == (J = Object.prototype.toString.call(T), J)) return "object";
                    if ("[object Array]" == J || "number" == typeof T.length && "undefined" != typeof T.splice && "undefined" != typeof T.propertyIsEnumerable && !T.propertyIsEnumerable("splice")) return "array";
                    if ("[object Function]" == J || "undefined" != typeof T.call && "undefined" != typeof T.propertyIsEnumerable && !T.propertyIsEnumerable("call")) return "function"
                } else return "null";
            else if ("function" == Q && "undefined" == typeof T.call) return "object";
            return Q
        },
        zS = function(T, J) {
            x(((J.KB.push(J.L.slice()), J).L[218] = void 0, 218), J, T)
        },
        t = function(T, J, Q, W, v, y, Z, z, U) {
            if ((T.K = ((v = (U = (y = (W = (z = (J || T.C++, 0 < (Z = W ? 255 : J ? 5 : 2, T.B) && T.V && T.LB && 1 >= T.o && !T.u && !T.j) && (!J || 1 < T.Z - Q) && 0 == document.hidden, 4 == T.C)) || z ? T.g() : T.P, y - T.P), U >> 14), T.I && (T.I ^= v * (U << 2)), T).N += v, v || T.K), W) || z) T.C = 0, T.P = y;
            if (!z || y - T.G < T.B - Z) return false;
            return !(x(218, (z = b(T, (T.Z = Q, J) ? 284 : 218), T), T.l), T.s.push([GS, z, J ? Q + 1 : Q]), T.j = C, 0)
        },
        g, p = this || self,
        PN = function(T, J) {
            return J[T] << 24 | J[(T | 0) + 1] << 16 | J[(T | 0) + 2] << 8 | J[(T | 0) + 3]
        },
        C = p.requestIdleCallback ? function(T) {
            requestIdleCallback(function() {
                T()
            }, {
                timeout: 4
            })
        } : p.setImmediate ? function(T) {
            setImmediate(T)
        } : function(T) {
            setTimeout(T, 0)
        },
        q = function(T, J) {
            T.v = ((T.v ? T.v + "~" : "E:") + J.message + ":" + J.stack).slice(0, 2048)
        },
        U4 = function(T, J, Q, W, v, y) {
            function Z() {
                if (Q.K == Q) {
                    if (Q.L) {
                        var z = [rX, J, W, void 0, v, y, arguments];
                        if (2 == T) var U = f((n(z, Q), false), Q, false);
                        else if (1 == T) {
                            var F = !Q.s.length;
                            (n(z, Q), F) && f(false, Q, false)
                        } else U = Lq(Q, z);
                        return U
                    }
                    v && y && v.removeEventListener(y, Z, M)
                }
            }
            return Z
        },
        M = {
            passive: true,
            capture: true
        },
        A, I = function(T, J) {
            for (J = []; T--;) J.push(255 * Math.random() | 0);
            return J
        },
        pq = function(T, J, Q, W, v, y) {
            if (!J.v) {
                J.o++;
                try {
                    for (v = (Q = 0, J.l), W = void 0; --T;) try {
                        if (y = void 0, J.u) W = $d(J.u, J);
                        else {
                            if ((Q = b(J, 218), Q) >= v) break;
                            W = (y = (x(284, J, Q), S)(J), b)(J, y)
                        }
                        W && W.call ? W(J, T) : N(J, 0, [R, 21, y]), t(J, false, T, false)
                    } catch (Z) {
                        b(J, 412) ? N(J, 22, Z) : x(412, J, Z)
                    }
                    if (!T) {
                        if (J.rv) {
                            pq(667641748788, (J.o--, J));
                            return
                        }
                        N(J, 0, [R, 33])
                    }
                } catch (Z) {
                    try {
                        N(J, 22, Z)
                    } catch (z) {
                        q(J, z)
                    }
                }
                J.o--
            }
        },
        nq = String.fromCharCode(105, 110, 116, 101, 103, 67, 104, 101, 99, 107, 66, 121, 112, 97, 115, 115),
        E = [],
        jr = [],
        R = {},
        F_ = [],
        K = ((H.prototype.O = "toString", H).prototype.GH = void 0, []),
        u = (H.prototype.rv = false, H.prototype.bz = void 0, []),
        GS = [],
        rX = [],
        xd = [],
        d = (A = ((Mk, I, bf, function() {})(V0), H.prototype), A.Iz = function() {
            return Math.floor(this.R + (this.g() - this.G))
        }, H.prototype.D = "create", R.constructor),
        aX = ((A.jS = function() {
            return Math.floor(this.g())
        }, (A.mB = function(T, J, Q) {
            return T ^ (J ^= J << 13, J ^= J >> 17, (J = (J ^ J << 5) & Q) || (J = 1), J)
        }, A).g = (window.performance || {}).now ? function() {
            return this.lz + window.performance.now()
        } : function() {
            return +new Date
        }, A.U9 = function(T, J, Q, W, v) {
            for (W = v = 0; v < T.length; v++) W += T.charCodeAt(v), W += W << 10, W ^= W >> 6;
            return (v = (W += W << 3, W ^= W >> 11, T = W + (W << 15) >>> 0, new Number(T & (1 << J) - 1)), v)[0] = (T >>> J) % Q, v
        }, A.i = function(T, J, Q, W, v) {
            if ((Q = "array" === L(Q) ? Q : [Q], this).v) T(this.v);
            else try {
                W = [], v = !this.s.length, n([u, W, Q], this), n([E, T, W], this), J && !v || f(J, this, true)
            } catch (y) {
                q(this, y), T(this.v)
            }
        }, A).qR = function(T, J, Q, W, v, y) {
            for (W = (Q = [], y = 0); W < T.length; W++)
                for (y += J, v = v << J | T[W]; 7 < y;) y -= 8, Q.push(v >> y & 255);
            return Q
        }, void 0);
    H.prototype.W = function(T, J) {
        return J = (T = {}, aX = function() {
                return T == J ? 81 : 93
            }, {}),
            function(Q, W, v, y, Z, z, U, F, h, k, B, c, w, X, a) {
                U = T, T = J;
                try {
                    if (a = Q[0], a == K) {
                        v = Q[1];
                        try {
                            for (B = (X = (w = atob(v), c = 0), []); c < w.length; c++) h = w.charCodeAt(c), 255 < h && (B[X++] = h & 255, h >>= 8), B[X++] = h;
                            x(187, (this.l = (this.X = B, this.X.length << 3), this), [0, 0, 0])
                        } catch (D) {
                            N(this, 17, D);
                            return
                        }
                        pq(8001, this)
                    } else if (a == u) Q[1].push(b(this, 266).length, b(this, 35).length, b(this, 478), b(this, 119).length), x(365, this, Q[2]), this.L[121] && Dn(b(this, 121), 8001, this);
                    else {
                        if (a == E) {
                            this.K = (Z = (X = Q[2], O((b(this, 119).length | 0) + 2, 2)), z = this.K, this);
                            try {
                                y = b(this, 428), 0 < y.length && e(this, 119, O(y.length, 2).concat(y), 10), e(this, 119, O(this.N, 1), 109), e(this, 119, O(this[E].length, 1)), w = 0, w -= (b(this, 119).length | 0) + 5, W = b(this, 266), w += b(this, 94) & 2047, 4 < W.length && (w -= (W.length | 0) + 3), 0 < w && e(this, 119, O(w, 2).concat(I(w)), 15), 4 < W.length && e(this, 119, O(W.length, 2).concat(W), 156)
                            } finally {
                                this.K = z
                            }
                            if (k = ((((B = I(2).concat(b(this, 119)), B)[1] = B[0] ^ 6, B)[3] = B[1] ^ Z[0], B)[4] = B[1] ^ Z[1], this.vC(B))) k = "!" + k;
                            else
                                for (w = 0, k = ""; w < B.length; w++) F = B[w][this.O](16), 1 == F.length && (F = "0" + F), k += F;
                            return b((x(478, (b(this, ((c = k, b(this, 266)).length = X.shift(), 35)).length = X.shift(), this), X.shift()), this), 119).length = X.shift(), c
                        }
                        if (a == GS) Dn(Q[1], Q[2], this);
                        else if (a == rX) return Dn(Q[1], 8001, this)
                    }
                } finally {
                    T = U
                }
            }
    }();
    var y0, Jj = /./,
        fq = K.pop.bind((H.prototype.vC = (H.prototype.dv = 0, H.prototype.oz = 0, H.prototype[xd] = [0, 0, 1, 1, 0, 1, 1], function(T, J, Q, W) {
            if (Q = window.btoa) {
                for (J = (W = 0, ""); W < T.length; W += 8192) J += String.fromCharCode.apply(null, T.slice(W, W + 8192));
                T = Q(J).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "")
            } else T = void 0;
            return T
        }), H.prototype)[u]),
        WN = function(T, J) {
            return (J = Sr()) && 1 === T.eval(J.createScript("1")) ? function(Q) {
                return J.createScript(Q)
            } : function(Q) {
                return "" + Q
            }
        }(((y0 = (Jj[H.prototype.O] = fq, Q0({get: fq
        }, H.prototype.D)), H.prototype).AO = void 0, p));
    (g = p.botguard || (p.botguard = {}), 40) < g.m || (g.m = 41, g.bg = wX, g.a = BN), g.RBK_ = function(T, J, Q) {
        return [(Q = new H(T, J), function(W) {
            return IX(Q, W)
        })]
    };
}).call(this);
                                    

#54 JavaScript::Eval (size: 166, repeated: 1) - SHA256: 9868be918369e6c88a6ffb028bf39523d5c07d4c3fc1deb46f8f5117481f5ac4

                                        0,
function(n, p, J, V, l, b, X) {
    (b = (p = z(n, (J = z(n, 6), 3)), z(n, 7)), n).T == n && (V = B(n, b), l = B(n, J), X = B(n, p), l[X] = V, 435 == J && (n.o = void 0, 2 == X && (n.Z = SX(n, false, 435, 32), n.o = void 0)))
}
                                    

#55 JavaScript::Eval (size: 115, repeated: 1) - SHA256: f89d1fade18f6ae0aab92abcedf0c4ba0322251ea98709525db5d1d69c2f5f54

                                        0,
function(n, p, J, V) {
    Nl(n, true, p, 5, false, 1) || (V = z(n, 10), J = z(n, 15), C(n, J, function(l) {
        return eval(l)
    }(Pl(B(n.T, V)))))
}
                                    

#56 JavaScript::Eval (size: 139, repeated: 1) - SHA256: 9a486af96d3ab936d79cea559b1a813da61359e81aa139b1b50ce89233773e3e

                                        0,
function(n, p, J, V, l, b, X, x) {
    C(n, (J = (X = B((l = B(n, (p = z(n, (V = z(n, (x = z((b = z(n, 11), n), 15), 10)), 7)), V)), n), p), B(n, x)), b), dq(5, 5, l, J, false, 2, n, X))
}
                                    

#57 JavaScript::Eval (size: 71, repeated: 1) - SHA256: 01d3015832b5c2ced47f47a63e43fd7ce2c6ae22e02a94d54ec0e9b64ff24655

                                        0,
function(n, p, J, V) {
    C(n, (J = (p = (V = z(n, 10), z(n, 6)), n).u[V] && B(n, V), p), J)
}
                                    

#58 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 6357947a7cfe9240f19600cad1d8d94a5f1386532c86f1f36cf106b23dbfb23f

                                        0,
function(n) {
    xz(4, n)
}
                                    

#59 JavaScript::Eval (size: 463, repeated: 1) - SHA256: 8bacfe636976ab58fc5d9520c7c075b7f3fe32a127d52a2d63423fc03f8dbe7c

                                        0, lZ = function(Z, N, Q, k, R, f, n, p, J, V) {
    if (!Z.aZ) {
        if (n = B(((J = (0 == (f = B(Z, ((R = void 0, Q && Q[0] === Zo) && (k = Q[1], R = Q[2], Q = void 0), N)), f).length && (V = B(Z, 380) >> 3, f.push(k, V >> 8 & 255, -255 + (V | 255) - ~(V & 255) + (~V | 255)), void 0 != R && f.push(255 - ~R + -256 - (R & -256))), ""), Q) && (Q.message && (J += Q.message), Q.stack && (J += ":" + Q.stack)), Z), 132), 3 < n) {
            Z.T = (p = (J = (J = J.slice(0, ~(n & 3) - -1 - ~n + (n | -4)), n -= (J.length | 0) + 3, Nq(J, 12)), Z.T), Z);
            try {
                I(Z, F(2, J.length).concat(J), 328, 144)
            } finally {
                Z.T = p
            }
        }
        C(Z, 132, n)
    }
}
                                    

#60 JavaScript::Eval (size: 476, repeated: 1) - SHA256: d885ef0fbe40494fe29103217661e47f3884f03f4a5a4ff63364c2aa498d0712

                                        0, dq = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
    return (N + 2 & 43) >= N && (N - 2 | Z) < N && (b = (J = (n = Q[k] << f, V = Q[-4 - 4 * ~(k | R) - (k ^ R) + 2 * (~k | R)] << 16, ~(n & V) - 2 * ~n - (~n ^ V) + 2 * (~n | V)) | Q[(k | 0) + 2] << 8, p = Q[-2 * ~(k & 3) + -2 + (k ^ 3)], (p | 0) - (~J ^ p) + (J | ~p))), (N & 45) == N && (b = l = function() {
        if (n.T == n) {
            if (n.u) {
                var X = [Yg, k, Q, void 0, J, V, arguments];
                if (p == f) var x = zK(0, (O(3, 0, X, n), n), R, R, false);
                else if (1 == p) {
                    var c = !n.X.length;
                    O(7, 0, X, n), c && zK(0, n, R, R, false)
                } else x = WV(279, true, X, n);
                return x
            }
            J && V && J.removeEventListener(V, l, ql)
        }
    }), b
}
                                    

#61 JavaScript::Eval (size: 19, repeated: 1) - SHA256: 5421715bbdaf2550e31d10fc28d444310a8fe7147bbddecf0abb490358a1553b

                                        /.*\d:\d\d | \d+$/g
                                    

#62 JavaScript::Eval (size: 132, repeated: 1) - SHA256: c6dbd49d71fb444f2b62404154c4b6663f222698f19449194c1539391f770a53

                                        0, Mq = function(Z, N, Q, k, R) {
    if (3 == Z.length) {
        for (k = 0; 3 > k; k++) N[k] += Z[k];
        for (R = (Q = [13, 8, 13, 12, 16, 5, 3, 10, 15], 0); 9 > R; R++) N[3](N, R % 3, Q[R])
    }
}
                                    

#63 JavaScript::Eval (size: 76, repeated: 1) - SHA256: 26b144c57aba9846c5327ce982f31bf826453ff6044ada1f4d036109ff2c041b

                                        0,
function(n, p, J, V) {
    C((J = z(n, (V = z(n, (p = z(n, 7), 11)), 15)), n), J, B(n, p) | B(n, V))
}
                                    

#64 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 33a64d7377d23750fd06ffc86fffd219e1288c58ab0f4f0450d109cec1c6ebb8

                                        Xx
                                    

#65 JavaScript::Eval (size: 343, repeated: 1) - SHA256: 6d3257ebdce2685150e4927014b76ee95bfe991f3994c21296905d1105df102c

                                        Al = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x) {
    N.push((x = (X = (b = Z[0] << 24, V = Z[1] << 16, -~(b | V) + (~b & V) + (b | ~V)), Q = Z[2] << 8, 2 * ~(X & Q) - ~X - 2 * ~Q + (X | ~Q)), f = Z[3], -~f + 2 * (x & ~f) + (~x | f))), N.push((n = (p = Z[4] << 24 | Z[5] << 16, l = Z[6] << 8, -(l | 0) + ~l - 3 * ~(p | l) + 2 * (~p | l)), k = Z[7], (n | 0) + (n & ~k) - (n ^ k) + 2 * (~n & k))), N.push((J = Z[8] << 24, R = Z[9] << 16, -(J & R) - 1 - 2 * ~(J | R) + (~J ^ R)) | Z[10] << 8 | Z[11])
}
                                    

#66 JavaScript::Eval (size: 350, repeated: 1) - SHA256: 3cb474f2ce418edea5a1ff3066e7c9767be54d5f9f006e50556fc2c4c1e2b07d

                                        0, I = function(Z, N, Q, k, R, f, n, p, J) {
    if (Z.T == Z)
        for (J = B(Z, Q), 328 == Q ? (f = function(V, l, b, X, x) {
                if ((X = (l = J.length, (l | 0) - 4 >> 3), J).OT != X) {
                    b = [(x = (X << (J.OT = X, 3)) - 4, 0), 0, p[1], p[2]];
                    try {
                        J.qh = nN(36, 64, 24, 1, dq(5, 7, J, x, 1, 24), b, dq(5, 6, J, (x | 0) + 4, 1, 24))
                    } catch (c) {
                        throw c;
                    }
                }
                J.push(J.qh[l & 7] ^ V)
            }, p = B(Z, 52)) : f = function(V) {
                J.push(V)
            }, k && f(k & 255), n = N.length, R = 0; R < n; R++) f(N[R])
}
                                    

#67 JavaScript::Eval (size: 2, repeated: 1) - SHA256: da9c9d32a1f9be264c491f8c1988ec06d1cdd81d302d5a163a8413eda1997394

                                        Nq
                                    

#68 JavaScript::Eval (size: 254, repeated: 1) - SHA256: 03d028e92e4e05472f2e2f8dfc4b06a462e8d492be1a162114d3467e9ceedd59

                                        C = function(Z, N, Q) {
    if (120 == N || 380 == N) Z.u[N] ? Z.u[N].concat(Q) : Z.u[N] = z(Z, 56, Q);
    else {
        if (Z.aZ && 435 != N) return;
        184 == N || 328 == N || 501 == N || 55 == N || 52 == N ? Z.u[N] || (Z.u[N] = tS(Z, Q, 16, N, 10, 38, 35)) : Z.u[N] = tS(Z, Q, 16, N, 3, 121, 35)
    }
    435 == N && (Z.Z = SX(Z, false, 435, 32), Z.o = void 0)
}
                                    

#69 JavaScript::Eval (size: 1, repeated: 1) - SHA256: a83dd0ccbffe39d071cc317ddf6e97f5c6b1c87af91919271f9fa140b0508c6c

                                        I
                                    

#70 JavaScript::Eval (size: 1, repeated: 1) - SHA256: 6b23c0d5f35d1b11f9b683f0b0a617355deb11277d91ae091d399c655b87940d

                                        C
                                    

#71 JavaScript::Eval (size: 51, repeated: 1) - SHA256: cf1f9ef243aad86f2bcdb431c87c3a1a8c20c8db9cd0f63a9ab9276cf7530da1

                                        P = function(Z, N, Q) {
    return Q.K ? eX(Q.G, Q) : SX(Q, N, Z, 8)
}
                                    

#72 JavaScript::Eval (size: 623, repeated: 1) - SHA256: fa33b2305d98a22b2296866ceec254973be1c556dc50f199629a036eee349116

                                        tS = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
    if ((R - 3 ^ 15) >= R && (R + 5 ^ 14) < R)
        if (f = "array" === GK("call", k, "null") ? k : [k], this.J) Q(this.J);
        else try {
            Z = [], N = !this.X.length, O(8, 0, [rq, Z, f], this), O(5, 0, [HV, Q, Z], this), n && !N || zK(0, this, true, n, false)
        } catch (X) {
            D(28, this, ":", X), Q(this.J)
        }
        return R + 1 >> 4 || (N = [77, -85, 26, 57, -23, 94, N, -2, -44, -39], V = PV, J = f & 7, p = mJ[Z.R](Z.lx), p[Z.R] = function(X) {
            J = (J += 6 + 7 * f, l = X, Q + ~(J | 7) + (J & -8) + (J | -8))
        }, p.concat = function(X, x, c, M) {
            return (x = (M = k % Q + 1, +(V() | 0) * M + J + N[c = J + 27, (c | 0) - ~(c & 7) + ~c] * k * M - -2975 * k * l) + n * l * l - -2940 * l + 3 * k * k * M - M * l - 105 * k * k * l, l = void 0, X = N[x], N)[(J + 61 & 7) + (f & 2)] = X, N[J + ((f | 0) - (f ^ 2) - (~f ^ 2) + (~f | 2))] = -85, X
        }, b = p), b
}
                                    

#73 JavaScript::Eval (size: 306, repeated: 1) - SHA256: 405a8076b70ebf972545be2c835c7ae24f6f17b78980196978b43cb232fdef9c

                                        0,
function(n, p, J, V, l, b, X, x, c, M, A, g, H, T) {
    if (!Nl(n, true, p, 29, true, 1)) {
        if ("object" == (g = B(n, (J = B(n, (l = B(n, (c = z((V = z(n, (x = z(n, (H = z(n, 11), 14)), 11)), n), 15), b = B(n, H), x)), c)), V)), GK("call", b, "null"))) {
            for (X in A = [], b) A.push(X);
            b = A
        }
        for (T = (g = 0 < (M = 0, g) ? g : 1, b.length); M < T; M += g) l(b.slice(M, ~(M & g) - 3 * ~(M | g) + 2 * (~M ^ g)), J)
    }
}
                                    

#74 JavaScript::Eval (size: 94, repeated: 1) - SHA256: 7da64de68aeb5cb7d257751583a6664e3ebde881df590a6d359daf9d276dd4fd

                                        0,
function(n, p, J, V, l, b) {
    (b = B(n, (p = B(n, (l = z(n, (J = (V = z(n, 10), z(n, 10)), 10)), V)), J)), C)(n, l, p[b])
}
                                    

#75 JavaScript::Eval (size: 288, repeated: 1) - SHA256: 38f3b3ad3e60e8c6ebeaa38073f439ed9169c6140799b8f357623932a782a4dd

                                        0, nN = function(Z, N, Q, k, R, f, n, p, J, V) {
    for (p = (V = f[3] | (J = 0, 0), f[2] | 0); 16 > J; J++) n = n >>> 8 | n << Q, V = V >>> 8 | V << Q, n += R | 0, n ^= p + 4043, R = R << 3 | R >>> 29, R ^= n, V += p | 0, V ^= J + 4043, p = p << 3 | p >>> 29, p ^= V;
    return [u(R, 8, 3, 255), u(R, N, 2, 255), u(R, 96, k, 255), u(R, 40, 0, 255), u(n, 8, 3, 255), u(n, Z, 2, 255), u(n, 32, k, 255), u(n, 32, 0, 255)]
}
                                    

#76 JavaScript::Eval (size: 29, repeated: 1) - SHA256: 53e5b7d706a350fe98d52499058624e15cddc1541f17370f94a899a386c50255

                                        document.createElement('img')
                                    

#77 JavaScript::Eval (size: 347, repeated: 1) - SHA256: ed2087bf689c9f68f5dfc81c91f4ca2a57816130eb494959824ad4ace43a4db2

                                        SX = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x, c, M, A) {
    if (R = B(Z, 120), R >= Z.P) throw [Zo, 31];
    for (A = (l = Z.hh.length, V = 0, J = R, k); 0 < A;) f = J >> 3, x = J % 8, M = Z.l[f], n = 8 - (x | 0), b = n < A ? n : A, N && (p = Z, p.o != J >> 6 && (p.o = J >> 6, X = B(p, Q), p.Fz = nN(36, 64, 24, 1, p.Z, [0, 0, X[1], X[2]], p.o)), M ^= Z.Fz[f & l]), V |= (M >> 8 - (x | 0) - (b | 0) & (1 << b) - 1) << (A | 0) - (b | 0), J += b, A -= b;
    return C((c = V, Z), 120, (R | 0) + (k | 0)), c
}
                                    

#78 JavaScript::Eval (size: 70, repeated: 1) - SHA256: 24c633ad9ba7a401fcc4632f366884aec3c82d536980f2c446f90add11dd1a13

                                        0, ei = function(Z, N) {
    for (N = []; Z--;) N.push(255 * Math.random() | 0);
    return N
}
                                    

#79 JavaScript::Eval (size: 53, repeated: 1) - SHA256: ea87f2eb9f4243f3e1a933027fcdf741f1eaf555c9c257118bcb8875495c5551

                                        0, P = function(Z, N, Q) {
    return Q.K ? eX(Q.G, Q) : SX(Q, N, Z, 8)
}
                                    

#80 JavaScript::Eval (size: 1, repeated: 1) - SHA256: f67ab10ad4e4c53121b6a5fe4da9c10ddee905b978d3788d2723d7bfacbe28a9

                                        F
                                    

#81 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 5154ed9edd766c720bf72e26a776b9125879a35ba03771533d43a3d35a38cf4e

                                        dq
                                    

#82 JavaScript::Eval (size: 95, repeated: 1) - SHA256: d2565d0f31c5e1927edbe154fd80d1d5cbe9780f1ade68c656ec7152a4781fb1

                                        0,
function(n, p, J, V, l, b) {
    C(n, (J = B((l = B((V = z((b = z(n, (p = z(n, 6), 7)), n), 10), n), p), n), b), V), +(l == J))
}
                                    

#83 JavaScript::Eval (size: 22, repeated: 1) - SHA256: ff67583209ad77c7bbf52ab5909d58719e2a69a54188b4fc7b0fa1df0291555d

                                        0,
function(n) {
    KN(n, 4)
}
                                    

#84 JavaScript::Eval (size: 255, repeated: 1) - SHA256: 29d929bcf1c0393c11b2d77bf97ee788ba95df4ebf246356e34b9cd4e70724a1

                                        0,
function(n, p, J, V, l, b, X, x, c) {
    Nl(n, true, p, 6, false, 1) || (l = Hl(7, 14, 1, n.T, true), J = l.L, x = J.length, c = l.jy, X = l.DG, b = l.LY, V = 0 == x ? new X[b] : 1 == x ? new X[b](J[0]) : 2 == x ? new X[b](J[0], J[1]) : 3 == x ? new X[b](J[0], J[1], J[2]) : 4 == x ? new X[b](J[0], J[1], J[2], J[3]) : 2(), C(n, c, V))
}
                                    

#85 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 59b245b397733d8ebe34028ca4a10713eb0f697264fef4183fc1b07d7977263d

                                        bZ
                                    

#86 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 40f4a5a9bda97d48e7f4914df0d52fa603423319e250ab2496fbd8be6f82c4aa

                                        GW
                                    

#87 JavaScript::Eval (size: 134, repeated: 1) - SHA256: 7e1c85feceb5d31b0628b43b4a564276bb612b594ffeb147c8252cd6b50f86d8

                                        0, B = function(Z, N, Q) {
    if (void 0 === (Q = Z.u[N], Q)) throw [Zo, 30, N];
    if (Q.value) return Q.create();
    return Q.create(3 * N * N + -85 * N + -84), Q.prototype
}
                                    

#88 JavaScript::Eval (size: 104, repeated: 1) - SHA256: fcc2fac658d00b27d63773ac2efc03019acf4c7e1d1fc0d153908c1dca051cfc

                                        0,
function(n, p, J, V, l) {
    for (p = (J = (V = z((l = z(n, 7), true), 34, n), []), 0); p < V; p++) J.push(P(435, true, n));
    C(n, l, J)
}
                                    

#89 JavaScript::Eval (size: 66, repeated: 1) - SHA256: 21f31b0e42e8336b2cdf0bff276161d897c4be51560db92894157b3f54c9317a

                                        0, KN = function(Z, N, Q, k) {
    I(Z, F(N, B(Z, (Q = z(Z, (k = z(Z, 15), 15)), k))), Q)
}
                                    

#90 JavaScript::Eval (size: 78, repeated: 1) - SHA256: 807e313093e4056e82f2381519e0f83046341bfc8bb459a66aba6c263553f4c1

                                        0,
function(n, p, J, V, l) {
    (V = B((l = (p = z(n, (J = z(n, 6), 14)), B(n, p)), n), J), C)(n, p, l + V)
}
                                    

#91 JavaScript::Eval (size: 202, repeated: 1) - SHA256: 923a5ff08354d8cf8f85e3e9c4d33ade2593a843c3fa9e7e42768602640e4d5a

                                        0,
function(n, p, J, V, l, b, X, x, c, M) {
    0 !== (l = (X = (V = B(n, (J = z(n, (M = z(n, (x = z(n, 7), 7)), c = z(n, 11), 3)), b = B(n, M), c)), B(n, J)), B(n.T, x)), l) && (p = dq(5, 12, X, V, false, 2, n, 1, l, b), l.addEventListener(b, p, ql), C(n, 12, [l, b, p]))
}
                                    

#92 JavaScript::Eval (size: 159, repeated: 1) - SHA256: ed2b7d8395578b6813022e5d55ce8066479d2def9c664882260f1516472c1838

                                        0,
function(a) {
    var b = a.length;
    if (2 > b) return 0;
    else {
        for (var c = 0, d = 0; d < b; ++d) c += a[d];
        for (var e = (c /= b, 0), f = 0; f < b; ++f) {
            var g = a[f] - c;
            e += g * g
        }
        return e = Math.sqrt(e / b)
    }
}
                                    

#93 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 733263fa66980d849739c6c957901e46255b0626e55be80ca86a4bf5199a5f22

                                        KN
                                    

#94 JavaScript::Eval (size: 299, repeated: 1) - SHA256: a5f4a6a03f669354da75bf0ffe2cf74d56054b1397f65f3b01b66ab22a21fc75

                                        0,
function(n, p, J, V, l, b, X, x, c) {
    for (p = X = (V = (x = [], 0), 0); p < n.d.length;) {
        for (c = (l = "", n).d[p++]; l.length != c;) {
            for (; n.M[V] == X;) l += f[n.M[++V]], V++;
            if (l.length == c) break;
            l += f[n[X++]]
        }
        if (J = n.d[p++]) b = 1 == J ? l : J.match(/=$/) ? J + l : "this." + J + "=" + l, x.push(eval(Pl("0," + b)))
    }
    return delete n.d, delete(n.length = 0, n).M, x
}
                                    

#95 JavaScript::Eval (size: 64, repeated: 1) - SHA256: 9ea236d2bdaebe77b1c584bccfc9e289e8fcff1a532a8796b9b59dfbe1832c60

                                        0,
function(y, Z, z) {
    x((z = (Z = (z = S(y), S(y)), y.L[z]) && b(y, z), Z), y, z)
}
                                    

#96 JavaScript::Eval (size: 29, repeated: 1) - SHA256: f0ac18d7239af52433e575a2c804569f7febb71d81a0c30ae28a05580878d230

                                        0,
function(n) {
    z(true, 17, n, 1)
}
                                    

#97 JavaScript::Eval (size: 2, repeated: 1) - SHA256: d70bdf9097e42dcde8e2d104447555eb25c8a51703f1fab50f284eccc60e4c89

                                        nN
                                    

#98 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 9a581e14467065a2d2f6b2f85e6eeadd90538cf54d483cfe92312fbc01b5d2d7

                                        SX
                                    

#99 JavaScript::Eval (size: 41036, repeated: 1) - SHA256: 6f9edec871c2b9493e426f3216cbd45b6ffd98dbcfb91f6640013afaad8c8f47

                                        //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjogMywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiICJdLCJuYW1lcyI6WyJjbG9zdXJlRHluYW1pY0J1dHRvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEifQ==
(function() {
    var S = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X) {
            if (1 == ((Z ^ 92) & 15))
                if (V = R.N.h[String(Q)]) {
                    for (l = (J = (V = V.concat(), N), 0); l < V.length; ++l)(b = V[l]) && !b.j && b.capture == f && (n = b.listener, p = b.ux || b.src, b.O && e(1, N, b, 8, R.N), J = false !== n.call(p, k) && J);
                    X = J && !k.defaultPrevented
                } else X = N;
            if (2 == Z - ((Z + 7 & 73) >= Z && Z - 7 << 2 < Z && (X = Math.floor(this.pY + (this.i() - this.W))), 1) >> 3) {
                for (J = f = 0; f < N.length; f++) J += N.charCodeAt(f), J += J << 10, J = (V = J >> 6, -1 + (~J & V) - (~J | V));
                (l = new Number((p = (R = 1 << Q, (R | 1) - (R & 1) - 2 * (~R & 1)), n = (J += J << 3, J ^= J >> 11, J + (J << 15) >>> 0), -1 - ~n - (n & ~p))), l)[0] = (n >>> Q) % k, X = l
            }
            if (2 > ((Z | 56) == Z && (N.z_ = function() {
                    return N.HC ? N.HC : N.HC = new N
                }, N.HC = void 0), Z >> 1 & 14) && 9 <= (Z - 9 & 11))
                for (p = R.length, f = "string" === typeof R ? R.split(N) : R, n = Q; n < p; n++) n in f && k.call(void 0, f[n], n, R);
            return X
        },
        Zq = function(Z, N, Q, k, R, f, n, p, J, V) {
            if (4 <= N >> (2 == (N + 8 >> 4 || (V = Math.floor(this.i())), N >> 2 & 15) && (k.cC(function(l) {
                    f = l
                }, Q, R), V = f), 2) && 1 > (N ^ Z) >> 4) a: {
                for (n in f)
                    if (R.call(void 0, f[n], n, f)) {
                        V = k;
                        break a
                    }
                V = Q
            }
            if (2 == (N << 1 & 15))
                for (J in f = k, R.h) {
                    for (n = (p = k, R.h)[J]; p < n.length; p++) ++f, m(73, Q, n[p]);
                    delete R.h[R.U--, J]
                }
            return V
        },
        Ql = function(Z, N, Q, k, R, f, n, p, J) {
            if ((N & 61) == ((N & 106) == N && (k.classList ? Array.prototype.forEach.call(Q, function(V) {
                    Nl("string", " ", 0, 8, V, "class", k)
                }) : w(90, "class", k, Array.prototype.filter.call(w(33, "string", k), function(V) {
                    return !nM(11, V, 0, 16, Q)
                }).join(" "))), N) && (J = Q in kg ? kg[Q] : kg[Q] = k + Q), !((N ^ Z) & 3)) a: {
                switch (n) {
                    case 1:
                        J = p ? "disable" : "enable";
                        break a;
                    case 2:
                        J = p ? "highlight" : "unhighlight";
                        break a;
                    case 4:
                        J = p ? "activate" : "deactivate";
                        break a;
                    case Q:
                        J = p ? "select" : "unselect";
                        break a;
                    case R:
                        J = p ? "check" : "uncheck";
                        break a;
                    case k:
                        J = p ? "focus" : "blur";
                        break a;
                    case f:
                        J = p ? "open" : "close";
                        break a
                }
                throw Error("Invalid component state");
            }
            if ((N & 77) == N) {
                if (n = window.btoa) {
                    for (Q = (f = "", 0); Q < k.length; Q += 8192) f += String.fromCharCode.apply(null, k.slice(Q, Q + 8192));
                    R = n(f).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "")
                } else R = void 0;
                J = R
            }
            return J
        },
        JS = function(Z, N, Q, k, R, f, n, p, J, V, l) {
            if (N - 9 << 1 < N && (N + 5 & 15) >= N) a: if ("string" === typeof k) l = "string" !== typeof f || f.length != Q ? -1 : k.indexOf(f, R);
                else {
                    for (n = R; n < k.length; n++)
                        if (n in k && k[n] === f) {
                            l = n;
                            break a
                        }
                    l = -1
                }
            return 2 > ((N | 4) & 8) && 2 <= ((N | 8) & 5) && (Array.isArray(n) && (n = n.join(Q)), p = "aria-" + k, "" === n || void 0 == n ? (Rl || (J = {}, Rl = (J.atomic = R, J.autocomplete = "none", J.dropeffect = "none", J.haspopup = R, J.live = "off", J.multiline = R, J.multiselectable = R, J.orientation = "vertical", J.readonly = R, J.relevant = "additions text", J.required = R, J.sort = "none", J[Z] = R, J.disabled = R, J.hidden = R, J.invalid = "false", J)), V = Rl, k in V ? f.setAttribute(p, V[k]) : f.removeAttribute(p)) : f.setAttribute(p, n)), l
        },
        K = function(Z, N, Q, k, R, f, n, p, J) {
            return (N | 32) == (((N + (N - 7 >> 4 || (n = typeof R, f = n != Z ? n : R ? Array.isArray(R) ? "array" : n : "null", p = f == k || f == Z && typeof R.length == Q), 1) & 46) < N && (N - 1 | 10) >= N && (J = function() {}, J.prototype = k.prototype, Q.H = k.prototype, Q.prototype = new J, Q.prototype.constructor = Q, Q.oR = function(V, l, b) {
                for (var X = Array(arguments.length - Z), x = Z; x < arguments.length; x++) X[x - Z] = arguments[x];
                return k.prototype[l].apply(V, X)
            }), (N - 9 ^ 20) < N) && (N + 1 ^ 22) >= N && (k = typeof Q, p = "object" == k && Q != Z || "function" == k), N) && (this.T = Z), p
        },
        lh = function(Z, N, Q, k, R, f, n, p, J, V, l) {
            if (2 > (2 == (Q - 8 & 3) && (fM.call(this), N || pM || (pM = new Vl), this.Mh = null, this.sT = false, this.Nh = this.Xz = this.bx = this.ye = null, this.g$ = void 0), Q >> 1 & 16) && 1 <= Q + 7 >> 3)
                if (R && R.once) u(n, 67, N, null, R, J, p, f);
                else if (Array.isArray(J))
                for (V = k; V < J.length; V++) lh(9, true, 3, 0, R, f, n, p, J[V]);
            else p = bh(1, Z, p), f && f[Xc] ? f.N.add(String(J), p, false, K(null, 3, R) ? !!R.capture : !!R, n) : u(R, 83, null, false, n, J, p, false, f);
            return (Q & 125) == Q && G.call(this, N, k || r.z_(), R), l
        },
        z = function(Z, N, Q, k, R, f, n) {
            if ((N & 29) == N) {
                for (R = z(Q, 6), f = 0; 0 < k; k--) f = f << 8 | P(435, Z, Q);
                C(Q, R, f)
            }
            return 3 == (((N + 1 ^ ((N ^ 5) >> 4 || (Z.K ? n = eX(Z.G, Z) : (Q = SX(Z, true, 435, 8), Q & 128 && (Q ^= 128, k = SX(Z, true, 435, 2), Q = (Q << 2) + (k | 0)), n = Q)), 26)) < N && (N - 8 ^ 14) >= N && (k = mJ[Z.R](Z.xA), k[Z.R] = function() {
                return Q
            }, k.concat = function(p) {
                Q = p
            }, n = k), N) ^ 61) >> 3 && (R = P(435, Z, Q), (R | 128) - ~(R & 128) + ~(R | 128) && (R = (f = R & 127, k = P(435, Z, Q) << 7, (f & k) + ~(f & k) - ~(f | k))), n = R), n
        },
        u = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x) {
            if (19 > (N ^ 93) && 3 <= (N + 6 & 31)) {
                if (!f) throw Error("Invalid event type");
                if (X = ((l = m(36, (b = K(Q, 64, Z) ? !!Z.capture : !!Z, J))) || (J[xg] = l = new L(J)), l).add(f, n, p, b, R), !X.proxy) {
                    if (((V = cV(23, 3, 24), X.proxy = V, V).src = J, V).listener = X, J.addEventListener) Ml || (Z = b), void 0 === Z && (Z = k), J.addEventListener(f.toString(), V, Z);
                    else if (J.attachEvent) J.attachEvent(Ql(43, 16, f.toString(), "on"), V);
                    else if (J.addListener && J.removeListener) J.addListener(V);
                    else throw Error("addEventListener and attachEvent are unavailable.");
                    AS++
                }
            }
            if ((N - 2 | ((N & 108) == N && (x = (R = Z >>> 8 * Q, k - (~R & k))), 64)) < N && (N - 2 ^ 16) >= N)
                if (Array.isArray(f))
                    for (J = 0; J < f.length; J++) u(Z, 66, true, null, R, f[J], n, p);
                else n = bh(1, 13, n), p && p[Xc] ? p.N.add(String(f), n, Q, K(k, 6, R) ? !!R.capture : !!R, Z) : u(R, 84, null, false, Z, f, n, Q, p);
            return 5 <= ((22 <= (N + 2 & 27) && 37 > N >> 2 && (x = e(1, Z, R, 27) && !!(Z.V & R) != Q && (!(f = Z.z2, -(f | 0) - k * ~(f | R) - (f & ~R) + k * (f | ~R)) || Z.dispatchEvent(Ql(43, 3, 8, 32, 16, 64, R, Q))) && !Z.KY), N) >> 1 & 14) && 13 > (N - 3 & 16) && (f = JS("busy", 3, 1, Z, k, Q), (R = f >= k) && Array.prototype.splice.call(Z, f, 1), x = R), x
        },
        bh = function(Z, N, Q, k, R, f, n, p, J, V) {
            if (N + 9 >> Z < N && (N - 4 ^ 14) >= N) {
                for (R = (J = n = 0, []); n < Q.length; n++)
                    for (J += k, f = f << k | Q[n]; 7 < J;) J -= 8, R.push((p = f >> J, 255 + (p & -256) - (p ^ 255)));
                V = R
            }
            if (17 <= ((N + 7 ^ 19) < N && N - 3 << Z >= N && ("function" === typeof Q ? V = Q : (Q[KM] || (Q[KM] = function(l) {
                    return Q.handleEvent(l)
                }), V = Q[KM])), N - 9) && 30 > N - 8)
                if (Q.classList) Array.prototype.forEach.call(k, function(l, b) {
                    Q.classList ? Q.classList.add(l) : (Q.classList ? Q.classList.contains(l) : nM(11, l, 0, 18, w(38, "string", Q))) || (b = U(24, "", 15, "string", Q), w(89, "class", Q, b + (0 < b.length ? " " + l : l)))
                });
                else {
                    for (f in (Array.prototype.forEach.call(w(36, "string", (n = {}, Q)), function(l) {
                            n[l] = true
                        }), Array.prototype).forEach.call(k, function(l) {
                            n[l] = true
                        }), R = "", n) R += 0 < R.length ? " " + f : f;
                    w(91, "class", Q, R)
                }
            return V
        },
        cV = function(Z, N, Q, k, R, f, n, p, J, V) {
            return (1 == (Q ^ Z) >> N && (V = function(l) {
                return k.call(V.src, V.listener, l)
            }, k = $g, J = V), Q ^ 11) >> N || (q.call(this, k ? k.type : ""), this.relatedTarget = this.currentTarget = this.target = null, this.button = this.screenY = this.screenX = this.clientY = this.clientX = this.offsetY = this.offsetX = 0, this.key = "", this.charCode = this.keyCode = 0, this.metaKey = this.shiftKey = this.altKey = this.ctrlKey = false, this.state = null, this.pointerId = 0, this.pointerType = "", this.g = null, k && (f = this.type = k.type, p = k.changedTouches && k.changedTouches.length ? k.changedTouches[0] : null, this.target = k.target || k.srcElement, this.currentTarget = R, n = k.relatedTarget, n || ("mouseover" == f ? n = k.fromElement : "mouseout" == f && (n = k.toElement)), this.relatedTarget = n, p ? (this.clientX = void 0 !== p.clientX ? p.clientX : p.pageX, this.clientY = void 0 !== p.clientY ? p.clientY : p.pageY, this.screenX = p.screenX || 0, this.screenY = p.screenY || 0) : (this.offsetX = k.offsetX, this.offsetY = k.offsetY, this.clientX = void 0 !== k.clientX ? k.clientX : k.pageX, this.clientY = void 0 !== k.clientY ? k.clientY : k.pageY, this.screenX = k.screenX || 0, this.screenY = k.screenY || 0), this.button = k.button, this.keyCode = k.keyCode || 0, this.key = k.key || "", this.charCode = k.charCode || ("keypress" == f ? k.keyCode : 0), this.ctrlKey = k.ctrlKey, this.altKey = k.altKey, this.shiftKey = k.shiftKey, this.metaKey = k.metaKey, this.pointerId = k.pointerId || 0, this.pointerType = "string" === typeof k.pointerType ? k.pointerType : gq[k.pointerType] || "", this.state = k.state, this.g = k, k.defaultPrevented && d.H.preventDefault.call(this))), J
        },
        Nl = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x, c, M) {
            if (((k & 92) == k && (n.classList ? n.classList.remove(R) : (n.classList ? n.classList.contains(R) : nM(11, R, Q, 10, w(37, Z, n))) && w(88, f, n, Array.prototype.filter.call(w(32, Z, n), function(A) {
                    return A != R
                }).join(N))), k + 1 & 10) < k && (k + 4 ^ 24) >= k) {
                if ((((X = (V = (b = (J = (c = (x = R ? 255 : N ? 5 : 2, (N || Z.ET++, 0 < Z.ZG && Z.JM && Z.UT) && Z.hM <= f && !Z.K && !Z.F && (!N || Z.r$ - Q > f) && 0 == document.hidden), 4 == Z.ET)) || c ? Z.i() : Z.C, b - Z.C), V >> 14), Z.Z && (Z.Z = (l = Z.Z, p = X * (V << 2), (l | 0) - (l & p) + (~l & p))), Z).IZ += X, Z).T = X || Z.T, J) || c) Z.ET = 0, Z.C = b;
                !c || b - Z.W < Z.ZG - x ? M = false : (Z.r$ = Q, n = B(Z, N ? 380 : 120), C(Z, 120, Z.P), Z.X.push([uh, n, N ? Q + f : Q]), Z.F = ih, M = true)
            }
            return M
        },
        tS = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
            if ((R - 3 ^ 15) >= R && (R + 5 ^ 14) < R)
                if (f = "array" === GK("call", k, "null") ? k : [k], this.J) Q(this.J);
                else try {
                    Z = [], N = !this.X.length, O(8, 0, [rq, Z, f], this), O(5, 0, [HV, Q, Z], this), n && !N || zK(0, this, true, n, false)
                } catch (X) {
                    D(28, this, ":", X), Q(this.J)
                }
                return R + 1 >> 4 || (N = [77, -85, 26, 57, -23, 94, N, -2, -44, -39], V = PV, J = f & 7, p = mJ[Z.R](Z.lx), p[Z.R] = function(X) {
                    J = (J += 6 + 7 * f, l = X, Q + ~(J | 7) + (J & -8) + (J | -8))
                }, p.concat = function(X, x, c, M) {
                    return (x = (M = k % Q + 1, +(V() | 0) * M + J + N[c = J + 27, (c | 0) - ~(c & 7) + ~c] * k * M - -2975 * k * l) + n * l * l - -2940 * l + 3 * k * k * M - M * l - 105 * k * k * l, l = void 0, X = N[x], N)[(J + 61 & 7) + (f & 2)] = X, N[J + ((f | 0) - (f ^ 2) - (~f ^ 2) + (~f | 2))] = -85, X
                }, b = p), b
        },
        e = function(Z, N, Q, k, R, f, n) {
            return (2 <= (k << 2 & 7) && 5 > (k << Z & 8) && (n = !!(R = N.u4, -2 * ~R + ~(R | Q) + (~R & Q) + (~R | Q))), (k & 125) == k) && (f = Q.type, f in R.h && u(R.h[f], 13, Q, 0) && (m(65, N, Q), 0 == R.h[f].length && (delete R.h[f], R.U--))), n
        },
        CM = function(Z, N, Q, k, R) {
            return 4 > ((Q ^ ((Q ^ 28) >> 4 || (this.S = a.document || document), N)) & Z) && 0 <= (Q | 2) >> 4 && (R = k), R
        },
        LM = function(Z, N, Q, k, R, f) {
            return (Q + 7 ^ Z) < Q && Q - 9 << 2 >= Q && (this.type = k, this.currentTarget = this.target = R, this.defaultPrevented = this.D = false), f
        },
        w = function(Z, N, Q, k, R, f, n) {
            return 12 <= ((Z | 88) == ((4 == Z + 8 >> 4 && (R = Q, R ^= R << 13, R = (f = R >> 17, (R | f) + ~(R & f) - -1), R ^= R << 5, (R = (k | 0) - (R | k) - ~(R | k) + (R | ~k)) || (R = 1), n = N ^ R), 1) == (Z >> 1 & 11) && (this.src = N, this.h = {}, this.U = 0), Z) && ("string" == typeof Q.className ? Q.className = k : Q.setAttribute && Q.setAttribute(N, k)), Z - 7) && 4 > (Z >> 1 & 12) && (n = Q.classList ? Q.classList : U(24, "", 16, N, Q).match(/\S+/g) || []), n
        },
        O = function(Z, N, Q, k, R, f, n, p, J) {
            return 4 == (Z ^ ((Z | ((Z + 7 & 42) >= Z && Z - 5 << 1 < Z && k.X.splice(N, N, Q), 56)) == Z && "number" !== typeof k && k && !k.j && ((p = k.src) && p[Xc] ? e(1, true, k, 5, p.N) : (f = k.proxy, n = k.type, p.removeEventListener ? p.removeEventListener(n, f, k.capture) : p.detachEvent ? p.detachEvent(Ql(43, 17, n, "on"), f) : p.addListener && p.removeListener && p.removeListener(f), AS--, (R = m(35, p)) ? (e(1, true, k, 12, R), R.U == N && (R.src = Q, p[xg] = Q)) : m(69, true, k))), 1 == (Z - 3 & 13) && (J = (R = UF[N.substring(0, 3) + "_"]) ? R(N.substring(3), Q, k) : U(24, N, 64, Q)), 93)) >> 4 && (this.KY = this.KY), J
        },
        yl = function(Z, N, Q, k, R, f, n, p, J) {
            if (((Q & 105) == (2 == (Q >> 1 & 7) && (N.j ? n = true : (f = new d(k, this), R = N.ux || N.src, p = N.listener, N.O && O(Z, 0, null, N), n = p.call(R, f)), J = n), Q) && (this.listener = N, this.proxy = null, this.src = n, this.type = k, this.capture = !!R, this.ux = f, this.key = ++TK, this.j = this.O = false), 3) <= Q + 6 >> 4 && 23 > (Q ^ 46)) {
                if (!k) throw Error("Invalid class name " + k);
                if ("function" !== typeof N) throw Error("Invalid decorator function " + N);
            }
            return J
        },
        dq = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
            return (N + 2 & 43) >= N && (N - 2 | Z) < N && (b = (J = (n = Q[k] << f, V = Q[-4 - 4 * ~(k | R) - (k ^ R) + 2 * (~k | R)] << 16, ~(n & V) - 2 * ~n - (~n ^ V) + 2 * (~n | V)) | Q[(k | 0) + 2] << 8, p = Q[-2 * ~(k & 3) + -2 + (k ^ 3)], (p | 0) - (~J ^ p) + (J | ~p))), (N & 45) == N && (b = l = function() {
                if (n.T == n) {
                    if (n.u) {
                        var X = [Yg, k, Q, void 0, J, V, arguments];
                        if (p == f) var x = zK(0, (O(3, 0, X, n), n), R, R, false);
                        else if (1 == p) {
                            var c = !n.X.length;
                            O(7, 0, X, n), c && zK(0, n, R, R, false)
                        } else x = WV(279, true, X, n);
                        return x
                    }
                    J && V && J.removeEventListener(V, l, ql)
                }
            }), b
        },
        D = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X) {
            if ((2 > (Z | 8) >> 4 && 10 <= (Z >> 1 & 13) && (N.J = ((N.J ? N.J + "~" : "E:") + k.message + Q + k.stack).slice(0, 2048)), 11 <= Z >> 2) && 1 > (Z << 1 & 16)) {
                if (BV.call(this, k), !(n = N)) {
                    for (J = this.constructor; J;) {
                        if (R = (p = U(24, J, 26), jX)[p]) break;
                        J = (f = Object.getPrototypeOf(J.prototype)) && f.constructor
                    }
                    n = R ? "function" === typeof R.z_ ? R.z_() : new R : null
                }
                this.Y = n
            }
            if (!(Z + 7 >> 4))
                if (f = N.length, f > Q) {
                    for (k = Array(f), R = Q; R < f; R++) k[R] = N[R];
                    X = k
                } else X = [];
            if (1 == (Z - 2 & 7))
                if (Array.isArray(n))
                    for (V = Q; V < n.length; V++) D(19, null, 0, k, R, f, n[V], p);
                else b = K(N, 3, k) ? !!k.capture : !!k, R = bh(1, 11, R), p && p[Xc] ? p.N.remove(String(n), R, b, f) : p && (J = m(39, p)) && (l = J.BC(b, f, R, n)) && O(57, 0, null, l);
            return X
        },
        hS = function(Z, N, Q, k, R, f, n, p, J, V) {
            if ((N + 4 & 6) < Z && 4 <= (N << 1 & 7)) a: {
                for (p = Q; p < R.length; ++p)
                    if (J = R[p], !J.j && J.listener == n && J.capture == !!f && J.ux == k) {
                        V = p;
                        break a
                    }
                V = -1
            }
            return (N + 6 & 26) < N && (N + 9 & 59) >= N && (V = Q && Q.parentNode ? Q.parentNode.removeChild(Q) : null), V
        },
        m = function(Z, N, Q, k, R, f, n) {
            return 13 <= (Z | (Z - 3 & ((Z & 31) == ((Z & 122) == Z && (n = function() {}, R = void 0, k = OF(N, function(p) {
                n && (Q && ih(Q), R = p, n(), n = void 0)
            }, !!Q)[0], f = {
                hot: function(p, J, V, l, b) {
                    function X() {
                        R(function(x) {
                            ih(function() {
                                p(x)
                            })
                        }, V)
                    }
                    if (!J) return l = k(V), p && p(l), l;
                    R ? X() : (b = n, n = function() {
                        (b(), ih)(X)
                    })
                }
            }), Z) && (Dq.call(this), this.N = new L(this), this.d$ = this, this.RZ = null), 10) || (Q = N[xg], f = Q instanceof L ? Q : null), 8)) && 16 > (Z ^ 78) && (Q.j = N, Q.listener = null, Q.proxy = null, Q.src = null, Q.ux = null), f
        },
        nM = function(Z, N, Q, k, R, f) {
            return (k & (17 > (k ^ 9) && k - 1 >= Z && N.Nh && N.Nh.forEach(Q, void 0), 26)) == k && (f = JS("busy", 8, 1, R, Q, N) >= Q), f
        },
        U = function(Z, N, Q, k, R, f) {
            return ((Q | (((Q + 2 ^ Z) < Q && (Q + 1 & 22) >= Q && (f = typeof R.className == k ? R.className : R.getAttribute && R.getAttribute("class") || N), (Q ^ 38) & 5) || (f = mJ[N](mJ.prototype, {
                replace: k,
                pop: k,
                length: k,
                floor: k,
                stack: k,
                splice: k,
                console: k,
                prototype: k,
                document: k,
                parent: k,
                call: k,
                propertyIsEnumerable: k
            })), 64)) == Q && (k(function(n) {
                n(N)
            }), f = [function() {
                return N
            }]), Q + 7 & 47) >= Q && (Q - 1 ^ 23) < Q && (f = Object.prototype.hasOwnProperty.call(N, Il) && N[Il] || (N[Il] = ++sF)), f
        },
        EF = function(Z, N, Q, k, R) {
            if (!(k = (R = N, a.trustedTypes), k) || !k.createPolicy) return R;
            try {
                R = k.createPolicy(Z, {
                    createHTML: Fc,
                    createScript: Fc,
                    createScriptURL: Fc
                })
            } catch (f) {
                if (a.console) a.console[Q](f.message)
            }
            return R
        },
        vV = function(Z, N, Q, k, R, f, n, p, J, V) {
            function l(b) {
                b && R.appendChild("string" === typeof b ? Z.createTextNode(b) : b)
            }
            for (J = 1; J < N.length; J++)
                if (V = N[J], !K(k, 9, "number", f, V) || K(null, 31, V) && 0 < V.nodeType) l(V);
                else {
                    a: {
                        if (V && "number" == typeof V.length) {
                            if (K(null, 5, V)) {
                                p = "function" == typeof V.item || "string" == typeof V.item;
                                break a
                            }
                            if ("function" === typeof V) {
                                p = "function" == typeof V.item;
                                break a
                            }
                        }
                        p = Q
                    }
                    S(34, n, 0, l, p ? D(5, V, 0) : V)
                }
        },
        B = function(Z, N, Q) {
            if (void 0 === (Q = Z.u[N], Q)) throw [Zo, 30, N];
            if (Q.value) return Q.create();
            return Q.create(3 * N * N + -85 * N + -84), Q.prototype
        },
        Nq = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
            for (V = (b = (Q = Z.replace(/\r\n/g, "\n"), 0), []), l = 0; l < Q.length; l++) f = Q.charCodeAt(l), 128 > f ? V[b++] = f : (2048 > f ? V[b++] = f >> 6 | 192 : (55296 == (f & 64512) && l + 1 < Q.length && 56320 == (J = Q.charCodeAt(l + 1), -~J + (J ^ 64512) + 2 * (~J ^ 64512) - (J | -64513)) ? (f = (p = (f | 0) - (f ^ 1023) + (~f & 1023) << 10, 3 * (65536 & p) + ~(65536 & p) - (-65537 ^ p)) + (Q.charCodeAt(++l) & 1023), V[b++] = f >> 18 | 240, V[b++] = (R = f >> N & 63, -1 - ~R + (~R & 128))) : V[b++] = f >> N | 224, V[b++] = (n = (k = f >> 6, (k | 0) - ~(k & 63) + ~(k | 63) + (~k & 63)), -~(n | 128) + (n & -129) + (~n | 128))), V[b++] = (f | 0) + (~f ^ 63) - (f | -64) | 128);
            return V
        },
        Vl = function() {
            return CM.call(this, 8, 24, 16)
        },
        BV = function(Z) {
            return lh.call(this, 9, Z, 34)
        },
        nN = function(Z, N, Q, k, R, f, n, p, J, V) {
            for (p = (V = f[3] | (J = 0, 0), f[2] | 0); 16 > J; J++) n = n >>> 8 | n << Q, V = V >>> 8 | V << Q, n += R | 0, n ^= p + 4043, R = R << 3 | R >>> 29, R ^= n, V += p | 0, V ^= J + 4043, p = p << 3 | p >>> 29, p ^= V;
            return [u(R, 8, 3, 255), u(R, N, 2, 255), u(R, 96, k, 255), u(R, 40, 0, 255), u(n, 8, 3, 255), u(n, Z, 2, 255), u(n, 32, k, 255), u(n, 32, 0, 255)]
        },
        WV = function(Z, N, Q, k, R, f, n, p, J, V) {
            if ((R = Q[0], R) == rq) k.Qe = 25, k.s(Q);
            else if (R == HV) {
                f = Q[1];
                try {
                    J = k.J || k.s(Q)
                } catch (l) {
                    D(29, k, ":", l), J = k.J
                }
                f(J)
            } else if (R == uh) k.s(Q);
            else if (R == kz) k.s(Q);
            else if (R == Qs) {
                try {
                    for (p = 0; p < k.ey.length; p++) try {
                        V = k.ey[p], V[0][V[1]](V[2])
                    } catch (l) {}
                } catch (l) {}(0, Q[1])(function(l, b) {
                    k.cC(l, N, b)
                }, (k.ey = [], function(l) {
                    O(7, 0, (l = !k.X.length, [Rn]), k), l && zK(0, k, false, N, false)
                }))
            } else {
                if (R == Yg) return n = Q[2], C(k, Z, Q[6]), C(k, 166, n), k.s(Q);
                R == Rn ? (k.w$ = [], k.l = [], k.u = null) : R == Jl && "loading" === a.document.readyState && (k.F = function(l, b) {
                    function X() {
                        b || (b = N, l())
                    }(a.document.addEventListener("DOMContentLoaded", X, (b = false, ql)), a).addEventListener("load", X, ql)
                })
            }
        },
        eX = function(Z, N, Q) {
            return (Q = Z.create().shift(), N.K.create()).length || N.G.create().length || (N.G = void 0, N.K = void 0), Q
        },
        pN = function(Z, N) {
            for (var Q, k = 1, R; k < arguments.length; k++) {
                for (Q in R = arguments[k], R) Z[Q] = R[Q];
                for (var f = 0; f < fN.length; f++) Q = fN[f], Object.prototype.hasOwnProperty.call(R, Q) && (Z[Q] = R[Q])
            }
        },
        zK = function(Z, N, Q, k, R, f, n, p) {
            if (N.X.length) {
                ((N.JM && Z(), N).JM = true, N).UT = k;
                try {
                    f = N.i(), N.C = f, N.W = f, N.ET = Z, p = Vs(279, k, ":", null, true, N, false), n = N.i() - N.W, N.pY += n, n < (Q ? 0 : 10) || N.Qe-- <= Z || (n = Math.floor(n), N.w$.push(254 >= n ? n : 254))
                } finally {
                    N.JM = R
                }
                return p
            }
        },
        bZ = function(Z, N, Q, k, R, f, n, p) {
            if (!N.J) {
                N.hM++;
                try {
                    for (p = (R = 0, f = void 0, N).P; --Q;) try {
                        if ((n = void 0, N).K) f = eX(N.K, N);
                        else {
                            if ((R = B(N, 120), R) >= p) break;
                            f = B(N, (n = z(N, (C(N, 380, R), 6)), n))
                        }
                        Nl(N, !(f && f.call ? f(N, Q) : lZ(N, 55, [Zo, 21, n], 0), 1), Q, 3, false, 1)
                    } catch (J) {
                        B(N, Z) ? lZ(N, 55, J, 22) : C(N, Z, J)
                    }
                    if (!Q) {
                        if (N.kA) {
                            N.hM--, bZ(23, N, 128874443292, ":");
                            return
                        }
                        lZ(N, 55, [Zo, 33], 0)
                    }
                } catch (J) {
                    try {
                        lZ(N, 55, J, 22)
                    } catch (V) {
                        D(26, N, k, V)
                    }
                }
                N.hM--
            }
        },
        Xx = function(Z, N, Q, k) {
            try {
                k = Z[((N | 0) + 2) % 3], Z[N] = (Z[N] | 0) - (Z[(-2 - 2 * ~N - (N & -2) + (~N & 1)) % 3] | 0) - (k | 0) ^ (1 == N ? k << Q : k >>> Q)
            } catch (R) {
                throw R;
            }
        },
        SX = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x, c, M, A) {
            if (R = B(Z, 120), R >= Z.P) throw [Zo, 31];
            for (A = (l = Z.hh.length, V = 0, J = R, k); 0 < A;) f = J >> 3, x = J % 8, M = Z.l[f], n = 8 - (x | 0), b = n < A ? n : A, N && (p = Z, p.o != J >> 6 && (p.o = J >> 6, X = B(p, Q), p.Fz = nN(36, 64, 24, 1, p.Z, [0, 0, X[1], X[2]], p.o)), M ^= Z.Fz[f & l]), V |= (M >> 8 - (x | 0) - (b | 0) & (1 << b) - 1) << (A | 0) - (b | 0), J += b, A -= b;
            return C((c = V, Z), 120, (R | 0) + (k | 0)), c
        },
        ei = function(Z, N) {
            for (N = []; Z--;) N.push(255 * Math.random() | 0);
            return N
        },
        Si = function(Z, N, Q, k, R) {
            return bh.call(this, 1, 27, Z, N, Q, k, R)
        },
        mk = function() {
            return w.call(this, 26)
        },
        I = function(Z, N, Q, k, R, f, n, p, J) {
            if (Z.T == Z)
                for (J = B(Z, Q), 328 == Q ? (f = function(V, l, b, X, x) {
                        if ((X = (l = J.length, (l | 0) - 4 >> 3), J).OT != X) {
                            b = [(x = (X << (J.OT = X, 3)) - 4, 0), 0, p[1], p[2]];
                            try {
                                J.qh = nN(36, 64, 24, 1, dq(5, 7, J, x, 1, 24), b, dq(5, 6, J, (x | 0) + 4, 1, 24))
                            } catch (c) {
                                throw c;
                            }
                        }
                        J.push(J.qh[l & 7] ^ V)
                    }, p = B(Z, 52)) : f = function(V) {
                        J.push(V)
                    }, k && f(k & 255), n = N.length, R = 0; R < n; R++) f(N[R])
        },
        xz = function(Z, N, Q, k, R, f, n) {
            I(N, ((f = B(N, (R = (n = Z & (Q = Z & 4, 3), k = z(N, 11), z(N, 3)), k)), Q && (f = Nq("" + f, 12)), n) && I(N, F(2, f.length), R), f), R)
        },
        G = function(Z, N, Q, k, R, f, n, p) {
            return D.call(this, 48, N, Z, Q, k, R, f, n, p)
        },
        q = function(Z, N) {
            return LM.call(this, 31, 1, 13, Z, N)
        },
        $g = function(Z, N, Q, k, R, f) {
            return yl.call(this, 56, Z, 5, N, Q, k, R, f)
        },
        lZ = function(Z, N, Q, k, R, f, n, p, J, V) {
            if (!Z.aZ) {
                if (n = B(((J = (0 == (f = B(Z, ((R = void 0, Q && Q[0] === Zo) && (k = Q[1], R = Q[2], Q = void 0), N)), f).length && (V = B(Z, 380) >> 3, f.push(k, V >> 8 & 255, -255 + (V | 255) - ~(V & 255) + (~V | 255)), void 0 != R && f.push(255 - ~R + -256 - (R & -256))), ""), Q) && (Q.message && (J += Q.message), Q.stack && (J += ":" + Q.stack)), Z), 132), 3 < n) {
                    Z.T = (p = (J = (J = J.slice(0, ~(n & 3) - -1 - ~n + (n | -4)), n -= (J.length | 0) + 3, Nq(J, 12)), Z.T), Z);
                    try {
                        I(Z, F(2, J.length).concat(J), 328, 144)
                    } finally {
                        Z.T = p
                    }
                }
                C(Z, 132, n)
            }
        },
        wj = function(Z, N) {
            return Ql.call(this, 43, 10, N, Z)
        },
        cl = function(Z, N, Q) {
            return lh.call(this, 9, Z, 32, N, Q)
        },
        GK = function(Z, N, Q, k, R) {
            if ("object" == (R = typeof N, R))
                if (N) {
                    if (N instanceof Array) return "array";
                    if (N instanceof Object) return R;
                    if ("[object Window]" == (k = Object.prototype.toString.call(N), k)) return "object";
                    if ("[object Array]" == k || "number" == typeof N.length && "undefined" != typeof N.splice && "undefined" != typeof N.propertyIsEnumerable && !N.propertyIsEnumerable("splice")) return "array";
                    if ("[object Function]" == k || "undefined" != typeof N.call && "undefined" != typeof N.propertyIsEnumerable && !N.propertyIsEnumerable(Z)) return "function"
                } else return Q;
            else if ("function" == R && "undefined" == typeof N.call) return "object";
            return R
        },
        Vs = function(Z, N, Q, k, R, f, n, p, J, V) {
            for (; f.X.length;) {
                V = (f.F = k, f.X).pop();
                try {
                    p = WV(Z, R, V, f)
                } catch (l) {
                    D(24, f, Q, l)
                }
                if (N && f.F) {
                    J = f.F, J(function() {
                        zK(0, f, R, R, n)
                    });
                    break
                }
            }
            return p
        },
        Mq = function(Z, N, Q, k, R) {
            if (3 == Z.length) {
                for (k = 0; 3 > k; k++) N[k] += Z[k];
                for (R = (Q = [13, 8, 13, 12, 16, 5, 3, 10, 15], 0); 9 > R; R++) N[3](N, R % 3, Q[R])
            }
        },
        Al = function(Z, N, Q, k, R, f, n, p, J, V, l, b, X, x) {
            N.push((x = (X = (b = Z[0] << 24, V = Z[1] << 16, -~(b | V) + (~b & V) + (b | ~V)), Q = Z[2] << 8, 2 * ~(X & Q) - ~X - 2 * ~Q + (X | ~Q)), f = Z[3], -~f + 2 * (x & ~f) + (~x | f))), N.push((n = (p = Z[4] << 24 | Z[5] << 16, l = Z[6] << 8, -(l | 0) + ~l - 3 * ~(p | l) + 2 * (~p | l)), k = Z[7], (n | 0) + (n & ~k) - (n ^ k) + 2 * (~n & k))), N.push((J = Z[8] << 24, R = Z[9] << 16, -(J & R) - 1 - 2 * ~(J | R) + (~J ^ R)) | Z[10] << 8 | Z[11])
        },
        Dq = function() {
            return O.call(this, 16)
        },
        KN = function(Z, N, Q, k) {
            I(Z, F(N, B(Z, (Q = z(Z, (k = z(Z, 15), 15)), k))), Q)
        },
        $z = function() {
            return LM.call(this, 31, 1, 8)
        },
        E = function(Z, N, Q) {
            Q = this;
            try {
                gj(this, N, Z)
            } catch (k) {
                D(25, this, ":", k), Z(function(R) {
                    R(Q.J)
                })
            }
        },
        P = function(Z, N, Q) {
            return Q.K ? eX(Q.G, Q) : SX(Q, N, Z, 8)
        },
        C = function(Z, N, Q) {
            if (120 == N || 380 == N) Z.u[N] ? Z.u[N].concat(Q) : Z.u[N] = z(Z, 56, Q);
            else {
                if (Z.aZ && 435 != N) return;
                184 == N || 328 == N || 501 == N || 55 == N || 52 == N ? Z.u[N] || (Z.u[N] = tS(Z, Q, 16, N, 10, 38, 35)) : Z.u[N] = tS(Z, Q, 16, N, 3, 121, 35)
            }
            435 == N && (Z.Z = SX(Z, false, 435, 32), Z.o = void 0)
        },
        uZ = function(Z, N, Q, k) {
            return m.call(this, 32, Z, N, Q, k)
        },
        GW = function(Z, N, Q, k, R, f) {
            return B((C(k, R, (bZ(23, ((f = B(k, R), k.l) && f < k.P ? (C(k, R, k.P), iZ(R, N, k)) : C(k, R, N), k), Q, Z), f)), k), 166)
        },
        a = this || self,
        OF = function(Z, N, Q, k) {
            return O.call(this, 36, Z, N, Q, k)
        },
        iZ = function(Z, N, Q) {
            C(Q, Z, ((Q.CY.push(Q.u.slice()), Q).u[Z] = void 0, N))
        },
        Hl = function(Z, N, Q, k, R, f, n, p, J, V) {
            for (V = (p = z(k, (J = ((f = z(k, (n = k[rj] || {}, 10)), n).jy = z(k, N), n.L = [], k.T == k) ? (P(435, R, k) | 0) - Q : 1, 3)), 0); V < J; V++) n.L.push(z(k, Z));
            for (n.DG = B(k, p), n.LY = B(k, f); J--;) n.L[J] = B(k, n.L[J]);
            return n
        },
        Fc = function(Z) {
            return CM.call(this, 8, 24, 8, Z)
        },
        v, F = function(Z, N, Q, k, R) {
            for (Q = (Z | 1) + (R = [], ~Z) - 2 * (~Z & 1) - (~Z | 1); 0 <= Q; Q--) R[-~Z + ~(Z | 1) + (Z & -2) - (Q | 0)] = (k = N >> 8 * Q, 256 + (k & -256) + (~k ^ 255));
            return R
        },
        d = function(Z, N, Q, k, R) {
            return cV.call(this, 23, 3, 8, Z, N, Q, k, R)
        },
        L = function(Z) {
            return w.call(this, 3, Z)
        },
        fM = function() {
            return m.call(this, 5)
        },
        gj = function(Z, N, Q, k, R, f) {
            for (k = ((Z.lx = (Z.hh = (Z.th = (Z.yd = zW, on), Z[HV]), U(24, Z.R, 6, {get: function() {
                        return this.concat()
                    }
                })), Z).xA = mJ[Z.R](Z.lx, {
                    value: {
                        value: {}
                    }
                }), f = [], 0); 128 > k; k++) f[k] = String.fromCharCode(k);
            zK(0, Z, true, (O(3, 0, (O((O(5, 0, (new cl((C(Z, (C(Z, (C(Z, 104, (C(Z, 229, (C(Z, 468, (C(Z, (C(Z, (C(Z, (C(Z, 132, (C(Z, 121, ((C(Z, (C(Z, (C((C(Z, 61, (C(Z, 178, ((C(Z, (C(Z, (C(Z, (C(((C(Z, (C(Z, (C(Z, 248, (C(Z, (C(Z, 82, (C(Z, 329, (C(Z, (C(Z, 52, (C(Z, 23, ((C(Z, (C(Z, 190, (C(Z, 222, (C(Z, (C(Z, 328, (C(Z, 337, (C(Z, (C(Z, (C(Z, 380, (C(Z, (Z.AM = (Z.o = (Z.pY = 0, Z.T = Z, Z.hM = 0, (Z.mq = function(n) {
                return K.call(this, n, 41)
            }, (Z.ey = [], Z).Fz = void 0, Z.JM = false, Z.X = [], Z.l = [], Z.IZ = 1, (Z.J = void 0, Z.aZ = !(Z.r$ = 8001, Z.F = null, 1), R = (Z.G = void 0, Z.C = 0, (Z.CY = [], window.performance) || {}), Z).Bm = 0, Z.w$ = [], Z.Z = void 0, Z.P = 0, Z.W = (Z.UT = false, 0), Z).K = void 0, Z.u = [], void 0), (Z.Qe = 25, Z).ZG = 0, R.timeOrigin || (R.timing || {}).navigationStart || 0), Z.ET = void 0, 120), 0), 0)), 501), []), 327), a), function(n, p, J, V, l, b, X, x, c, M, A, g, H, T, y, h) {
                function Y(t, W) {
                    for (; c < t;) V |= P(435, true, n) << c, c += 8;
                    return V >>= (W = V & (1 << t) - 1, t), c -= t, W
                }
                for (y = (l = (c = (T = z(n, 6), V = 0), p = (Y(3) | 0) + 1, Y(5)), H = 0), X = []; y < l; y++) A = Y(1), X.push(A), H += A ? 0 : 1;
                for (h = (g = ((H | 1) - 2 * ~(H & 1) + -6 - (H | -2)).toString(2).length, []), b = 0; b < l; b++) X[b] || (h[b] = Y(g));
                for (M = 0; M < l; M++) X[M] && (h[M] = z(n, 14));
                for (J = (x = [], p); J--;) x.push(B(n, z(n, 14)));
                C(n, T, function(t, W, ol, wq, al) {
                    for (ol = (wq = (al = [], 0), []); wq < l; wq++) {
                        if (!(W = h[wq], X)[wq]) {
                            for (; W >= ol.length;) ol.push(z(t, 11));
                            W = ol[W]
                        }
                        al.push(W)
                    }
                    t.K = z(t, 26, x.slice()), t.G = z(t, 27, al)
                })
            })), ei(4))), 58), function(n) {
                xz(3, n)
            }), function(n, p, J, V, l, b, X) {
                (b = (p = z(n, (J = z(n, 6), 3)), z(n, 7)), n).T == n && (V = B(n, b), l = B(n, J), X = B(n, p), l[X] = V, 435 == J && (n.o = void 0, 2 == X && (n.Z = SX(n, false, 435, 32), n.o = void 0)))
            })), function(n, p, J, V, l) {
                (V = B((l = (p = z(n, (J = z(n, 6), 14)), B(n, p)), n), J), C)(n, p, l + V)
            })), 471), function(n, p, J) {
                C(n, (J = z(n, (p = z(n, 7), 3)), J), "" + B(n, p))
            }), C)(Z, 12, 0), 143)), [0, 0, 0])), 237), function(n, p, J, V, l, b, X, x, c, M) {
                0 !== (l = (X = (V = B(n, (J = z(n, (M = z(n, (x = z(n, 7), 7)), c = z(n, 11), 3)), b = B(n, M), c)), B(n, J)), B(n.T, x)), l) && (p = dq(5, 12, X, V, false, 2, n, 1, l, b), l.addEventListener(b, p, ql), C(n, 12, [l, b, p]))
            }), function(n, p, J, V) {
                if (J = n.CY.pop()) {
                    for (V = P(435, true, n); 0 < V; V--) p = z(n, 14), J[p] = n.u[p];
                    n.u = (J[132] = n.u[J[55] = n.u[55], 132], J)
                } else C(n, 120, n.P)
            })), function(n, p, J, V) {
                C(n, (V = (p = (J = z(n, 3), P(435, true, n)), z)(n, 3), V), B(n, J) >>> p)
            })), 296), function(n, p, J, V, l, b, X, x, c, M, A, g, H, T) {
                if (!Nl(n, true, p, 29, true, 1)) {
                    if ("object" == (g = B(n, (J = B(n, (l = B(n, (c = z((V = z(n, (x = z(n, (H = z(n, 11), 14)), 11)), n), 15), b = B(n, H), x)), c)), V)), GK("call", b, "null"))) {
                        for (X in A = [], b) A.push(X);
                        b = A
                    }
                    for (T = (g = 0 < (M = 0, g) ? g : 1, b.length); M < T; M += g) l(b.slice(M, ~(M & g) - 3 * ~(M | g) + 2 * (~M ^ g)), J)
                }
            }), function(n, p, J, V, l, b, X, x) {
                C(n, (J = (X = B((l = B(n, (p = z(n, (V = z(n, (x = z((b = z(n, 11), n), 15), 10)), 7)), V)), n), p), B(n, x)), b), dq(5, 5, l, J, false, 2, n, X))
            })), C(Z, 60, function(n, p, J, V, l, b, X, x, c) {
                Nl(n, true, p, 6, false, 1) || (l = Hl(7, 14, 1, n.T, true), J = l.L, x = J.length, c = l.jy, X = l.DG, b = l.LY, V = 0 == x ? new X[b] : 1 == x ? new X[b](J[0]) : 2 == x ? new X[b](J[0], J[1]) : 3 == x ? new X[b](J[0], J[1], J[2]) : 4 == x ? new X[b](J[0], J[1], J[2], J[3]) : 2(), C(n, c, V))
            }), 201), function(n) {
                KN(n, 1)
            }), 323), function(n) {
                KN(n, 4)
            }), C)(Z, 167, function() {}), Z), 156, 0), 45), function(n, p, J, V) {
                Nl(n, true, p, 5, false, 1) || (V = z(n, 10), J = z(n, 15), C(n, J, function(l) {
                    return eval(l)
                }(Pl(B(n.T, V)))))
            }), 216), function(n, p, J, V, l) {
                C(n, (p = GK("call", (l = B(n, (J = z(n, (V = z(n, 15), 3)), V)), l), "null"), J), p)
            }), 109), function(n, p, J, V, l, b) {
                C(n, (p = (l = B(n, (b = z(n, (V = (J = z(n, 14), z(n, 15)), 14)), J)), B(n, V)), b), l in p | 0)
            }), Z).K3 = 0, function(n, p, J, V, l, b) {
                (b = B(n, (p = B(n, (l = z(n, (J = (V = z(n, 10), z(n, 10)), 10)), V)), J)), C)(n, l, p[b])
            })), function(n, p) {
                iZ(120, (p = B(n, z(n, 10)), p), n.T)
            })), Z), 166, {}), 309), function(n, p, J, V) {
                0 != B((J = B(n, (V = z(n, 3), p = z(n, 6), p)), n), V) && C(n, 120, J)
            }), 223), function(n, p, J) {
                p = B((J = z(n, 6), n.T), J), p[0].removeEventListener(p[1], p[2], ql)
            }), Z.Pm = 0, C)(Z, 78, function(n, p, J, V, l) {
                for (p = (J = (V = z((l = z(n, 7), true), 34, n), []), 0); p < V; p++) J.push(P(435, true, n));
                C(n, l, J)
            }), function(n, p, J, V, l) {
                !Nl(n, true, p, 11, false, 1) && (J = Hl(7, 14, 1, n, true), V = J.DG, l = J.LY, n.T == n || l == n.mq && V == n) && (C(n, J.jy, l.apply(V, J.L)), n.C = n.i())
            })), 2048)), 53), function(n, p, J, V) {
                C((J = z(n, (V = z(n, (p = z(n, 7), 11)), 15)), n), J, B(n, p) || B(n, V))
            }), 344), function(n) {
                z(true, 16, n, 4)
            }), 184), [57, 0, 0]), function(n, p, J, V, l, b) {
                C(n, (J = B((l = B((V = z((b = z(n, (p = z(n, 6), 7)), n), 10), n), p), n), b), V), +(l == J))
            })), function(n, p, J, V, l, b, X) {
                for (p = (b = (X = (J = (l = z(true, (V = z(n, 11), 33), n), ""), B)(n, 283), X.length), 0); l--;) p = ((p | 0) + (z(true, 32, n) | 0)) % b, J += f[X[p]];
                C(n, V, J)
            })), Z)), Z.RR = 0, 55), []), 238), function(n) {
                xz(4, n)
            }), "Submit")), [Jl]), Z), 8), 0, [kz, N], Z), [Qs, Q]), Z), true), false)
        },
        tl = function(Z, N, Q, k, R) {
            return yl.call(this, 56, Z, 8, R, N, Q, k)
        },
        CN = function() {
            return bh.call(this, 1, 6)
        },
        LN = function(Z) {
            return hS.call(this, 5, 26, Z)
        },
        r = function() {
            return O.call(this, 88)
        },
        Il = "closure_uid_" + (1E9 * Math.random() >>> 0),
        sF = 0,
        pM, Ml = function(Z, N) {
            if (!a.addEventListener || !Object.defineProperty) return false;
            N = Object.defineProperty({}, "passive", (Z = false, {get: function() {
                    Z = true
                }
            }));
            try {
                a.addEventListener("test", function() {}, N), a.removeEventListener("test", function() {}, N)
            } catch (Q) {}
            return Z
        }(),
        gq = {
            2: "touch",
            3: (K(2, 25, (q.prototype.preventDefault = function() {
                this.defaultPrevented = true
            }, q.prototype.stopPropagation = function() {
                this.D = true
            }, Dq.prototype.KY = false, d), q), "pen"),
            4: "mouse"
        },
        Xc = "closure_listenable_" + (1E6 * (d.prototype.stopPropagation = (d.prototype.preventDefault = function(Z) {
            (Z = (d.H.preventDefault.call(this), this).g, Z.preventDefault) ? Z.preventDefault(): Z.returnValue = false
        }, function() {
            (d.H.stopPropagation.call(this), this.g.stopPropagation) ? this.g.stopPropagation(): this.g.cancelBubble = true
        }), Math.random()) | 0),
        TK = 0,
        fN = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),
        xg = "closure_lm_" + ((L.prototype.hasListener = function(Z, N, Q, k, R) {
            return Zq(49, (R = void 0 !== (Q = (k = void 0 !== Z) ? Z.toString() : "", N), 48), false, true, function(f, n) {
                for (n = 0; n < f.length; ++n)
                    if (!(k && f[n].type != Q || R && f[n].capture != N)) return true;
                return false
            }, this.h)
        }, L.prototype.BC = function(Z, N, Q, k, R, f) {
            return -1 < (f = (R = -1, this.h[k.toString()]), f && (R = hS(5, 14, 0, N, f, Z, Q)), R) ? f[R] : null
        }, L).prototype.add = (L.prototype.remove = function(Z, N, Q, k, R, f, n) {
            if (!(f = Z.toString(), f in this.h)) return false;
            return R = hS((n = this.h[f], 5), 7, 0, k, n, Q, N), -1 < R ? (m(70, true, n[R]), Array.prototype.splice.call(n, R, 1), 0 == n.length && (delete this.h[f], this.U--), true) : false
        }, function(Z, N, Q, k, R, f, n, p, J) {
            return (f = hS((n = (J = Z.toString(), this.h[J]), n || (n = this.h[J] = [], this.U++), 5), 6, 0, R, n, k, N), -1) < f ? (p = n[f], Q || (p.O = false)) : (p = new tl(N, !!k, R, this.src, J), p.O = Q, n.push(p)), p
        }), 1E6 * Math.random() | 0),
        kg = {},
        AS = 0,
        KM = "__closure_events_fn_" + (1E9 * Math.random() >>> 0);
    (((K(2, 30, fM, Dq), fM.prototype)[Xc] = true, v = fM.prototype, v.ix = function(Z) {
        this.RZ = Z
    }, v).addEventListener = function(Z, N, Q, k) {
        lh(9, true, 7, 0, Q, this, k, N, Z)
    }, v.removeEventListener = function(Z, N, Q, k) {
        D(11, null, 0, Q, N, k, Z, this)
    }, v.dispatchEvent = function(Z, N, Q, k, R, f, n, p, J, V, l) {
        if (k = this.RZ)
            for (n = []; k; k = k.RZ) n.push(k);
        if (Q = ((R = (J = (l = this.d$, N = n, Z), J).type || J, "string") === typeof J ? J = new q(J, l) : J instanceof q ? J.target = J.target || l : (f = J, J = new q(R, l), pN(J, f)), true), N)
            for (p = N.length - 1; !J.D && 0 <= p; p--) V = J.currentTarget = N[p], Q = S(13, true, R, J, V, true) && Q;
        if (J.D || (V = J.currentTarget = l, Q = S(77, true, R, J, V, true) && Q, J.D || (Q = S(29, true, R, J, V, false) && Q)), N)
            for (p = 0; !J.D && p < N.length; p++) V = J.currentTarget = N[p], Q = S(45, true, R, J, V, false) && Q;
        return Q
    }, v.BC = function(Z, N, Q, k) {
        return this.N.BC(Z, N, Q, String(k))
    }, v).hasListener = function(Z, N) {
        return this.N.hasListener(void 0 !== Z ? String(Z) : void 0, N)
    };
    var Rl;
    ((((v = ((S((((v = Vl.prototype, v.v = function(Z) {
        return "string" === typeof Z ? this.S.getElementById(Z) : Z
    }, v.getElementsByTagName = function(Z, N) {
        return (N || this.S).getElementsByTagName(String(Z))
    }, v).createElement = function(Z, N, Q) {
        return "application/xhtml+xml" === (Q = String((N = this.S, Z)), N.contentType) && (Q = Q.toLowerCase()), N.createElement(Q)
    }, v.createTextNode = function(Z) {
        return this.S.createTextNode(String(Z))
    }, v.appendChild = function(Z, N) {
        Z.appendChild(N)
    }, v).append = function(Z, N) {
        vV(9 == Z.nodeType ? Z : Z.ownerDocument || Z.document, arguments, false, "object", Z, "array", "")
    }, v.canHaveChildren = function(Z) {
        if (1 != Z.nodeType) return false;
        switch (Z.tagName) {
            case "APPLET":
            case "AREA":
            case "BASE":
            case "BR":
            case "COL":
            case "COMMAND":
            case "EMBED":
            case "FRAME":
            case "HR":
            case "IMG":
            case "INPUT":
            case "IFRAME":
            case "ISINDEX":
            case "KEYGEN":
            case "LINK":
            case "NOFRAMES":
            case "NOSCRIPT":
            case "META":
            case "OBJECT":
            case "PARAM":
            case "SCRIPT":
            case "SOURCE":
            case "STYLE":
            case "TRACK":
            case "WBR":
                return false
        }
        return true
    }, v.removeNode = LN, v.contains = function(Z, N) {
        if (!Z || !N) return false;
        if (Z.contains && 1 == N.nodeType) return Z == N || Z.contains(N);
        if ("undefined" != typeof Z.compareDocumentPosition) return Z == N || !!(Z.compareDocumentPosition(N) & 16);
        for (; N && Z != N;) N = N.parentNode;
        return N == Z
    }, 59), $z), $z.prototype.fY = "", $z).prototype.T2 = 0, K(2, 23, BV, fM), BV.prototype), v).Sy = $z.z_(), v.v = function() {
        return this.ye
    }, v).getParent = function() {
        return this.bx
    }, v).ix = function(Z) {
        if (this.bx && this.bx != Z) throw Error("Method not supported");
        BV.H.ix.call(this, Z)
    }, v).T_ = function() {
        this.sT = (nM(11, this, function(Z) {
            Z.sT && Z.T_()
        }, 12), this.g$ && Zq(49, 17, true, 0, this.g$), false)
    }, v.removeChild = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
        if (Z && ("string" === typeof Z ? Q = Z : ((k = Z.Mh) || (V = Z.Sy, p = Z, l = V.fY + ":" + (V.T2++).toString(36), k = p.Mh = l), Q = k), R = Q, this.Xz && R ? (f = this.Xz, b = (null !== f && R in f ? f[R] : void 0) || null) : b = null, Z = b, R && Z)) {
            if (null == (u(this.Nh, 14, ((J = this.Xz, R) in J && delete J[R], Z), 0), N && (Z.T_(), Z.ye && LN(Z.ye)), n = Z, n)) throw Error("Unable to set parent component");
            BV.H.ix.call((n.bx = null, n), null)
        }
        if (!Z) throw Error("Child is not in parent component");
        return Z
    };
    var UK, TW = {
            button: "pressed",
            checkbox: "checked",
            menuitem: "selected",
            menuitemcheckbox: "checked",
            menuitemradio: "checked",
            radio: "checked",
            tab: ((v = (S(57, mk), mk.prototype), v).G_ = function() {
                return "goog-control"
            }, "selected"),
            treeitem: "selected"
        },
        jX = ((K(2, 26, CN, (v.tM = (v.B = (v.A = function(Z, N, Q, k) {
            (k = Z.v ? Z.v() : Z) && (Q ? Si : wj)(k, [N])
        }, function(Z, N, Q, k, R, f) {
            if (k = N.v()) this.YA || (R = this.G_(), R.replace(/\xa0|\s/g, " "), this.YA = {
                1: R + "-disabled",
                2: R + "-hover",
                4: R + "-active",
                8: R + "-selected",
                16: R + "-checked",
                32: R + "-focused",
                64: R + "-open"
            }), (f = this.YA[Z]) && this.A(N, f, Q), this.Ve(k, Z, Q)
        }), v.PC = (v.Ve = function(Z, N, Q, k, R, f, n) {
            (n = (UK || (UK = {
                1: "disabled",
                8: "selected",
                16: "checked",
                64: "expanded"
            }), UK[N]), f = Z.getAttribute("role") || null) ? (R = TW[f] || n, k = "checked" == n || "selected" == n ? R : n) : k = n, k && JS("busy", 20, " ", k, false, Z, Q)
        }, function(Z, N, Q, k, R, f) {
            if (e(1, Z, 32, 11) && (f = Z.tM())) {
                if (!N && Z.V & 32) {
                    try {
                        f.blur()
                    } catch (n) {}
                    Z.V & 32 && (Z.vC & 4 && e(1, Z, 4, 3) && Z.setActive(false), Z.vC & 32 && e(1, Z, 32, 35) && u(Z, 22, false, 2, 32) && Z.B(false, 32))
                }
                if (k = f.hasAttribute("tabindex")) Q = f.tabIndex, k = "number" === typeof Q && 0 <= Q && 32768 > Q;
                k != N && (R = f, N ? R.tabIndex = 0 : (R.tabIndex = -1, R.removeAttribute("tabIndex")))
            }
        }), function(Z) {
            return Z.v()
        }), mk)), S)(56, CN), {});
    if ("function" !== ((((((((v = (K(2, 73, ((CN.prototype.G_ = function() {
            return "goog-button"
        }, CN.prototype).Ve = function(Z, N, Q) {
            switch (N) {
                case 8:
                case 16:
                    JS("busy", 21, " ", "pressed", false, Z, Q);
                    break;
                default:
                case 64:
                case 1:
                    CN.H.Ve.call(this, Z, N, Q)
            }
        }, G), BV), G).prototype, v.I = null, v).z2 = 0, v).vC = 255, v.b4 = true, v).u4 = 39, v).T_ = function() {
            ((G.H.T_.call(this), this).nY && this.nY.detach(), this.isVisible()) && this.isEnabled() && this.Y.PC(this, false)
        }, v).A = function(Z, N) {
            N ? Z && (this.I ? nM(11, Z, 0, 8, this.I) || this.I.push(Z) : this.I = [Z], this.Y.A(this, Z, true)) : Z && this.I && u(this.I, 15, Z, 0) && (0 == this.I.length && (this.I = null), this.Y.A(this, Z, false))
        }, v.tM = function() {
            return this.Y.tM(this)
        }, v.V = 0, v.isVisible = function() {
            return this.b4
        }, v).isEnabled = function() {
            return !(this.V & 1)
        }, v.isActive = function() {
            return !!(this.V & 4)
        }, v).setActive = function(Z) {
            u(this, 24, Z, 2, 4) && this.B(Z, 4)
        }, v.getState = function() {
            return this.V
        }, v.B = function(Z, N, Q, k, R, f) {
            Q || 1 != N ? e(1, this, N, 19) && Z != !!(this.V & N) && (this.Y.B(N, this, Z), this.V = Z ? (k = this.V, -2 * ~(k & N) - 1 + ~(k | N) + 2 * (k ^ N)) : this.V & ~N) : (f = !Z, R = this.getParent(), R && "function" == typeof R.isEnabled && !R.isEnabled() || !u(this, 25, !f, 2, 1) || (f || (this.setActive(false), u(this, 23, false, 2, 2) && this.B(false, 2)), this.isVisible() && this.Y.PC(this, f), this.B(!f, 1, true)))
        }, typeof G)) throw Error("Invalid component class " + G);
    if ("function" !== typeof mk) throw Error("Invalid renderer class " + mk);
    var ys = U(24, G, 25),
        ih = (yl(56, function() {
            return new cl(null)
        }, (K(2, 29, cl, ((S(58, (K(2, 24, r, (yl(56, (jX[ys] = mk, function() {
            return new G(null)
        }), 42, "goog-control"), CN)), r)), r.prototype).PC = function() {}, r.prototype.Ve = function() {}, r.prototype.B = function(Z, N, Q, k) {
            (k = (r.H.B.call(this, Z, N, Q), N.v())) && 1 == Z && (k.disabled = Q)
        }, G)), 43), "goog-button"), a.requestIdleCallback ? function(Z) {
            requestIdleCallback(function() {
                Z()
            }, {
                timeout: 4
            })
        } : a.setImmediate ? function(Z) {
            setImmediate(Z)
        } : function(Z) {
            setTimeout(Z, 0)
        }),
        UF, ql = {
            passive: true,
            capture: true
        },
        rj = String.fromCharCode(105, 110, 116, 101, 103, 67, 104, 101, 99, 107, 66, 121, 112, 97, 115, 115),
        uh = [],
        Yg = (E.prototype.kA = !(E.prototype.ef = (E.prototype.i4 = void 0, void 0), 1), []),
        kz = [],
        Zo = {},
        Jl = [],
        Qs = [],
        Rn = [],
        HV = (E.prototype.oZ = "toString", []),
        rq = [],
        mJ = (((Al, ei, function() {})(Xx), Mq, E).prototype.R = "create", Zo.constructor),
        PV = ((v = E.prototype, v.cC = function(Z, N, Q, k, R, f) {
            return tS.call(this, f, k, Z, Q, 21, R, N)
        }, v).i = (window.performance || {}).now ? function() {
            return this.AM + window.performance.now()
        } : function() {
            return +new Date
        }, v.Jh = function(Z, N, Q, k, R) {
            return w.call(this, 56, Z, N, Q, k, R)
        }, void 0),
        on = ((E.prototype.s = (v.Hm = (v.Nm = function() {
            return Zq.call(this, 49, 3)
        }, (v.IR = function(Z, N, Q, k, R, f, n, p, J, V) {
            return S.call(this, 17, Z, N, Q, k, R, f, n, p, J, V)
        }, v).Xy = function() {
            return S.call(this, 5)
        }, function(Z, N, Q, k, R, f, n) {
            return bh.call(this, 1, 25, Z, N, Q, k, R, f, n)
        }), function(Z, N) {
            return N = (Z = (PV = function() {
                    return N == Z ? -84 : -127
                }, {}), {}),
                function(Q, k, R, f, n, p, J, V, l, b, X, x, c, M, A, g, H, T, y, h, Y, t) {
                    N = (l = N, Z);
                    try {
                        if (y = Q[0], y == kz) {
                            t = Q[1];
                            try {
                                for (h = (M = atob(t), f = x = 0, []); f < M.length; f++) A = M.charCodeAt(f), 255 < A && (h[x++] = -~(A | 255) - (~A ^ 255) - 2 * (~A & 255) + 2 * (~A | 255), A >>= 8), h[x++] = A;
                                C(this, 435, [(this.P = (this.l = h, this.l.length) << 3, 0), 0, 0])
                            } catch (W) {
                                lZ(this, 55, W, 17);
                                return
                            }
                            bZ(23, this, 8001, ":")
                        } else if (y == rq) Q[1].push(B(this, 501).length, B(this, 132), B(this, 184).length, B(this, 328).length), C(this, 166, Q[2]), this.u[43] && GW(":", B(this, 43), 8001, this, 120);
                        else {
                            if (y == HV) {
                                this.T = (V = (p = F(2, (B(this, (H = Q[2], 184)).length | 0) + 2), this.T), this);
                                try {
                                    c = B(this, 55), 0 < c.length && I(this, F(2, c.length).concat(c), 184, 147), I(this, F(1, this.IZ), 184, 244), I(this, F(1, this[HV].length), 184), g = 0, g += B(this, 156) & 2047, n = B(this, 328), g -= (B(this, 184).length | 0) + 5, 4 < n.length && (g -= (n.length | 0) + 3), 0 < g && I(this, F(2, g).concat(ei(g)), 184, 150), 4 < n.length && I(this, F(2, n.length).concat(n), 184, 5)
                                } finally {
                                    this.T = V
                                }
                                if (k = ((R = ei(2).concat(B(this, 184)), R[1] = R[0] ^ 159, R)[3] = R[1] ^ p[0], R[4] = (J = R[1], b = p[1], 2 * (J & ~b) - (J | ~b) + (~J | b)), this.WC(R))) k = "$" + k;
                                else
                                    for (T = 0, k = ""; T < R.length; T++) Y = R[T][this.oZ](16), 1 == Y.length && (Y = "0" + Y), k += Y;
                                return (B((C((B(this, (X = k, 501)).length = H.shift(), this), 132, H.shift()), this), 184).length = H.shift(), B(this, 328)).length = H.shift(), X
                            }
                            if (y == uh) GW(":", Q[1], Q[2], this, 120);
                            else if (y == Yg) return GW(":", Q[1], 8001, this, 120)
                        }
                    } finally {
                        N = l
                    }
                }
        })(), E.prototype).Ef = 0, E.prototype.WC = function(Z, N, Q, k, R) {
            return Ql.call(this, 43, 65, N, Z, Q, k, R)
        }, /./),
        zW, Yz = kz.pop.bind((E.prototype[Qs] = [0, 0, 1, (E.prototype.p3 = 0, 1), 0, 1, 1], E.prototype)[rq]),
        Pl = function(Z, N) {
            return (N = EF("ad", null, "error")) && 1 === Z.eval(N.createScript("1")) ? function(Q) {
                return N.createScript(Q)
            } : function(Q) {
                return "" + Q
            }
        }(((zW = U(24, E.prototype.R, (on[E.prototype.oZ] = Yz, 12), {get: Yz
        }), E).prototype.Vd = void 0, a));
    40 < (UF = a.trayride || (a.trayride = {}), UF).m || (UF.m = 41, UF.ad = uZ, UF.a = OF), UF.MBE_ = function(Z, N, Q) {
        return Q = new E(N, Z), [function(k) {
            return Zq(49, 8, false, Q, k)
        }]
    };
}).call(this);
                                    

#100 JavaScript::Eval (size: 77, repeated: 1) - SHA256: f184bd74a6fb84de3ef82dff334dd67a400e6a5a9d1bac74b0e3b02e3b071d5b

                                        0,
function(n, p, J, V) {
    C(n, (V = (p = (J = z(n, 3), P(435, true, n)), z)(n, 3), V), B(n, J) << p)
}
                                    

#101 JavaScript::Eval (size: 567, repeated: 1) - SHA256: 192943e98912f6c118b4de3044ab30bdeb7c89659ec791882eff15b89e95dbf3

                                        0,
function(n, p, J, V, l, b, X, x, c, M, A, g, H, T, y, h) {
    function Y(t, W) {
        for (; c < t;) V |= P(435, true, n) << c, c += 8;
        return V >>= (W = V & (1 << t) - 1, t), c -= t, W
    }
    for (y = (l = (c = (T = z(n, 6), V = 0), p = (Y(3) | 0) + 1, Y(5)), H = 0), X = []; y < l; y++) A = Y(1), X.push(A), H += A ? 0 : 1;
    for (h = (g = ((H | 1) - 2 * ~(H & 1) + -6 - (H | -2)).toString(2).length, []), b = 0; b < l; b++) X[b] || (h[b] = Y(g));
    for (M = 0; M < l; M++) X[M] && (h[M] = z(n, 14));
    for (J = (x = [], p); J--;) x.push(B(n, z(n, 14)));
    C(n, T, function(t, W, ol, wq, al) {
        for (ol = (wq = (al = [], 0), []); wq < l; wq++) {
            if (!(W = h[wq], X)[wq]) {
                for (; W >= ol.length;) ol.push(z(t, 11));
                W = ol[W]
            }
            al.push(W)
        }
        t.K = z(t, 26, x.slice()), t.G = z(t, 27, al)
    })
}
                                    

#102 JavaScript::Eval (size: 15546, repeated: 1) - SHA256: a4d092a9f4e4b98d5e78378f3b49bdeb5d044ece616623a34e78bc4849289d1f

                                        /* Anti-spam. Want to say hello? Contact (base64) Ym90Z3VhcmQtY29udGFjdEBnb29nbGUuY29t */
(function() {
    var Q = this || self,
        Z = function(J, T) {
            if (T = (J = null, Q.trustedTypes), !T || !T.createPolicy) return J;
            try {
                J = T.createPolicy("bg", {
                    createHTML: W,
                    createScript: W,
                    createScriptURL: W
                })
            } catch (y) {
                Q.console && Q.console.error(y.message)
            }
            return J
        },
        W = function(J) {
            return J
        };
    (0, eval)(function(J, T) {
        return (T = Z()) && 1 === J.eval(T.createScript("1")) ? function(y) {
            return T.createScript(y)
        } : function(y) {
            return "" + y
        }
    }(Q)(Array(7824 * Math.random() | 0).join("\n") + '(function(){var hj=function(T,J,Q,W,v){for(W=(J.DX=(J.zH=((J.WC=y0,J).XJ=(J.gv=J[E],Jj),Q0({get:function(){return this.concat()}},J.D)),d[J.D](J.zH,{value:{value:{}}})),v=[],0);128>W;W++)v[W]=String.fromCharCode(W);f(true,J,(n([(n((x(152,(x(494,J,(x(119,J,((x(365,J,(x(181,J,(x(290,J,(x(428,J,(x((x(478,J,(x(103,J,(x(105,(x(216,(x((x(122,J,(x(118,J,(x(371,(x(112,(x(224,(x(35,J,(x(242,J,(x(156,J,(x((x(346,J,(x(184,(x(4,(x(94,(x(84,(x(210,J,(x(357,(x(64,(x(367,J,(x(266,J,(x(412,J,(x(130,J,(J.cC=(x(264,(x(178,(J.SS=(x(344,(x(194,J,(x((x(13,J,((x(218,J,((J.P=0,(J.S=void 0,J).V=false,J).lz=((W=(J.C=(J.B=0,void 0),((J.pB=0,J.I=void 0,J).l=(J.N=1,J.H=[],0),J.L=[],J).u=void 0,J.LB=false,J.F=false,(J.Y=(J.J=void 0,[]),J.G=(J.v=void 0,0),J).j=null,J.KB=[],J.s9=function(y){this.K=y},J.A=void 0,(J.X=[],J).K=J,(J.R=0,J.o=0,window.performance)||{}),(J.h=25,J).s=[],J).Z=8001,W).timeOrigin||(W.timing||{}).navigationStart||0,0)),x)(284,J,0),function(y,Z){y=(Z=S(y),b(y.K,Z)),y[0].removeEventListener(y[1],y[2],M)})),352),J,function(y,Z,z,U,F,h,k){for(z=(F=(U=(Z=G((k=S(y),y)),""),b(y,369)),F.length),h=0;Z--;)h=((h|0)+(G(y)|0))%z,U+=v[F[h]];x(k,y,U)}),function(y){Zn(3,y)})),J),function(y,Z,z,U){Z=b(y,(U=(Z=(z=S(y),S(y)),S(y)),Z)),z=b(y,z),x(U,y,z[Z])}),0),J),function(y,Z,z){x((Z=L((Z=(z=(Z=S(y),S(y)),b)(y,Z),Z)),z),y,Z)}),J),function(y,Z){(Z=b(y,S(y)),zS)(Z,y.K)}),0),0)),630)),I(4))),function(y,Z,z,U){(z=(Z=b(y,(U=(Z=S(y),z=S(y),S(y)),Z)),b)(y,z),x)(U,y,Z in z|0)})),J),function(y,Z,z,U,F,h){t(y,true,Z,false)||(z=s4(y.K),Z=z.U,F=Z.length,U=z.T,h=z.kF,z=z.wv,Z=0==F?new h[U]:1==F?new h[U](Z[0]):2==F?new h[U](Z[0],Z[1]):3==F?new h[U](Z[0],Z[1],Z[2]):4==F?new h[U](Z[0],Z[1],Z[2],Z[3]):2(),x(z,y,Z))}),J),function(){}),function(y,Z,z,U){!t(y,true,Z,false)&&(Z=s4(y),U=Z.T,z=Z.kF,y.K==y||U==y.s9&&z==y)&&(x(Z.wv,y,U.apply(z,Z.U)),y.P=y.g())})),J),[0,0,0]),J),0),J),function(y,Z,z){x((Z=(z=S(y),S(y)),Z),y,""+b(y,z))}),J),function(y,Z,z,U,F){(U=(z=(F=b(y,(Z=b(y,(U=(Z=(z=S(y),S)(y),S)(y),F=S(y),Z)),F)),b)(y.K,z),b)(y,U),0)!==z&&(U=U4(1,U,y,F,z,Z),z.addEventListener(Z,U,M),x(130,y,[z,Z,U]))}),function(y,Z,z,U){x((Z=b(y,(U=b(y,(z=(U=S((Z=S(y),y)),S(y)),U)),Z))==U,z),y,+Z)})),485),J,function(y,Z,z,U,F,h){if(!t(y,true,Z,true)){if("object"==L((y=b((Z=(Z=S((h=(z=S((F=S(y),y)),S(y)),y)),b(y,Z)),h=b(y,h),z=b(y,z),y),F),y))){for(U in F=[],y)F.push(U);y=F}for(F=(U=y.length,h=0<h?h:1,0);F<U;F+=h)z(y.slice(F,(F|0)+(h|0)),Z)}}),function(y,Z,z,U){(Z=b(y,(z=(Z=S(y),S(y)),U=b(y,z),Z)),x)(z,y,U+Z)})),function(y){vN(4,y)})),[])),J),p),J),function(y,Z,z,U,F){z=b((Z=(U=(U=(Z=(z=(F=S(y),S(y)),S(y)),S(y)),b(y,U)),b(y,Z)),y),z),x(F,y,U4(U,z,y,Z))}),J),function(y,Z,z,U){x((Z=(U=(z=S(y),V(y)),S(y)),Z),y,b(y,z)>>>U)}),J)),function(y,Z,z){t(y,true,Z,false)||(Z=S(y),z=S(y),x(z,y,function(U){return eval(U)}(WN(b(y.K,Z)))))})),283),J,function(y,Z,z){(Z=b(y,(z=0!=(Z=(z=S(y),S(y)),b(y,z)),Z)),z)&&x(218,y,Z)}),J),function(y,Z,z,U){x((U=S((Z=S((z=S(y),y)),y)),U),y,b(y,z)||b(y,Z))}),J),function(y){E4(1,y)}),function(y,Z,z,U){(z=(U=(Z=S(y),S(y)),S(y)),y.K==y)&&(U=b(y,U),z=b(y,z),b(y,Z)[U]=z,187==Z&&(y.A=void 0,2==U&&(y.I=P(y,false,32),y.A=void 0)))})),2048)),114),J,function(y,Z,z,U,F){for(Z=(F=(z=G((U=S(y),y)),0),[]);F<z;F++)Z.push(V(y));x(U,y,Z)}),[])),function(y,Z,z,U){if(U=y.KB.pop()){for(Z=V(y);0<Z;Z--)z=S(y),U[z]=y.L[z];U[478]=y.L[U[428]=y.L[428],478],y.L=U}else x(218,y,y.l)})),function(y){E4(4,y)})),{})),J).PC=0,[160,0,0])),function(y){Zn(4,y)})),J),function(y,Z,z,U,F,h,k,B,c,w,X,a){function D(r,l){for(;w<r;)Z|=V(y)<<w,w+=8;return l=(w-=r,Z&(1<<r)-1),Z>>=r,l}for(B=(h=(Z=w=(c=S(y),0),z=(D(3)|0)+1,D)(5),X=0,[]),a=0;a<h;a++)F=D(1),B.push(F),X+=F?0:1;for(X=((X|0)-1).toString(2).length,a=0,U=[];a<h;a++)B[a]||(U[a]=D(X));for(X=0;X<h;X++)B[X]&&(U[X]=S(y));for(k=[];z--;)k.push(b(y,S(y)));x(c,y,function(r,l,Y,m,TS){for(l=(Y=(TS=[],0),[]);Y<h;Y++){if(!B[m=U[Y],Y]){for(;m>=l.length;)l.push(S(r));m=l[m]}TS.push(m)}r.S=dX((r.u=dX(k.slice(),r),TS),r)})}),[F_]),J),K),T],J),n([xd,Q],J),true))},P=function(T,J,Q,W,v,y,Z,z,U,F,h,k,B,c){if(z=b(T,218),z>=T.l)throw[R,31];for(U=(v=z,B=Q,Z=0,T.gv.length);0<B;)k=v%8,c=v>>3,W=T.X[c],h=8-(k|0),h=h<B?h:B,J&&(F=T,F.A!=v>>6&&(F.A=v>>6,y=b(F,187),F.J=kd([0,0,y[1],y[2]],F.A,F.I)),W^=T.J[c&U]),Z|=(W>>8-(k|0)-(h|0)&(1<<h)-1)<<(B|0)-(h|0),B-=h,v+=h;return x(218,T,(J=Z,(z|0)+(Q|0))),J},wX=function(T,J,Q,W){function v(){}return{invoke:(Q=BN(T,function(y){v&&(J&&C(J),W=y,v(),v=void 0)},(W=void 0,!!J))[0],function(y,Z,z,U){function F(){W(function(h){C(function(){y(h)})},z)}if(!Z)return Z=Q(z),y&&y(Z),Z;W?F():(U=v,v=function(){U(),C(F)})})}},kd=function(T,J,Q,W,v){for(T=T[W=T[3]|0,2]|0,v=0;15>v;v++)J=J>>>8|J<<24,J+=Q|0,W=W>>>8|W<<24,W+=T|0,Q=Q<<3|Q>>>29,J^=T+823,T=T<<3|T>>>29,W^=v+823,T^=W,Q^=J;return[Q>>>24&255,Q>>>16&255,Q>>>8&255,Q>>>0&255,J>>>24&255,J>>>16&255,J>>>8&255,J>>>0&255]},Sr=function(T,J){if((T=(J=null,p).trustedTypes,!T)||!T.createPolicy)return J;try{J=T.createPolicy("bg",{createHTML:X_,createScript:X_,createScriptURL:X_})}catch(Q){p.console&&p.console.error(Q.message)}return J},$d=function(T,J){return(T=T.create().shift(),J.u.create().length)||J.S.create().length||(J.S=void 0,J.u=void 0),T},V=function(T){return T.u?$d(T.S,T):P(T,true,8)},vN=function(T,J,Q,W){for(W=(Q=S(J),0);0<T;T--)W=W<<8|V(J);x(Q,J,W)},H=function(T,J,Q){Q=this;try{hj(T,this,J)}catch(W){q(this,W),J(function(v){v(Q.v)})}},cN=function(T,J,Q,W,v,y,Z,z){return Z=d[(W=[2,15,64,-58,80,-100,(z=Q&7,v=aX,W),17,-45,-4],T).D](T.zH),Z[T.D]=function(U){z+=(y=U,6)+7*Q,z&=7},Z.concat=function(U){return((U=(y=(U=(U=J%16+1,43*y*y-3483*y+4*J*J*U+z)-645*J*y-172*J*J*y+W[z+19&7]*J*U+(v()|0)*U-U*y,void 0),W)[U],W)[(z+53&7)+(Q&2)]=U,W)[z+(Q&2)]=15,U},Z},bf=function(T,J,Q,W){try{W=T[((J|0)+2)%3],T[J]=(T[J]|0)-(T[((J|0)+1)%3]|0)-(W|0)^(1==J?W<<Q:W>>>Q)}catch(v){throw v;}},Mk=function(T,J){J.push(T[0]<<24|T[1]<<16|T[2]<<8|T[3]),J.push(T[4]<<24|T[5]<<16|T[6]<<8|T[7]),J.push(T[8]<<24|T[9]<<16|T[10]<<8|T[11])},E4=function(T,J,Q,W){W=(Q=S(J),S)(J),e(J,W,O(b(J,Q),T))},Q0=function(T,J){return d[J](d.prototype,{replace:T,console:T,pop:T,floor:T,call:T,propertyIsEnumerable:T,stack:T,parent:T,document:T,length:T,prototype:T,splice:T})},Lq=function(T,J,Q,W,v){if((W=J[0],W)==u)T.h=25,T.W(J);else if(W==E){Q=J[1];try{v=T.v||T.W(J)}catch(y){q(T,y),v=T.v}Q(v)}else if(W==GS)T.W(J);else if(W==K)T.W(J);else if(W==xd){try{for(v=0;v<T.Y.length;v++)try{Q=T.Y[v],Q[0][Q[1]](Q[2])}catch(y){}}catch(y){}(0,(T.Y=[],J)[1])(function(y,Z){T.i(y,true,Z)},function(y){(n([jr],(y=!T.s.length,T)),y)&&f(true,T,false)})}else{if(W==rX)return v=J[2],x(501,T,J[6]),x(365,T,v),T.W(J);W==jr?(T.H=[],T.X=[],T.L=null):W==F_&&"loading"===p.document.readyState&&(T.j=function(y,Z){function z(){Z||(Z=true,y())}(p.document.addEventListener("DOMContentLoaded",(Z=false,z),M),p).addEventListener("load",z,M)})}},IX=function(T,J,Q){return T.i(function(W){Q=W},false,J),Q},dX=function(T,J,Q){return((Q=d[J.D](J.DX),Q)[J.D]=function(){return T},Q).concat=function(W){T=W},Q},X_=function(T){return T},tj=function(T,J,Q,W,v){for(v=(Q=(T=T.replace(/\\r\\n/g,"\\n"),J=0),[]);J<T.length;J++)W=T.charCodeAt(J),128>W?v[Q++]=W:(2048>W?v[Q++]=W>>6|192:(55296==(W&64512)&&J+1<T.length&&56320==(T.charCodeAt(J+1)&64512)?(W=65536+((W&1023)<<10)+(T.charCodeAt(++J)&1023),v[Q++]=W>>18|240,v[Q++]=W>>12&63|128):v[Q++]=W>>12|224,v[Q++]=W>>6&63|128),v[Q++]=W&63|128);return v},BN=function(T,J,Q,W){return(W=g[T.substring(0,3)+"_"])?W(T.substring(3),J,Q):lf(T,J)},lf=function(T,J){return[(J(function(Q){Q(T)}),function(){return T})]},x=function(T,J,Q){if(218==T||284==T)J.L[T]?J.L[T].concat(Q):J.L[T]=dX(Q,J);else{if(J.F&&187!=T)return;119==T||266==T||35==T||428==T||84==T?J.L[T]||(J.L[T]=cN(J,T,38,Q)):J.L[T]=cN(J,T,89,Q)}187==T&&(J.I=P(J,false,32),J.A=void 0)},Dn=function(T,J,Q,W){return b(Q,(x(218,(pq(((W=b(Q,218),Q.X&&W<Q.l)?(x(218,Q,Q.l),zS(T,Q)):x(218,Q,T),J),Q),Q),W),365))},V0=function(T,J,Q){if(3==T.length){for(Q=0;3>Q;Q++)J[Q]+=T[Q];for(Q=(T=[13,8,13,12,16,5,3,10,15],0);9>Q;Q++)J[3](J,Q%3,T[Q])}},e=function(T,J,Q,W,v,y){if(T.K==T)for(v=b(T,J),266==J?(J=function(Z,z,U,F){if((z=(F=v.length,(F|0)-4>>3),v).fB!=z){z=[0,(U=((v.fB=z,z)<<3)-4,0),y[1],y[2]];try{v.uz=kd(z,PN((U|0)+4,v),PN(U,v))}catch(h){throw h;}}v.push(v.uz[F&7]^Z)},y=b(T,84)):J=function(Z){v.push(Z)},W&&J(W&255),T=0,W=Q.length;T<W;T++)J(Q[T])},N=function(T,J,Q,W,v,y){if(!T.F){if(3<(Q=b(T,((J=(0==(y=((v=void 0,Q&&Q[0]===R)&&(J=Q[1],v=Q[2],Q=void 0),b)(T,428),y.length)&&(W=b(T,284)>>3,y.push(J,W>>8&255,W&255),void 0!=v&&y.push(v&255)),""),Q)&&(Q.message&&(J+=Q.message),Q.stack&&(J+=":"+Q.stack)),478)),Q)){T.K=(v=(J=(J=J.slice(0,(Q|0)-3),Q-=(J.length|0)+3,tj)(J),T.K),T);try{e(T,266,O(J.length,2).concat(J),9)}finally{T.K=v}}x(478,T,Q)}},n=function(T,J){J.s.splice(0,0,T)},Zn=function(T,J,Q,W,v){e(((W=b(J,(v=S((W=S((T&=(Q=T&4,3),J)),J)),W)),Q&&(W=tj(""+W)),T)&&e(J,v,O(W.length,2)),J),v,W)},G=function(T,J){return(J=V(T),J)&128&&(J=J&127|V(T)<<7),J},s4=function(T,J,Q,W,v,y){for(y=(J=((W=S((Q=T[nq]||{},T)),Q).wv=S(T),Q.U=[],T.K)==T?(V(T)|0)-1:1,v=S(T),0);y<J;y++)Q.U.push(S(T));for(Q.kF=b(T,v);J--;)Q.U[J]=b(T,Q.U[J]);return Q.T=b(T,W),Q},S=function(T,J){if(T.u)return $d(T.S,T);return(J=P(T,true,8),J)&128&&(J^=128,T=P(T,true,2),J=(J<<2)+(T|0)),J},f=function(T,J,Q,W,v,y){if(J.s.length){J.LB=(J.V=(J.V&&0(),true),T);try{y=J.g(),J.P=y,J.G=y,J.C=0,W=Kq(J,T),v=J.g()-J.G,J.R+=v,v<(Q?0:10)||0>=J.h--||(v=Math.floor(v),J.H.push(254>=v?v:254))}finally{J.V=false}return W}},b=function(T,J){if(void 0===(T=T.L[J],T))throw[R,30,J];if(T.value)return T.create();return(T.create(4*J*J+15*J+81),T).prototype},Kq=function(T,J,Q,W){for(;T.s.length;){W=(T.j=null,T.s.pop());try{Q=Lq(T,W)}catch(v){q(T,v)}if(J&&T.j){J=T.j,J(function(){f(true,T,true)});break}}return Q},O=function(T,J,Q,W){for(W=(J|0)-(Q=[],1);0<=W;W--)Q[(J|0)-1-(W|0)]=T>>8*W&255;return Q},L=function(T,J,Q){if((Q=typeof T,"object")==Q)if(T){if(T instanceof Array)return"array";if(T instanceof Object)return Q;if("[object Window]"==(J=Object.prototype.toString.call(T),J))return"object";if("[object Array]"==J||"number"==typeof T.length&&"undefined"!=typeof T.splice&&"undefined"!=typeof T.propertyIsEnumerable&&!T.propertyIsEnumerable("splice"))return"array";if("[object Function]"==J||"undefined"!=typeof T.call&&"undefined"!=typeof T.propertyIsEnumerable&&!T.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==Q&&"undefined"==typeof T.call)return"object";return Q},zS=function(T,J){x(((J.KB.push(J.L.slice()),J).L[218]=void 0,218),J,T)},t=function(T,J,Q,W,v,y,Z,z,U){if((T.K=((v=(U=(y=(W=(z=(J||T.C++,0<(Z=W?255:J?5:2,T.B)&&T.V&&T.LB&&1>=T.o&&!T.u&&!T.j)&&(!J||1<T.Z-Q)&&0==document.hidden,4==T.C))||z?T.g():T.P,y-T.P),U>>14),T.I&&(T.I^=v*(U<<2)),T).N+=v,v||T.K),W)||z)T.C=0,T.P=y;if(!z||y-T.G<T.B-Z)return false;return!(x(218,(z=b(T,(T.Z=Q,J)?284:218),T),T.l),T.s.push([GS,z,J?Q+1:Q]),T.j=C,0)},g,p=this||self,PN=function(T,J){return J[T]<<24|J[(T|0)+1]<<16|J[(T|0)+2]<<8|J[(T|0)+3]},C=p.requestIdleCallback?function(T){requestIdleCallback(function(){T()},{timeout:4})}:p.setImmediate?function(T){setImmediate(T)}:function(T){setTimeout(T,0)},q=function(T,J){T.v=((T.v?T.v+"~":"E:")+J.message+":"+J.stack).slice(0,2048)},U4=function(T,J,Q,W,v,y){function Z(){if(Q.K==Q){if(Q.L){var z=[rX,J,W,void 0,v,y,arguments];if(2==T)var U=f((n(z,Q),false),Q,false);else if(1==T){var F=!Q.s.length;(n(z,Q),F)&&f(false,Q,false)}else U=Lq(Q,z);return U}v&&y&&v.removeEventListener(y,Z,M)}}return Z},M={passive:true,capture:true},A,I=function(T,J){for(J=[];T--;)J.push(255*Math.random()|0);return J},pq=function(T,J,Q,W,v,y){if(!J.v){J.o++;try{for(v=(Q=0,J.l),W=void 0;--T;)try{if(y=void 0,J.u)W=$d(J.u,J);else{if((Q=b(J,218),Q)>=v)break;W=(y=(x(284,J,Q),S)(J),b)(J,y)}W&&W.call?W(J,T):N(J,0,[R,21,y]),t(J,false,T,false)}catch(Z){b(J,412)?N(J,22,Z):x(412,J,Z)}if(!T){if(J.rv){pq(667641748788,(J.o--,J));return}N(J,0,[R,33])}}catch(Z){try{N(J,22,Z)}catch(z){q(J,z)}}J.o--}},nq=String.fromCharCode(105,110,116,101,103,67,104,101,99,107,66,121,112,97,115,115),E=[],jr=[],R={},F_=[],K=((H.prototype.O="toString",H).prototype.GH=void 0,[]),u=(H.prototype.rv=false,H.prototype.bz=void 0,[]),GS=[],rX=[],xd=[],d=(A=((Mk,I,bf,function(){})(V0),H.prototype),A.Iz=function(){return Math.floor(this.R+(this.g()-this.G))},H.prototype.D="create",R.constructor),aX=((A.jS=function(){return Math.floor(this.g())},(A.mB=function(T,J,Q){return T^(J^=J<<13,J^=J>>17,(J=(J^J<<5)&Q)||(J=1),J)},A).g=(window.performance||{}).now?function(){return this.lz+window.performance.now()}:function(){return+new Date},A.U9=function(T,J,Q,W,v){for(W=v=0;v<T.length;v++)W+=T.charCodeAt(v),W+=W<<10,W^=W>>6;return(v=(W+=W<<3,W^=W>>11,T=W+(W<<15)>>>0,new Number(T&(1<<J)-1)),v)[0]=(T>>>J)%Q,v},A.i=function(T,J,Q,W,v){if((Q="array"===L(Q)?Q:[Q],this).v)T(this.v);else try{W=[],v=!this.s.length,n([u,W,Q],this),n([E,T,W],this),J&&!v||f(J,this,true)}catch(y){q(this,y),T(this.v)}},A).qR=function(T,J,Q,W,v,y){for(W=(Q=[],y=0);W<T.length;W++)for(y+=J,v=v<<J|T[W];7<y;)y-=8,Q.push(v>>y&255);return Q},void 0);H.prototype.W=function(T,J){return J=(T={},aX=function(){return T==J?81:93},{}),function(Q,W,v,y,Z,z,U,F,h,k,B,c,w,X,a){U=T,T=J;try{if(a=Q[0],a==K){v=Q[1];try{for(B=(X=(w=atob(v),c=0),[]);c<w.length;c++)h=w.charCodeAt(c),255<h&&(B[X++]=h&255,h>>=8),B[X++]=h;x(187,(this.l=(this.X=B,this.X.length<<3),this),[0,0,0])}catch(D){N(this,17,D);return}pq(8001,this)}else if(a==u)Q[1].push(b(this,266).length,b(this,35).length,b(this,478),b(this,119).length),x(365,this,Q[2]),this.L[121]&&Dn(b(this,121),8001,this);else{if(a==E){this.K=(Z=(X=Q[2],O((b(this,119).length|0)+2,2)),z=this.K,this);try{y=b(this,428),0<y.length&&e(this,119,O(y.length,2).concat(y),10),e(this,119,O(this.N,1),109),e(this,119,O(this[E].length,1)),w=0,w-=(b(this,119).length|0)+5,W=b(this,266),w+=b(this,94)&2047,4<W.length&&(w-=(W.length|0)+3),0<w&&e(this,119,O(w,2).concat(I(w)),15),4<W.length&&e(this,119,O(W.length,2).concat(W),156)}finally{this.K=z}if(k=((((B=I(2).concat(b(this,119)),B)[1]=B[0]^6,B)[3]=B[1]^Z[0],B)[4]=B[1]^Z[1],this.vC(B)))k="!"+k;else for(w=0,k="";w<B.length;w++)F=B[w][this.O](16),1==F.length&&(F="0"+F),k+=F;return b((x(478,(b(this,((c=k,b(this,266)).length=X.shift(),35)).length=X.shift(),this),X.shift()),this),119).length=X.shift(),c}if(a==GS)Dn(Q[1],Q[2],this);else if(a==rX)return Dn(Q[1],8001,this)}}finally{T=U}}}();var y0,Jj=/./,fq=K.pop.bind((H.prototype.vC=(H.prototype.dv=0,H.prototype.oz=0,H.prototype[xd]=[0,0,1,1,0,1,1],function(T,J,Q,W){if(Q=window.btoa){for(J=(W=0,"");W<T.length;W+=8192)J+=String.fromCharCode.apply(null,T.slice(W,W+8192));T=Q(J).replace(/\\+/g,"-").replace(/\\//g,"_").replace(/=/g,"")}else T=void 0;return T}),H.prototype)[u]),WN=function(T,J){return(J=Sr())&&1===T.eval(J.createScript("1"))?function(Q){return J.createScript(Q)}:function(Q){return""+Q}}(((y0=(Jj[H.prototype.O]=fq,Q0({get:fq},H.prototype.D)),H.prototype).AO=void 0,p));(g=p.botguard||(p.botguard={}),40)<g.m||(g.m=41,g.bg=wX,g.a=BN),g.RBK_=function(T,J,Q){return[(Q=new H(T,J),function(W){return IX(Q,W)})]};}).call(this);'));
}).call(this);
                                    

#103 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 797f3a04f8544034ebbf1fbac72103451f9c802ace19cb9f057f4eb23d4200ec

                                        0,
function(y) {
    vN(2, y)
}
                                    

#104 JavaScript::Eval (size: 83, repeated: 1) - SHA256: 0cb21d1de060008bab472c15c63e6f15828de601f85deff00d701d26c0f6819a

                                        0,
function(_, $) {
    while (_._ += !(_.$[_[_._] = _[$._]] && _.M.push(_._, _[$._])), $.$ ^ ++$._);
}
                                    

#105 JavaScript::Eval (size: 413, repeated: 1) - SHA256: 3a8e05fc774902305eeff23dd18f41d64f41b74c3f1b34eec8873adb6f5b7f99

                                        0, bZ = function(Z, N, Q, k, R, f, n, p) {
    if (!N.J) {
        N.hM++;
        try {
            for (p = (R = 0, f = void 0, N).P; --Q;) try {
                if ((n = void 0, N).K) f = eX(N.K, N);
                else {
                    if ((R = B(N, 120), R) >= p) break;
                    f = B(N, (n = z(N, (C(N, 380, R), 6)), n))
                }
                Nl(N, !(f && f.call ? f(N, Q) : lZ(N, 55, [Zo, 21, n], 0), 1), Q, 3, false, 1)
            } catch (J) {
                B(N, Z) ? lZ(N, 55, J, 22) : C(N, Z, J)
            }
            if (!Q) {
                if (N.kA) {
                    N.hM--, bZ(23, N, 128874443292, ":");
                    return
                }
                lZ(N, 55, [Zo, 33], 0)
            }
        } catch (J) {
            try {
                lZ(N, 55, J, 22)
            } catch (V) {
                D(26, N, k, V)
            }
        }
        N.hM--
    }
}
                                    

#106 JavaScript::Eval (size: 79, repeated: 1) - SHA256: e970974647bab0713fa51821523171bea8a19ff81d2e472a8df02f21879757c3

                                        0,
function(n, p, J) {
    p = B((J = z(n, 6), n.T), J), p[0].removeEventListener(p[1], p[2], ql)
}
                                    

#107 JavaScript::Eval (size: 474, repeated: 1) - SHA256: 991c8f9b3cf10034486000c25cbaed24a2838d45618f4e9e2dd18384cbfe635e

                                        dq = function(Z, N, Q, k, R, f, n, p, J, V, l, b) {
    return (N + 2 & 43) >= N && (N - 2 | Z) < N && (b = (J = (n = Q[k] << f, V = Q[-4 - 4 * ~(k | R) - (k ^ R) + 2 * (~k | R)] << 16, ~(n & V) - 2 * ~n - (~n ^ V) + 2 * (~n | V)) | Q[(k | 0) + 2] << 8, p = Q[-2 * ~(k & 3) + -2 + (k ^ 3)], (p | 0) - (~J ^ p) + (J | ~p))), (N & 45) == N && (b = l = function() {
        if (n.T == n) {
            if (n.u) {
                var X = [Yg, k, Q, void 0, J, V, arguments];
                if (p == f) var x = zK(0, (O(3, 0, X, n), n), R, R, false);
                else if (1 == p) {
                    var c = !n.X.length;
                    O(7, 0, X, n), c && zK(0, n, R, R, false)
                } else x = WV(279, true, X, n);
                return x
            }
            J && V && J.removeEventListener(V, l, ql)
        }
    }), b
}
                                    

#108 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 2d57cee310b108489f4dbc7adea2096967c661f60f1c0d84acd45fec4452acbe

                                        eX
                                    

#109 JavaScript::Eval (size: 132, repeated: 1) - SHA256: 2b53b9727b1a53822d9373c503a8f577da7e430bf277737d213b4383cdb74f08

                                        Xx = function(Z, N, Q, k) {
    try {
        k = Z[((N | 0) + 2) % 3], Z[N] = (Z[N] | 0) - (Z[(-2 - 2 * ~N - (N & -2) + (~N & 1)) % 3] | 0) - (k | 0) ^ (1 == N ? k << Q : k >>> Q)
    } catch (R) {
        throw R;
    }
}
                                    

#110 JavaScript::Eval (size: 118, repeated: 1) - SHA256: 5c153667e2c45dd48ccca0b3408852e8b65bed4c48fcef2db2e756ae645e3f22

                                        0, eX = function(Z, N, Q) {
    return (Q = Z.create().shift(), N.K.create()).length || N.G.create().length || (N.G = void 0, N.K = void 0), Q
}