豆瓣 音樂和讀書的搜索頁的 window.__DATA__ 的解密

 

 

豆瓣讀書搜索頁的 window.__DATA__ 的解密:https://www.jianshu.com/p/ac8b81950a73

 

豆瓣的 音樂搜索讀書搜索,返回的網頁源碼都有  window.__DATA__ ,這是 js 加密 之後的數據

 

具體分析 參考 :https://www.jianshu.com/p/ac8b81950a73

根據 參考博客 修改 模塊 的源碼,修改之前需要備份下但是畢竟修改的是模塊的源碼,萬一弄錯了好改回來。敲代碼最忌不懂、亂改還不保留,這樣很招人煩的,尤其團隊合作時。

 

這裏使用兩種方法可以在不修改模塊源碼的情況下正確執行

方法 1:  test_nodejs_1

需要安裝 nodejs 環境

這個是通過  subprocess 執行 node 命令,來執行 js 代碼文件,通過命令行傳遞需要的參數,但是一個問題,參數短的時候還可以,如果參數太長,會執行報錯。可以把程序中的 keyword 註釋的放開,然後看下執行結果。

 

方法 2 :test_nodejs_2 (這個貌似沒有 方法 1 的問題,推薦使用這個

需要安裝:pip install nodejs

python-nodejs 的 github地址:https://github.com/markfinger/python-nodejs

douban.py 源碼:


import re
import os
import json
import requests
import subprocess
from nodejs.bindings import node_run

current_dir = os.path.dirname(os.path.realpath(__file__))


keyword = '魏新雨 戀人心'
# keyword = '黑客帝國'
url = f'https://search.douban.com/music/subject_search?search_text={keyword}&cat=1003'
r = requests.get(url)
data = re.findall(r'window.__DATA__ = "(.*?)";', r.content.decode('utf-8'))[0]


def test_nodejs_1():
    print(len(data))
    result = subprocess.check_output(f"node {current_dir}/main.js {data}", shell=True)
    data_dict = json.loads(result.decode('utf-8'))
    print(json.dumps(data_dict, indent=4, ensure_ascii=False))


def test_nodejs_2():
    print(len(data))
    stderr, stdout = node_run(f"{current_dir}/main.js", data)
    data_dict = json.loads(stdout)
    print(json.dumps(data_dict, indent=4, ensure_ascii=False))


if __name__ == '__main__':   
    # test_nodejs_1()
    test_nodejs_2()
    pass


 

main.js 源碼:

參考:https://github.com/SergioJune/Spider-Crack-JS/tree/master/douban

// var r = "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";
var r = "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";


var i = 16
var Q = 4096
var p = {
    start: 2,
    end: 7
}
var K = {}
K.read = function (t, e, r, n, o) {
    var i, a, s = 8 * o - n - 1,
        u = (1 << s) - 1,
        c = u >> 1,
        f = -7,
        l = r ? o - 1 : 0,
        h = r ? -1 : 1,
        p = t[e + l];
    for (l += h,
             i = p & (1 << -f) - 1,
             p >>= -f,
             f += s; f > 0; i = 256 * i + t[e + l],
             l += h,
             f -= 8)
        ;
    for (a = i & (1 << -f) - 1,
             i >>= -f,
             f += n; f > 0; a = 256 * a + t[e + l],
             l += h,
             f -= 8)
        ;
    if (0 === i)
        i = 1 - c;
    else {
        if (i === u)
            return a ? NaN : 1 / 0 * (p ? -1 : 1);
        a += Math.pow(2, n),
            i -= c
    }
    return (p ? -1 : 1) * a * Math.pow(2, i - n)
}

K.write = function (t, e, r, n, o, i) {
    var a, s, u, c = 8 * i - o - 1,
        f = (1 << c) - 1,
        l = f >> 1,
        h = 23 === o ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
        p = n ? 0 : i - 1,
        d = n ? 1 : -1,
        m = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0;
    for (e = Math.abs(e),
             isNaN(e) || e === 1 / 0 ? (s = isNaN(e) ? 1 : 0,
                 a = f) : (a = Math.floor(Math.log(e) / Math.LN2),
             e * (u = Math.pow(2, -a)) < 1 && (a--,
                 u *= 2),
                 e += a + l >= 1 ? h / u : h * Math.pow(2, 1 - l),
             e * u >= 2 && (a++,
                 u /= 2),
                 a + l >= f ? (s = 0,
                     a = f) : a + l >= 1 ? (s = (e * u - 1) * Math.pow(2, o),
                     a += l) : (s = e * Math.pow(2, l - 1) * Math.pow(2, o),
                     a = 0)); o >= 8; t[r + p] = 255 & s,
             p += d,
             s /= 256,
             o -= 8)
        ;
    for (a = a << o | s,
             c += o; c > 0; t[r + p] = 255 & a,
             p += d,
             a /= 256,
             c -= 8)
        ;
    t[r + p - d] |= 128 * m
}

encry2arr_from = function (t, e, r) { // 1  39  50  66
    return from_a(null, t, e, r)
}


function hash(e) {
    return "string" == typeof e && (e = encry2arr_from(e)), to_string.call((0, o_default)(e, 41405), 16).replace(/^0+/, "")
}


function to_number() {
    return 65536 * this._a16 + this._a00
}


function to_string(t) {
    t = t || 10;
    var e = new i_i(t);
    if (!gt.call(this, e))
        return to_number.call(this).toString(t);
    for (var r = clone.call(this), n = new Array(64), o = 63; o >= 0 && (div.call(r, e),
        n[o] = to_number.call(r.remainder).toString(t), gt.call(r, e)); o--);
    return n[o - 1] = to_number.call(r).toString(t),
        n.join("")
}


gt = function (t) {
    return this._a48 > t._a48 || !(this._a48 < t._a48) && (this._a32 > t._a32 || !(this._a32 < t._a32) && (this._a16 > t._a16 || !(this._a16 < t._a16) && this._a00 > t._a00))
}


function div(t) {
    for (var e = clone.call(t), r = -1; !lt.call(this, e);)
        shiftLeft.call(e, 1, !0),
            r++;
    for (this.remainder = clone.call(this),
             this._a00 = 0,
             this._a16 = 0,
             this._a32 = 0,
             this._a48 = 0; r >= 0; r--)
        shiftRight.call(e, 1),
        lt.call(this.remainder, e) || (subtract(this.remainder, e),
            r >= 48 ? this._a48 |= 1 << r - 48 : r >= 32 ? this._a32 |= 1 << r - 32 : r >= 16 ? this._a16 |= 1 << r - 16 : this._a00 |= 1 << r);
    return this
}


function eq(t) {
    return this._a48 == t._a48 && this._a00 == t._a00 && this._a32 == t._a32 && this._a16 == t._a16
}


function lt(t) {
    return this._a48 < t._a48 || !(this._a48 > t._a48) && (this._a32 < t._a32 || !(this._a32 > t._a32) && (this._a16 < t._a16 || !(this._a16 > t._a16) && this._a00 < t._a00))
}


function shiftLeft(t, e) {
    return t %= 64,
        t >= 48 ? (this._a48 = this._a00 << t - 48,
            this._a32 = 0,
            this._a16 = 0,
            this._a00 = 0) : t >= 32 ? (t -= 32,
            this._a48 = this._a16 << t | this._a00 >> 16 - t,
            this._a32 = this._a00 << t & 65535,
            this._a16 = 0,
            this._a00 = 0) : t >= 16 ? (t -= 16,
            this._a48 = this._a32 << t | this._a16 >> 16 - t,
            this._a32 = 65535 & (this._a16 << t | this._a00 >> 16 - t),
            this._a16 = this._a00 << t & 65535,
            this._a00 = 0) : (this._a48 = this._a48 << t | this._a32 >> 16 - t,
            this._a32 = 65535 & (this._a32 << t | this._a16 >> 16 - t),
            this._a16 = 65535 & (this._a16 << t | this._a00 >> 16 - t),
            this._a00 = this._a00 << t & 65535),
    e || (this._a48 &= 65535),
        this
}


var t = {
    'getState': function (e) {
        return a(e)
    },
    'dispatch': function o() {
        return p
    }
}
var Ut = {
    "$UID": "j",
    "$defaultRootUID": 4,
    "$keys": "z",
    "$vals": "k",
    "crypto": {
        "decrypt": function n(t, e) {
            return r_decrypt(t, e)
        },
        "encrypt": function r(e) {
            var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "hjasbdn2ih823rgwudsde7e2dhsdhas";
            "string" == typeof r && (r = [].map.call(r, function (t) {
                return t.charCodeAt(0)
            }));
            for (var n, o = [], i = 0, a = new t(e.length), s = 0; s < 256; s++)
                o[s] = s;
            for (s = 0; s < 256; s++)
                i = (i + o[s] + r[s % r.length]) % 256,
                    n = o[s],
                    o[s] = o[i],
                    o[i] = n;
            s = 0,
                i = 0;
            for (var u = 0; u < e.length; u++)
                s = (s + 1) % 256,
                    i = (i + o[s]) % 256,
                    n = o[s],
                    o[s] = o[i],
                    o[i] = n,
                    a[u] = e[u] ^ o[(o[s] + o[i]) % 256];
            return a
        }
    },
    "getRealUID": function (t) {
        if (t >= p.start) {
            var e = p.end - p.start;
            if (t < p.end)
                return t + e;
            if (t < p.end + e)
                return t - e
        }
        return t
    },
    "getType": function o(t) {
        return Object.prototype.toString.call(t).slice(8, -1)
    }

}


function from_a(t, e, r, n) { // 2  38  51  65
    return false ? h(t, e, r, n) : "string" == typeof e ? f(t, e, r) : p(t, e)
}


function f(t, e, r) { // 3  5  18  22  37  52  54  58  62  64
    var n = 0 | y(e, r);
    t = o_19(t, n);
    var a = write(t, e, r);
    return a !== n && (t = t.slice(0, a)),
        t
}


function y(t, e) { // 6  8  17  55  57
    if (false)
        return t.length;
    if (false)
        return t.byteLength;
    "string" != typeof t && (t = "" + t);
    var r = t.length;
    if (0 === r)
        return 0;
    for (var n = !1;;)
        switch (e) {
            case "ascii":
            case "latin1":
            case "binary":
                return r;
            case "utf8":
            case "utf-8":
            case void 0:
                return Y(t).length;
            case "ucs2":
            case "ucs-2":
            case "utf16le":
            case "utf-16le":
                return 2 * r;
            case "hex":
                return r >>> 1;
            case "base64":
                return V(t).length;
            default:
                if (n)
                    return Y(t).length;
                e = ("" + e).toLowerCase(),
                    n = !0
        }
}


function toByteArray(t) { // 13  30  32
    var f = {
        43: 62,
        45: 62,
        47: 63,
        48: 52,
        49: 53,
        50: 54,
        51: 55,
        52: 56,
        53: 57,
        54: 58,
        55: 59,
        56: 60,
        57: 61,
        65: 0,
        66: 1,
        67: 2,
        68: 3,
        69: 4,
        70: 5,
        71: 6,
        72: 7,
        73: 8,
        74: 9,
        75: 10,
        76: 11,
        77: 12,
        78: 13,
        79: 14,
        80: 15,
        81: 16,
        82: 17,
        83: 18,
        84: 19,
        85: 20,
        86: 21,
        87: 22,
        88: 23,
        89: 24,
        90: 25,
        95: 63,
        97: 26,
        98: 27,
        99: 28,
        100: 29,
        101: 30,
        102: 31,
        103: 32,
        104: 33,
        105: 34,
        106: 35,
        107: 36,
        108: 37,
        109: 38,
        110: 39,
        111: 40,
        112: 41,
        113: 42,
        114: 43,
        115: 44,
        116: 45,
        117: 46,
        118: 47,
        119: 48,
        120: 49,
        121: 50,
        122: 51,
    }
    var e, r, o, i, a, s, u = t.length;
    a = n_is_4(t),
        s = new Uint8Array(3 * u / 4 - a),
        o = a > 0 ? u - 4 : u;
    var c = 0;
    for (e = 0,
             r = 0; e < o; e += 4,
             r += 3)
        i = f[t.charCodeAt(e)] << 18 | f[t.charCodeAt(e + 1)] << 12 | f[t.charCodeAt(e + 2)] << 6 | f[t.charCodeAt(e + 3)],
            s[c++] = i >> 16 & 255,
            s[c++] = i >> 8 & 255,
            s[c++] = 255 & i;
    return 2 === a ? (i = f[t.charCodeAt(e)] << 2 | f[t.charCodeAt(e + 1)] >> 4,
        s[c++] = 255 & i) : 1 === a && (i = f[t.charCodeAt(e)] << 10 | f[t.charCodeAt(e + 1)] << 4 | f[t.charCodeAt(e + 2)] >> 2,
        s[c++] = i >> 8 & 255,
        s[c++] = 255 & i),
        s
}


function V(t) { // 9  13  16  25  29  33
    return toByteArray(q(t))
}


function q(t) { // 10  12  26  28
    if (t = z(t).replace(/[^+\/0-9A-Za-z-_]/g, ""),
    t.length < 2)
        return "";
    for (; t.length % 4 != 0;)
        t += "=";
    return t
}


function z(t) { // 11  27
    return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "")
}


function n_is_4(t) { // 14  31
    var e = t.length;
    if (e % 4 > 0)
        throw new Error("Invalid string. Length must be a multiple of 4");
    return "=" === t[e - 2] ? 2 : "=" === t[e - 1] ? 1 : 0
}


function i(t) { // 15
    var e, r, o, i, a, s, u = t.length;
    a = n(t),
        s = new Uint8Array(3 * u / 4 - a),
        o = a > 0 ? u - 4 : u;
    var c = 0;
    for (e = 0,
             r = 0; e < o; e += 4,
             r += 3)
        i = f[t.charCodeAt(e)] << 18 | f[t.charCodeAt(e + 1)] << 12 | f[t.charCodeAt(e + 2)] << 6 | f[t.charCodeAt(e + 3)],
            s[c++] = i >> 16 & 255,
            s[c++] = i >> 8 & 255,
            s[c++] = 255 & i;
    return 2 === a ? (i = f[t.charCodeAt(e)] << 2 | f[t.charCodeAt(e + 1)] >> 4,
        s[c++] = 255 & i) : 1 === a && (i = f[t.charCodeAt(e)] << 10 | f[t.charCodeAt(e + 1)] << 4 | f[t.charCodeAt(e + 2)] >> 2,
        s[c++] = i >> 8 & 255,
        s[c++] = 255 & i),
        s
}


function o_19(t, e) { // 19  21  59  61
    return true ? (t = new Uint8Array(e),
        t.__proto__ = Uint8Array.prototype) : (null === t && (t = new i(e)),
        t.length = e),
        t
}


function Y(t, e) {
    e = e || 1 / 0;
    for (var r, n = t.length, o = null, i = [], a = 0; a < n; ++a) {
        if ((r = t.charCodeAt(a)) > 55295 && r < 57344) {
            if (!o) {
                if (r > 56319) {
                    (e -= 3) > -1 && i.push(239, 191, 189);
                    continue
                }
                if (a + 1 === n) {
                    (e -= 3) > -1 && i.push(239, 191, 189);
                    continue
                }
                o = r;
                continue
            }
            if (r < 56320) {
                (e -= 3) > -1 && i.push(239, 191, 189),
                    o = r;
                continue
            }
            r = 65536 + (o - 55296 << 10 | r - 56320)
        } else
            o && (e -= 3) > -1 && i.push(239, 191, 189);
        if (o = null,
        r < 128) {
            if ((e -= 1) < 0)
                break;
            i.push(r)
        } else if (r < 2048) {
            if ((e -= 2) < 0)
                break;
            i.push(r >> 6 | 192, 63 & r | 128)
        } else if (r < 65536) {
            if ((e -= 3) < 0)
                break;
            i.push(r >> 12 | 224, r >> 6 & 63 | 128, 63 & r | 128)
        } else {
            if (!(r < 1114112))
                throw new Error("Invalid code point");
            if ((e -= 4) < 0)
                break;
            i.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128)
        }
    }
    return i
}


function write_E(t, e, r, n) {
    return X(Y(e, t.length - r), t, r, n)
}


function write(k, t, e, r, n) { // 23  37  63
    if (void 0 === e)
        n = "utf8",
            r = k.length,
            e = 0;
    else if (void 0 === r && "string" == typeof e)
        n = e,
            r = k.length,
            e = 0;
    else {
        if (!isFinite(e))
            throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");
        e |= 0,
            isFinite(r) ? (r |= 0,
            void 0 === n && (n = "utf8")) : (n = r,
                r = void 0)
    }
    var o = k.length - e;
    if ((void 0 === r || r > o) && (r = o),
    t.length > 0 && (r < 0 || e < 0) || e > this.length)
        throw new RangeError("Attempt to write outside buffer bounds");
    n || (n = "utf8");
    for (var i = !1;;)
        switch (n) {
            case "hex":
                return _(k, t, e, r);
            case "utf8":
            case "utf-8":
                return write_E(k, t, e, r);
            case "ascii":
                return A(k, t, e, r);
            case "latin1":
            case "binary":
                return C(k, t, e, r);
            case "base64":
                return S_24(k, t, e, r);
            case "ucs2":
            case "ucs-2":
            case "utf16le":
            case "utf-16le":
                return x(k, t, e, r);
            default:
                if (i)
                    throw new TypeError("Unknown encoding: " + n);
                n = ("" + n).toLowerCase(),
                    i = !0
        }
}


function S_24(t, e, r, n) { // 24  34  36
    return X(V(e), t, r, n)
}


function X(t, e, r, n) { // 35
    for (var o = 0; o < n && !(o + r >= e.length || o >= t.length); ++o)
        e[o + r] = t[o];
    return o
}


function a_slice(k, t, e) { // 42  44  46  115  126  132  138  144  148
    var r = k.length;
    t = ~~t,
        e = void 0 === e ? r : ~~e,
        t < 0 ? (t += r) < 0 && (t = 0) : t > r && (t = r),
        e < 0 ? (e += r) < 0 && (e = 0) : e > r && (e = r),
    e < t && (e = t);
    var n;
    if (true)
        n = k.subarray(t, e),
            n.__proto__ = k.prototype;
    else {
        var o = e - t;
        n = new i(o, void 0);
        for (var a = 0; a < o; ++a)
            n[a] = this[a + t]
    }
    return n
}


function c(t, e) {
    if (undefined,
        t = o_19(t, e < 0 ? 0 : 0 | e), !true)
        for (var r = 0; r < e; ++r)
            t[r] = 0;
    return t
}


function allocUnsafe(t) {
    return c(null, t)
}


function a_68_copy(k, t, e, r, n) {
    if (r || (r = 0),
    n || 0 === n || (n = k.length),
    e >= t.length && (e = t.length),
    e || (e = 0),
    n > 0 && n < r && (n = r),
    n === r)
        return 0;
    if (0 === t.length || 0 === k.length)
        return 0;
    if (e < 0)
        throw new RangeError("targetStart out of bounds");
    if (r < 0 || r >= k.length)
        throw new RangeError("sourceStart out of bounds");
    if (n < 0)
        throw new RangeError("sourceEnd out of bounds");
    n > k.length && (n = k.length),
    t.length - e < n - r && (n = t.length - e + r);
    var o, a = n - r;
    if (k === t && r < e && e < n)
        for (o = a - 1; o >= 0; --o)
            t[o + e] = k[o + r];
    else if (a < 1e3 || !true)
        for (o = 0; o < a; ++o)
            t[o + e] = k[o + r];
    else
        Uint8Array.prototype.set.call(t, k.subarray(r, r + a), e);
    return a
}


function concat(t, e) { // 48  68
    if (false)
        throw new TypeError('"list" argument must be an Array of Buffers');
    if (0 === t.length)
        return i.alloc(0);
    var r;
    if (void 0 === e)
        for (e = 0,
                 r = 0; r < t.length; ++r)
            e += t[r].length;
    var n = allocUnsafe(e),
        o = 0;
    for (r = 0; r < t.length; ++r) {
        var a = t[r];
        a_68_copy(a, n, o),
            o += a.length
    }
    return n
}


function a(e) { // 70  92  94
    return "string" == typeof e && (e = t.from(e)), (0,
        h.default)(e, 41405).toString(16).replace(/^0+/, "")
}


function i_update(t, e, r) {
    if (!(true || this instanceof i_update))
        return new i(t, e, r);
    if ("number" == typeof t) {
        if ("string" == typeof e)
            throw new Error("If encoding is specified then the first argument must be a string");
        return c(this, t)
    }
    return a_g_Bt(this, t, e, r)
}


function r_e(n) {
    if (r[n])
        return r[n].exports;
    var o = r[n] = {
        i: n,
        l: !1,
        exports: {}
    };
    return t[n].call(o.exports, o, o.exports, e),
        o.l = !0,
        o.exports
}


function update(kkk, t) { // 88
    var r, o = "string" == typeof t;
    o && (t = n(t),
        o = !1,
        r = !0),
    "undefined" != typeof ArrayBuffer && t instanceof ArrayBuffer && (r = !0,
        t = new Uint8Array(t));
    var i = 0,
        c = t.length,
        f = i + c;
    if (0 == c)
        return kkk;
    if (kkk.total_len += c,
    0 == kkk.memsize && (kkk.memory = o ? "" : r ? new Uint8Array(32) : new i_update(32)),
    kkk.memsize + c < 32)
        return o ? kkk.memory += t : r ? kkk.memory.set(t.subarray(0, c), kkk.memsize) : a_68_copy(t, kkk.memory, kkk.memsize, 0, c),
            kkk.memsize += c,
            kkk;
    if (kkk.memsize > 0) {
        o ? kkk.memory += t.slice(0, 32 - kkk.memsize) : r ? kkk.memory.set(t.subarray(0, 32 - kkk.memsize), kkk.memsize) : t.copy(kkk.memory, kkk.memsize, 0, 32 - kkk.memsize);
        var l = 0;
        if (o) {
            var h;
            h = a(kkk.memory.charCodeAt(l + 1) << 8 | kkk.memory.charCodeAt(l), kkk.memory.charCodeAt(l + 3) << 8 | kkk.memory.charCodeAt(l + 2), kkk.memory.charCodeAt(l + 5) << 8 | kkk.memory.charCodeAt(l + 4), kkk.memory.charCodeAt(l + 7) << 8 | kkk.memory.charCodeAt(l + 6)),
                kkk.v1.add(h.multiply(u)).rotl(31).multiply(s),
                l += 8,
                h = a(kkk.memory.charCodeAt(l + 1) << 8 | kkk.memory.charCodeAt(l), kkk.memory.charCodeAt(l + 3) << 8 | kkk.memory.charCodeAt(l + 2), kkk.memory.charCodeAt(l + 5) << 8 | kkk.memory.charCodeAt(l + 4), kkk.memory.charCodeAt(l + 7) << 8 | kkk.memory.charCodeAt(l + 6)),
                kkk.v2.add(h.multiply(u)).rotl(31).multiply(s),
                l += 8,
                h = a(kkk.memory.charCodeAt(l + 1) << 8 | kkk.memory.charCodeAt(l), kkk.memory.charCodeAt(l + 3) << 8 | kkk.memory.charCodeAt(l + 2), kkk.memory.charCodeAt(l + 5) << 8 | kkk.memory.charCodeAt(l + 4), kkk.memory.charCodeAt(l + 7) << 8 | kkk.memory.charCodeAt(l + 6)),
                kkk.v3.add(h.multiply(u)).rotl(31).multiply(s),
                l += 8,
                h = a(kkk.memory.charCodeAt(l + 1) << 8 | kkk.memory.charCodeAt(l), kkk.memory.charCodeAt(l + 3) << 8 | kkk.memory.charCodeAt(l + 2), kkk.memory.charCodeAt(l + 5) << 8 | kkk.memory.charCodeAt(l + 4), kkk.memory.charCodeAt(l + 7) << 8 | kkk.memory.charCodeAt(l + 6)),
                kkk.v4.add(h.multiply(u)).rotl(31).multiply(s)
        } else {
            var h;
            h = a(kkk.memory[l + 1] << 8 | kkk.memory[l], kkk.memory[l + 3] << 8 | kkk.memory[l + 2], kkk.memory[l + 5] << 8 | kkk.memory[l + 4], kkk.memory[l + 7] << 8 | kkk.memory[l + 6]),
                kkk.v1.add(h.multiply(u)).rotl(31).multiply(s),
                l += 8,
                h = a(kkk.memory[l + 1] << 8 | kkk.memory[l], kkk.memory[l + 3] << 8 | kkk.memory[l + 2], kkk.memory[l + 5] << 8 | kkk.memory[l + 4], kkk.memory[l + 7] << 8 | kkk.memory[l + 6]),
                kkk.v2.add(h.multiply(u)).rotl(31).multiply(s),
                l += 8,
                h = a(kkk.memory[l + 1] << 8 | kkk.memory[l], kkk.memory[l + 3] << 8 | kkk.memory[l + 2], kkk.memory[l + 5] << 8 | kkk.memory[l + 4], kkk.memory[l + 7] << 8 | kkk.memory[l + 6]),
                kkk.v3.add(h.multiply(u)).rotl(31).multiply(s),
                l += 8,
                h = a(kkk.memory[l + 1] << 8 | kkk.memory[l], kkk.memory[l + 3] << 8 | kkk.memory[l + 2], kkk.memory[l + 5] << 8 | kkk.memory[l + 4], kkk.memory[l + 7] << 8 | kkk.memory[l + 6]),
                kkk.v4.add(h.multiply(u)).rotl(31).multiply(s)
        }
        i += 32 - kkk.memsize,
            kkk.memsize = 0,
        o && (kkk.memory = "")
    }
    if (i <= f - 32) {
        var p = f - 32;
        do {
            if (o) {
                var h;
                h = a(t.charCodeAt(i + 1) << 8 | t.charCodeAt(i), t.charCodeAt(i + 3) << 8 | t.charCodeAt(i + 2), t.charCodeAt(i + 5) << 8 | t.charCodeAt(i + 4), t.charCodeAt(i + 7) << 8 | t.charCodeAt(i + 6)),
                    kkk.v1.add(h.multiply(u)).rotl(31).multiply(s),
                    i += 8,
                    h = a(t.charCodeAt(i + 1) << 8 | t.charCodeAt(i), t.charCodeAt(i + 3) << 8 | t.charCodeAt(i + 2), t.charCodeAt(i + 5) << 8 | t.charCodeAt(i + 4), t.charCodeAt(i + 7) << 8 | t.charCodeAt(i + 6)),
                    kkk.v2.add(h.multiply(u)).rotl(31).multiply(s),
                    i += 8,
                    h = a(t.charCodeAt(i + 1) << 8 | t.charCodeAt(i), t.charCodeAt(i + 3) << 8 | t.charCodeAt(i + 2), t.charCodeAt(i + 5) << 8 | t.charCodeAt(i + 4), t.charCodeAt(i + 7) << 8 | t.charCodeAt(i + 6)),
                    kkk.v3.add(h.multiply(u)).rotl(31).multiply(s),
                    i += 8,
                    h = a(t.charCodeAt(i + 1) << 8 | t.charCodeAt(i), t.charCodeAt(i + 3) << 8 | t.charCodeAt(i + 2), t.charCodeAt(i + 5) << 8 | t.charCodeAt(i + 4), t.charCodeAt(i + 7) << 8 | t.charCodeAt(i + 6)),
                    kkk.v4.add(h.multiply(u)).rotl(31).multiply(s)
            } else {
                var h;
                h = a(t[i + 1] << 8 | t[i], t[i + 3] << 8 | t[i + 2], t[i + 5] << 8 | t[i + 4], t[i + 7] << 8 | t[i + 6]),
                    kkk.v1.add(h.multiply(u)).rotl(31).multiply(s),
                    i += 8,
                    h = a(t[i + 1] << 8 | t[i], t[i + 3] << 8 | t[i + 2], t[i + 5] << 8 | t[i + 4], t[i + 7] << 8 | t[i + 6]),
                    kkk.v2.add(h.multiply(u)).rotl(31).multiply(s),
                    i += 8,
                    h = a(t[i + 1] << 8 | t[i], t[i + 3] << 8 | t[i + 2], t[i + 5] << 8 | t[i + 4], t[i + 7] << 8 | t[i + 6]),
                    kkk.v3.add(h.multiply(u)).rotl(31).multiply(s),
                    i += 8,
                    h = a(t[i + 1] << 8 | t[i], t[i + 3] << 8 | t[i + 2], t[i + 5] << 8 | t[i + 4], t[i + 7] << 8 | t[i + 6]),
                    kkk.v4.add(h.multiply(u)).rotl(31).multiply(s)
            }
            i += 8
        } while (i <= p)
    }
    return i < f && (o ? kkk.memory += t.slice(i) : r ? kkk.memory.set(t.subarray(i, f), kkk.memsize) : t.copy(kkk.memory, kkk.memsize, i, f),
        kkk.memsize = f - i),
        kkk
}


function digest(kkk) { // 90
    var a = i_i // 這些加密數據有用
        ,
        s = a("11400714785074694791"),
        u = a("14029467366897019727"),
        c = a("1609587929392839161"),
        f = a("9650029242287828579"),
        l = a("2870177450012600261");

    var t, e, r = kkk.memory,
        n = "string" == typeof r,
        o = 0,
        i = kkk.memsize,
        h = new i_i;
    for (kkk.total_len >= 32 ? (t = kkk.v1.clone().rotl(1),
        t.add(kkk.v2.clone().rotl(7)),
        t.add(kkk.v3.clone().rotl(12)),
        t.add(kkk.v4.clone().rotl(18)),
        t.xor(kkk.v1.multiply(u).rotl(31).multiply(s)),
        t.multiply(s).add(f),
        t.xor(kkk.v2.multiply(u).rotl(31).multiply(s)),
        t.multiply(s).add(f),
        t.xor(kkk.v3.multiply(u).rotl(31).multiply(s)),
        t.multiply(s).add(f),
        t.xor(kkk.v4.multiply(u).rotl(31).multiply(s)),
        t.multiply(s).add(f)) : t = add(kkk.seed.clone(), l),
             add(t, s_this(kkk.total_len, h)); o <= i - 8;)
        n ? a_a.call(h, r.charCodeAt(o + 1) << 8 | r.charCodeAt(o), r.charCodeAt(o + 3) << 8 | r.charCodeAt(o + 2), r.charCodeAt(o + 5) << 8 | r.charCodeAt(o + 4), r.charCodeAt(o + 7) << 8 | r.charCodeAt(o + 6)) : a_a.call(h, r[o + 1] << 8 | r[o], r[o + 3] << 8 | r[o + 2], r[o + 5] << 8 | r[o + 4], r[o + 7] << 8 | r[o + 6]),
            multiply(rotl.call(multiply(h, u), 31), s),
            add(multiply(rotl.call(xor.call(t, h), 27), s), f),
            o += 8;
    for (o + 4 <= i && (n ? h.fromBits(r.charCodeAt(o + 1) << 8 | r.charCodeAt(o), r.charCodeAt(o + 3) << 8 | r.charCodeAt(o + 2), 0, 0) : h.fromBits(r[o + 1] << 8 | r[o], r[o + 3] << 8 | r[o + 2], 0, 0),
        t.xor(multiply(h, s)).rotl(23).multiply(u).add(c),
        o += 4); o < i;)
        h.fromBits(n ? r.charCodeAt(o++) : r[o++], 0, 0, 0),
            t.xor(h.multiply(l)).rotl(11).multiply(s);
    return e = shiftRight.call(clone.call(t), 33),
        multiply(xor.call(t, e), u),
        e = shiftRight.call(clone.call(t), 29),
        multiply(xor.call(t, e), c),
        e = shiftRight.call(clone.call(t), 32),
        xor.call(t, e),
        i_this.call(kkk, kkk.seed),
        t
}


function clone() {
    return new i_i(this._a00, this._a16, this._a32, this._a48)
}


function shiftRight(t) {
    return t %= 64,
        t >= 48 ? (this._a00 = this._a48 >> t - 48,
            this._a16 = 0,
            this._a32 = 0,
            this._a48 = 0) : t >= 32 ? (t -= 32,
            this._a00 = 65535 & (this._a32 >> t | this._a48 << 16 - t),
            this._a16 = this._a48 >> t & 65535,
            this._a32 = 0,
            this._a48 = 0) : t >= 16 ? (t -= 16,
            this._a00 = 65535 & (this._a16 >> t | this._a32 << 16 - t),
            this._a16 = 65535 & (this._a32 >> t | this._a48 << 16 - t),
            this._a32 = this._a48 >> t & 65535,
            this._a48 = 0) : (this._a00 = 65535 & (this._a00 >> t | this._a16 << 16 - t),
            this._a16 = 65535 & (this._a16 >> t | this._a32 << 16 - t),
            this._a32 = 65535 & (this._a32 >> t | this._a48 << 16 - t),
            this._a48 = this._a48 >> t & 65535),
        this
}


function o_default() { // 71  87  89  91
    return 2 == arguments.length ? digest(update(new o_default(arguments[1]), arguments[0])) : this instanceof o_default ? void i_this.call(this, arguments[0]) : new o(arguments[0])
}


function i_this(t) { // 72
    var s = {
        'remainder': null,
        '_a00': 51847,
        '_a16': 34283,
        '_a32': 31153,
        '_a48': 40503,
        'clone': function () {
            return new i_i(this._a00, this._a16, this._a32, this._a48)
        }
    }
    var u = {
        'remainder': null,
        '_a00': 60239,
        '_a16': 10196,
        '_a32': 44605,
        '_a48': 49842
    }
    return this.seed = new i_a(t),
        this.v1 = add(add(this.seed.clone(), s), u),
        this.v2 = add(this.seed.clone(), u),
        this.v3 = this.seed.clone(),
        this.v4 = subtract(this.seed.clone(), s),
        this.total_len = 0,
        this.memsize = 0,
        this.memory = null,
        this
}


function subtract(a, t) {
    return add(a, negate(clone.call(t)))
}


function negate(a) {
    var t = 1 + (65535 & ~a._a00);
    return a._a00 = 65535 & t,
        t = (65535 & ~a._a16) + (t >>> 16),
        a._a16 = 65535 & t,
        t = (65535 & ~a._a32) + (t >>> 16),
        a._a32 = 65535 & t,
        a._a48 = ~a._a48 + (t >>> 16) & 65535,
        a
}


function i_i(t, e, r, n) {
    return this instanceof i_i ? (this.remainder = null,
        "string" == typeof t ? i_u.call(this, t, e) : void 0 === e ? s_this.call(this, t) : void a_a.apply(this, arguments)) : new i_i(t, e, r, n)
}


function i_u(t, e) {
    e = e || 10,
        this._a00 = 0,
        this._a16 = 0,
        this._a32 = 0,
        this._a48 = 0;
    for (var r = c[e] || new i_i(Math.pow(e, 5)), n = 0, o = t.length; n < o; n += 5) {
        var a = Math.min(5, o - n),
            s = parseInt(t.slice(n, n + a), e);
        add(multiply(this, a < 5 ? new i_i(Math.pow(e, a)) : r), new i_i(s))
    }
    return this
}


function multiply(k, t) {
    var e = k._a00,
        r = k._a16,
        n = k._a32,
        o = k._a48,
        i = t._a00,
        a = t._a16,
        s = t._a32,
        u = t._a48,
        c = e * i,
        f = c >>> 16;
    f += e * a;
    var l = f >>> 16;
    f &= 65535,
        f += r * i,
        l += f >>> 16,
        l += e * s;
    var h = l >>> 16;
    return l &= 65535,
        l += r * a,
        h += l >>> 16,
        l &= 65535,
        l += n * i,
        h += l >>> 16,
        h += e * u,
        h &= 65535,
        h += r * s,
        h &= 65535,
        h += n * a,
        h &= 65535,
        h += o * i,
        k._a00 = 65535 & c,
        k._a16 = 65535 & f,
        k._a32 = 65535 & l,
        k._a48 = 65535 & h,
        k
}


function i_a(t, e, r, n) { // 73  75  78  80
    return this.remainder = null,
        this._a00 = 65535 & t,
        this._a16 = t >>> 16,
        this._a32 = 0,
        this._a48 = 0,
        this.clone = function () { // 77  81
            return new i_i(this._a00, this._a16, this._a32, this._a48)
        },
        this
}


function s_this(t, k) { // 74
    if (k)
        return k._a00 = 65535 & t,
            k._a16 = t >>> 16,
            k._a32 = 0,
            k._a48 = 0,
            k
    return this._a00 = 65535 & t,
        this._a16 = t >>> 16,
        this._a32 = 0,
        this._a48 = 0,
        this
}


function rotl(t) {
    if (0 == (t %= 64))
        return this;
    if (t >= 32) {
        var e = this._a00;
        if (this._a00 = this._a32,
            this._a32 = e,
            e = this._a48,
            this._a48 = this._a16,
            this._a16 = e,
        32 == t)
            return this;
        t -= 32
    }
    var r = this._a48 << 16 | this._a32,
        n = this._a16 << 16 | this._a00,
        o = r << t | n >>> 32 - t,
        i = n << t | r >>> 32 - t;
    return this._a00 = 65535 & i,
        this._a16 = i >>> 16,
        this._a32 = 65535 & o,
        this._a48 = o >>> 16,
        this
}


function xor(t) {
    return this._a00 ^= t._a00,
        this._a16 ^= t._a16,
        this._a32 ^= t._a32,
        this._a48 ^= t._a48,
        this
}


function a_a(t, e, r, n) { // 79
    return void 0 === r ? (this._a00 = 65535 & t,
        this._a16 = t >>> 16,
        this._a32 = 65535 & e,
        this._a48 = e >>> 16,
        this) : (this._a00 = 0 | t,
        this._a16 = 0 | e,
        this._a32 = 0 | r,
        this._a48 = 0 | n,
        this)
}


function add(a, t) { // 83  85
    var e = a._a00 + t._a00,
        r = e >>> 16;
    r += a._a16 + t._a16;
    var n = r >>> 16;
    n += a._a32 + t._a32;
    var o = n >>> 16;
    return o += a._a48 + t._a48,
        a._a00 = 65535 & e,
        a._a16 = 65535 & r,
        a._a32 = 65535 & n,
        a._a48 = 65535 & o,
        a
}


function r_decrypt(e) {
    var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "hjasbdn2ih823rgwudsde7e2dhsdhas";
    "string" == typeof r && (r = [].map.call(r, function (t) {
        return t.charCodeAt(0)
    }));
    for (var n, o = [], i = 0, a = new i_update(e.length), s = 0; s < 256; s++)
        o[s] = s;
    for (s = 0; s < 256; s++)
        i = (i + o[s] + r[s % r.length]) % 256,
            n = o[s],
            o[s] = o[i],
            o[i] = n;
    s = 0,
        i = 0;
    for (var u = 0; u < e.length; u++)
        s = (s + 1) % 256,
            i = (i + o[s]) % 256,
            n = o[s],
            o[s] = o[i],
            o[i] = n,
            a[u] = e[u] ^ o[(o[s] + o[i]) % 256];
    return a
}


function Bt(t) {
    var e = {}
    e.maxObjectSize = 1e8,
        e.maxObjectCount = 32768,
        e.parseFile = function (t, e) {
            function r(t) {
                var r, n = null;
                try {
                    r = parseBuffer(t)
                } catch (t) {
                    n = t
                }
                e(n, r)
            }

            return n.isBuffer(t) ? r(t) : void f.readFile(t, function (t, n) {
                return t ? e(t) : void r(n)
            })
        }

    function r(e) {
        var r = x[e],
            n = t[r],
            o = (240 & n) >> 4,
            i = 15 & n,
            a = {
                offset: r,
                type: n,
                objType: o,
                objInfo: i,
                tableOffset: e
            };
        switch (o) {
            case 0:
                return f(a);
            case 1:
                return h(a);
            case 8:
                return p(a);
            case 2:
                return d(a);
            case 3:
                return m(a);
            case 6:
                return y(a);
            case 4:
                return g(a);
            case 5:
                return g(a, !0);
            case 10:
                return v(a);
            case 13:
                return b(a);
            default:
                throw new Error(2, o.toString(16))
        }
    }

    function f(t) {
        var e = t.objInfo,
            r = t.objType;
        switch (e) {
            case 0:
                return null;
            case 8:
                return !1;
            case 9:
                return !0;
            case 15:
                return null;
            default:
                throw new Error(3, r.toString(16))
        }
    }

    function h(r) {
        var n = r.offset,
            o = r.objInfo,
            i = Math.pow(2, o);
        if (i > 4)
            return u_h_Bt(a_slice(t, n + 1, n + 1 + i));
        if (i < e.maxObjectSize)
            return a_h_Bt(a_slice(t, n + 1, n + 1 + i));
        throw new Error("4 " + i + " " + e.maxObjectSize)
    }

    function p(r) {
        var n = r.offset,
            a = r.objInfo,
            s = a;
        if (s < e.maxObjectSize)
            return o({}, l, i(t.slice(n + 1, n + 1 + s)));
        throw new Error("4 " + s + " " + e.maxObjectSize)
    }

    function d(r) {
        var n = r.offset,
            o = r.objInfo,
            i = Math.pow(2, o);
        if (!(i < e.maxObjectSize))
            throw new Error("4 " + i + " " + e.maxObjectSize);
        var a = t.slice(n + 1, n + 1 + i);
        return 4 === i ? readFloatBE.call(a, 0) : 8 === i ? readDoubleBE.call(a, 0) : void 0
    }

    function m(e) {
        var r = e.offset,
            n = e.objInfo;
        3 != n && console.error(5, n);
        var o = t.slice(r + 1, r + 9);
        return new Date(9783072e5 + 1e3 * o.readDoubleBE(0))
    }

    function y(r) {
        var n = r.offset,
            o = r.objInfo,
            a = 1,
            s = o;
        if (15 == o) {
            var u = t[n + 1],
                c = (240 & u) / 16;
            1 != c && console.error(6, c);
            var f = 15 & u,
                l = Math.pow(2, f);
            a = 2 + l,
                s = i(t.slice(n + 2, n + 2 + l))
        }
        if (s < e.maxObjectSize)
            return t.slice(n + a, n + a + s);
        throw new Error("4 " + s + " " + e.maxObjectSize)
    }

    function g(r, o) {
        var a = r.offset,
            s = r.objInfo;
        o = o || 0;
        var u = "utf8",
            f = s,
            l = 1;
        if (15 == s) {
            var h = t[a + 1],
                p = (240 & h) / 16;
            if (1 != p)
                throw new Error("7 " + p);
            var d = 15 & h,
                m = Math.pow(2, d);
            l = 2 + m,
                f = i_Bt(a_slice(t, a + 2, a + 2 + m))
        }
        if ((f *= o + 1) < e.maxObjectSize) {
            var y = new i_update(a_slice(t, a + l, a + l + f));
            return o && (y = c_g_Bt(y),
                u = "ucs2"),
                to_string_g_Bt.call(y, u)
        }
        throw new Error("4 " + f + " " + e.maxObjectSize)
    }

    function v(n) {
        var o = n.offset,
            a = n.objInfo,
            s = a,
            u = 1;
        if (15 == a) {
            var c = t[o + 1],
                f = (240 & c) / 16;
            var l = 15 & c,
                h = Math.pow(2, l);
            u = 2 + h,
                s = i_Bt(a_slice(t, o + 2, o + 2 + h))
        }
        for (var p = [], d = 0; d < s; d++) {
            var m = i_Bt(a_slice(t, o + u + d * E, o + u + (d + 1) * E));
            p[d] = r(m)
        }
        return p
    }

    function b(n) {
        var o = n.offset,
            a = n.objInfo,
            s = (n.tableOffset,
                a),
            u = 1;
        if (15 == a) {
            var c = t[o + 1],
                f = (240 & c) / 16;
            1 != f && console.error(9, f);
            var l = 15 & c,
                h = Math.pow(2, l);
            u = 2 + h,
                s = i(a_slice(t, o + 2, o + 2 + h))
        }
        if (2 * s * E > e.maxObjectSize)
            throw new Error(4);
        for (var p = {}, d = 0; d < s; d++) {
            var m = i_Bt(a_slice(t, o + u + d * E, o + u + (d + 1) * E)),
                y = i_Bt(a_slice(t, o + u + s * E + d * E, o + u + s * E + (d + 1) * E)),
                g = r(m),
                v = r(y);
            p[g] = v
        }
        return p
    }

    var w = a_slice(t, t.length - 32, t.length),
        _ = readUInt8.call(w, 6),
        E = readUInt8.call(w, 7),
        A = s_Bt(w, 8),
        C = s_Bt(w, 16),
        S = s_Bt(w, 24);
    for (var x = [], O = 0; O < A; O++) {
        var T = a_slice(t, S + O * _, S + (O + 1) * _);
        x[O] = i_Bt(T, 0)
    }
    return r(C)
}


function readUInt8(t, e) {
    return this[t]
}


function s_Bt(t, e) {
    return readUInt32BE.call(a_slice(t, e, e + 8), 4, 8)
}


function readUInt32BE(t, e) {
    return e || I(t, 4, this.length),
    16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3])
}


function i_Bt(t, e) {
    e = e || 0;
    for (var r = 0, n = e; n < t.length; n++)
        r <<= 8,
            r |= 255 & t[n];
    return r
}


function a_g_Bt(t, e, r, n) {
    if ("number" == typeof e)
        throw new TypeError('"value" argument must not be a number');
    return "undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer ? h(t, e, r, n) : "string" == typeof e ? f(t, e, r) : p_a(t, e)
}


function p_a(t, e) {
    if (true) {
        var r = 0 | e.length;
        return t = o_19(t, r),
            0 === t.length ? t : (a_68_copy(e, t, 0, 0, r),
                t)
    }
    if (e) {
        if ("undefined" != typeof ArrayBuffer && e.buffer instanceof ArrayBuffer || "length" in e)
            return "number" != typeof e.length || G(e.length) ? o(t, 0) : l(t, e);
        if ("Buffer" === e.type && J(e.data))
            return l(t, e.data)
    }
    throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")
}


function c_g_Bt(t) {
    for (var e = t.length, r = 0; r < e; r += 2) {
        var n = t[r];
        t[r] = t[r + 1],
            t[r + 1] = n
    }
    return t
}


function to_string_g_Bt() {
    var t = 0 | this.length;
    return 0 === t ? "" : 0 === arguments.length ? T(this, 0, t) : g_to_string.apply(this, arguments)
}


function g_to_string(t, e, r) {
    var n = !1;
    if ((void 0 === e || e < 0) && (e = 0),
    e > this.length)
        return "";
    if ((void 0 === r || r > this.length) && (r = this.length),
    r <= 0)
        return "";
    if (r >>>= 0,
        e >>>= 0,
    r <= e)
        return "";
    for (t || (t = "utf8");;)
        switch (t) {
            case "hex":
                return N(this, e, r);
            case "utf8":
            case "utf-8":
                return T_g(this, e, r);
            case "ascii":
                return k(this, e, r);
            case "latin1":
            case "binary":
                return R(this, e, r);
            case "base64":
                return O(this, e, r);
            case "ucs2":
            case "ucs-2":
            case "utf16le":
            case "utf-16le":
                return j_g(this, e, r);
            default:
                if (n)
                    throw new TypeError("Unknown encoding: " + t);
                t = (t + "").toLowerCase(),
                    n = !0
        }
}


function j_g(t, e, r) {
    for (var n = a_slice(t, e, r), o = "", i = 0; i < n.length; i += 2)
        o += String.fromCharCode(n[i] + 256 * n[i + 1]);
    return o
}


function T_g(t, e, r) {
    r = Math.min(t.length, r);
    for (var n = [], o = e; o < r;) {
        var i = t[o],
            a = null,
            s = i > 239 ? 4 : i > 223 ? 3 : i > 191 ? 2 : 1;
        if (o + s <= r) {
            var u, c, f, l;
            switch (s) {
                case 1:
                    i < 128 && (a = i);
                    break;
                case 2:
                    u = t[o + 1],
                    128 == (192 & u) && (l = (31 & i) << 6 | 63 & u) > 127 && (a = l);
                    break;
                case 3:
                    u = t[o + 1],
                        c = t[o + 2],
                    128 == (192 & u) && 128 == (192 & c) && (l = (15 & i) << 12 | (63 & u) << 6 | 63 & c) > 2047 && (l < 55296 || l > 57343) && (a = l);
                    break;
                case 4:
                    u = t[o + 1],
                        c = t[o + 2],
                        f = t[o + 3],
                    128 == (192 & u) && 128 == (192 & c) && 128 == (192 & f) && (l = (15 & i) << 18 | (63 & u) << 12 | (63 & c) << 6 | 63 & f) > 65535 && l < 1114112 && (a = l)
            }
        }
        null === a ? (a = 65533,
            s = 1) : a > 65535 && (a -= 65536,
            n.push(a >>> 10 & 1023 | 55296),
            a = 56320 | 1023 & a),
            n.push(a),
            o += s
    }
    return P_T(n)
}


function P_T(t) {
    var e = t.length;
    if (e <= Q)
        return String.fromCharCode.apply(String, t);
    for (var r = "", n = 0; n < e;)
        r += String.fromCharCode.apply(String, a_slice(t, n, n += Q));
    return r
}


function a_h_Bt(t, e, r) {
    return e = e || 0,
        r = r || t.length - e,
        readIntBE.call(t, e, r)
}

function u_h_Bt(t, e) {
    return e = e || 0,
        readInt32BE.call(t.slice(e, e + 8), 4, 8)
}


function readIntBE(t, e, r) {
    t |= 0,
        e |= 0,
    r || undefined;
    for (var n = e, o = 1, i = this[t + --n]; n > 0 && (o *= 256);)
        i += this[t + --n] * o;
    return o *= 128,
    i >= o && (i -= Math.pow(2, 8 * e)),
        i
}


function readFloatBE(t, e) {
    return e || undefined,
        K.read(this, t, !1, 23, 4)
}

function readDoubleBE(t, e) {
    return e || undefined,
        K.read(this, t, !1, 52, 8)
}


function kt(t) {
    var i = Ut;

    function n(e) {
        if (1 === Object.keys(e).length && void 0 !== e[i.$UID])
            return o(e[i.$UID]);
        if (i.$vals in e) {
            var t = e[i.$keys],
                n = e[i.$vals];
            return t ? t.reduce(function (e, t, i) {
                return e[o(t)] = r(n[i]),
                    e
            }, {}) : n.map(function (e) {
                return o(e)
            })
        }
        return Object.keys(e).reduce(function (t, n) {
            var o = e[n];
            return t[n] = r(o),
                t
        }, {})
    }

    function r(t) {
        return "Object" === (0,
            i.getType)(t) ? n(t) : "Array" === (0,
            i.getType)(t) ? t.map(function (e) {
            return r(e)
        }) : t instanceof i_update ? (0 === t[t.length - 1] && (t = t.slice(0, t.length - 1)),
            t.toString()) : t
    }

    function o(e) {
        return r(t[(0,
            i.getRealUID)(e)])
    }

    return o(arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : (0,
        i.getRealUID)(i.$defaultRootUID))
}


function n_n(r) {
    return e_e(t)(r_r)(r)
}


function e_e(e) {
    return function (e) {
        return function (t) {
            var n = Object.keys(t)[0],
                r = Ut.crypto.decrypt(t[n], n);
            return e(r)
        }
    }
}


function r_r(r) {
    return e_e_decrypt(t)(e_e_decrypt_n)(r)
}


function e_e_decrypt(e) {
    return function (e) {
        return function (t) {
            return e(Bt(t))
        }
    }
}


// function ee_decrypt{
//     return
// }

function e_e_decrypt_n(r) {
    return playload(t)(e_playload)(r)
}


function playload(e) {
    return function (e) {
        return function (t) {
            return e({
                type: "INIT",
                payload: kt(t)
            })
        }
    }
}


function e_playload(r) {
    return r
}


function decrypt(r) {
    var a = encry2arr_from(r, "base64") // 0
        ,
        s = Math.max(Math.floor((a.length - 2 * i) / 3), 0) // 40
        ,
        u = a_slice(a, s, s + i); // 41
    a = concat([a_slice(a, 0, s), a_slice(a, s + i)]); // 43  45  47
    var c_data = hash(concat([u, encry2arr_from("")])); // 49  67  69
    var l = {}
    l[c_data] = a
    var data = n_n((l = {}, l[c_data] = a, l))
    // console.log(data)
    // console.log(data.payload.items[0])
    var d_temp = data.payload.items
    var ret_val = JSON.stringify(d_temp)
    return ret_val
}

// console.log(decrypt(r))

// NodeJS獲取命令行後面的參數
// 假設有如下的命令行 node test.js arg1 arg2 arg3,
// 現在想在test.js中獲取後面的參數arg1、arg2、arg3…
// var arguments = process.argv.splice(2);
// process是一個全局對象,argv返回的是一組包含命令行參數的數組。
// 第一項爲”node”,第二項爲執行的js的完整路徑,後面是附加在命令行後的參數

var arguments = process.argv.splice(2)
// console.log(arguments[0])
console.log(decrypt(arguments[0]))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章