爬虫逆向实战小记——解决webpack实记
- 创业
- 2025-09-11 15:27:01

注意!!!!某XX网站实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!
aHR0cHM6Ly9wbW9zLnhqLnNnY2MuY29tLmNuOjIwMDgwL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi8jL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi9jb2x1bW5Ib21lTGVmdE1lbnVOZXc=
选择-政策规则
前情提要个人习惯遇到webpack的时候,一般都会逆向寻找加密方式,并直接找对应的库进行解密,但是当遇到没有明确的加密方式且webpack类型就抓瞎了,本文算是鄙人第一次扣webpack,有任何描述介绍部分不规范的多多指出
步骤一: 分析① 请求网址,查看参数,初步判断加密方式。这个网址直接表明使用sm2和sm4(加密方式仅针对当前请求的网址),还有一个publicKey,看似与RSA可能有关系,暂时按下不表。
步骤二: 解决问题①先找到请求断点处。通过XHR 提取断点
②查看堆栈可以找到queryData处有个getData,我个人认为这里值得一个断点(dddd, 不做赘述,全凭感觉),将此处添加断点。去掉XHR中的勾选,重新请求
③重新请求后可以看出,Object(k["a"])(a) 是我们请求的参数
④Object(k["c"]) 其实调用的r 函数,这时候就很肯定断点没有问题,且参数分别为t 和n
⑤通过④可以知道,n 需要t 的值作为参数。t的函数下图所示,可以看到t = Object(n["h"])()
⑥ t 会生成一个128位的值。e则是一个序列化的dict。this.getSm2Key 会生成一个公钥和私钥
⑦跟进this.getSm2Key ,可以看到调用Object(n["d"])() 也就是Ir 函数,跟进Ir 其实调用了sm2中generateKeyPairHex()方法
⑧接下来可以看到i 以及r["sm4"] 生成的值,都是Object(n["字母"]) 这种形式。我们跟着这个n 往上找,看一下n是谁,可以看出var n = r("c99b")
⑨ 经过上述,我们隐隐感觉到,这是一个webpack。那我们在var n = r("c99b") 打断点,这里断点的作用是找到加载器。
⑩ 果然是典型webpack类型。
⑪ 将上述源码全部复制到本地,同时,在n = r(c99b) 原文中全文在当前的文件里全文搜索 c99b ,可以看到只有4个,那就很容易找打到我们自己需要的
步骤三: 代码展示 window = global; window.navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0"; (function(c) { function n(n) { for (var e, h, d = n[0], f = n[1], b = n[2], t = 0, r = []; t < d.length; t++) h = d[t], k[h] && r.push(k[h][0]), k[h] = 0; for (e in f) Object.prototype.hasOwnProperty.call(f, e) && (c[e] = f[e]); o && o(n); while (r.length) r.shift()(); return a.push.apply(a, b || []), u() } function u() { for (var c, n = 0; n < a.length; n++) { for (var u = a[n], e = !0, h = 1; h < u.length; h++) { var d = u[h]; 0 !== k[d] && (e = !1) } e && (a.splice(n--, 1), c = f(f.s = u[0])) } return c } var e = {} , h = { runtime: 0 } , k = { runtime: 0 } , a = []; function d(c) { return f.p + "static/js/" + ({ "chunk-commons": "chunk-commons" }[c] || c) + "." + { "chunk-00155f4b": "521c2d41", "chunk-f81359d0": "bb65ea0e", "chunk-038e78f2": "63e4b520", "chunk-0548fa25": "70a81d95", "chunk-073daa90": "630a032a", "chunk-09163dd7": "748352f6", "chunk-0b4570f8": "27ff7a74", "chunk-0b500cce": "b0365218", "chunk-0bbeb896": "4340a761", "chunk-0ca7c584": "f5d69cdc", "chunk-133a2b06": "87530288", "chunk-171dca47": "daf51bfb", "chunk-18cd25b5": "a37f0898", "chunk-1dbfb2ca": "ce532e83", "chunk-22d38d01": "a15751c3", "chunk-24bd6642": "25417b3a", "chunk-251ac763": "b409ebd5", "chunk-4b109e82": "6645ca60", "chunk-2c4fe7ee": "82616207", "chunk-f3b28598": "a3447abc", "chunk-2d0d385a": "a9fb3497", "chunk-54dce028": "2eca8dc5", "chunk-7eeef8c6": "bf3fcd56", "chunk-2d0d641d": "52173caf", "chunk-2d2105d3": "e0d08352", "chunk-2d21ead9": "d9cd2bde", "chunk-e31a7778": "260a343a", "chunk-78a58ce0": "313aee65", "chunk-120f25a4": "467947e9", "chunk-2d222919": "41ea63f6", "chunk-2d230c70": "33926d78", "chunk-2d230fe7": "fe56584d", "chunk-2d8ba231": "1570b2be", "chunk-2f617b25": "2d53c5eb", "chunk-545581c4": "a68e6777", "chunk-2f90d8f0": "e159136a", "chunk-3142d3bc": "9673962a", "chunk-31a04132": "6c08a4d6", "chunk-37abbf52": "c399424d", "chunk-381feb46": "c9073e09", "chunk-3aa7734e": "9d550bdc", "chunk-3afe39af": "01514d57", "chunk-477132e2": "e98a45dc", "chunk-4794904a": "112041d2", "chunk-9c7039ee": "f6637d7a", "chunk-430384fb": "03293819", "chunk-4a3d12ba": "3a461911", "chunk-f69cf13a": "0e957d10", "chunk-4884f80c": "37d68b9d", "chunk-4961c0a8": "3cec3769", "chunk-4a573df5": "fa302b65", "chunk-50e135d2": "3bc6edc4", "chunk-50f5e21c": "589b879b", "chunk-5410d1b2": "57a03373", "chunk-0fcb1caa": "2095d41b", "chunk-11ea4519": "bc6b2329", "chunk-23f89548": "13b1bd4c", "chunk-7066f7a4": "fe75730b", "chunk-264ceee0": "0679777a", "chunk-2d0cbebe": "fbb7cb11", "chunk-726b8536": "4a91a9aa", "chunk-1b4a54c2": "8d7fd715", "chunk-1fb382d5": "9780b172", "chunk-46155390": "eb78a23b", "chunk-56244582": "2d7886ed", "chunk-b5fa86a8": "3b3a001e", "chunk-2d247d82": "18a771a5", "chunk-31d4889a": "e2a27120", "chunk-48966bf8": "d0ba0dd8", "chunk-4ea24402": "0ef4e4cd", "chunk-594ba360": "fadfdd5f", "chunk-61ff399e": "49c8591e", "chunk-652f2b55": "e15b98f5", "chunk-654588bb": "0b652dc3", "chunk-6a660020": "bf34287a", "chunk-6e87ca78": "844e340c", "chunk-1c55cc64": "552bea03", "chunk-1153a3ae": "1371df58", "chunk-675f6070": "2c3385ab", "chunk-b2237dc8": "b473af74", "chunk-c187c814": "87fc4fb0", "chunk-57638791": "433911c7", "chunk-71ef2ed8": "82e8e540", "chunk-06940b2f": "4077a21c", "chunk-fd4bd9e4": "5265e5f5", "chunk-2577c36d": "fa2b0c82", "chunk-1548bb5e": "b39d8181", "chunk-287ae9c7": "6752e48d", "chunk-4fd8d347": "c05a0d11", "chunk-317d59de": "89bf12a6", "chunk-4235d6f1": "4c17e133", "chunk-4422d324": "b3686be1", "chunk-72d1b198": "298c4120", "chunk-ec497ea8": "f9d40449", "chunk-1f310d91": "a08f0244", "chunk-d3b3a4c0": "0bd051c6", "chunk-55fa8644": "454c844d", "chunk-9153473e": "087956c3", "chunk-5fd680e6": "74c74ae6", "chunk-662e0c60": "97b8273b", "chunk-62344ab0": "662b7a7d", "chunk-81bf9dcc": "cad271db", "chunk-bdcedaca": "9e74a753", "chunk-d514d152": "9a9876ed", "chunk-f17d0dd2": "39c26144", "chunk-77ec7d56": "0ae78e2a", "chunk-8c85fabc": "acb6509c", "chunk-8f383ba4": "59bda1fe", "chunk-a1aa28a4": "8bf4b8d3", "chunk-ed1821d6": "be36ea4f", "chunk-0a5b7b24": "7c5d9f09", "chunk-f13d06fc": "3aafa1d8", "chunk-56a54792": "9056c1a9", "chunk-58157c1c": "e4841ae1", "chunk-585cd5cc": "653519f5", "chunk-5a3ea4f3": "cd78b1a6", "chunk-63740e52": "1264a08d", "chunk-c9ad6fbc": "f9c9214d", "chunk-6ce0bad4": "0ce762d1", "chunk-2159e022": "eb158640", "chunk-71259396": "f093faf8", "chunk-719b43aa": "441e9684", "chunk-724a9633": "4f95062d", "chunk-039fe120": "6108d82e", "chunk-06175d58": "961167c9", "chunk-1f2a4c90": "1014d3cf", "chunk-21dfcdbe": "01a3f170", "chunk-28180124": "1acf5bf4", "chunk-2d2101ff": "070960e7", "chunk-4659744c": "b60948d0", "chunk-3d269f11": "714384d7", "chunk-3093f414": "123a07e7", "chunk-50b00630": "2d18511f", "chunk-77eacaec": "b6b32ac3", "chunk-39ca7086": "f1706600", "chunk-9873b59a": "8efc0517", "chunk-0a14db2e": "1c8d13b9", "chunk-0ed204c4": "17db03a0", "chunk-4a11df6c": "c9b0806f", "chunk-51edc778": "00f0b102", "chunk-5c45f974": "22536a96", "chunk-79ba38e3": "94b996d3", "chunk-f452313e": "55e3c433", "chunk-fc9a2a9e": "02575c74", "chunk-9d34eedc": "87a9226b", "chunk-b900ad98": "b7ebb247", "chunk-c8fddb6a": "47fb0a2c", "chunk-72abef28": "be3a151d", "chunk-6331f36e": "ef934774", "chunk-736d3dbc": "03eb7c15", "chunk-75bb6ef8": "28e41203", "chunk-7658eaca": "4202b131", "chunk-788cd71c": "b3646b24", "chunk-797eb7e4": "70212cdd", "chunk-7be33868": "e4772951", "chunk-7cdf79bc": "c8273376", "chunk-8116ecf6": "36884630", "chunk-89824c98": "9800389c", "chunk-95200f10": "2167d6f1", "chunk-a9051134": "70b8e09a", "chunk-ac459d52": "2c62611f", "chunk-b1c4a05a": "9272fa9b", "chunk-b3942c98": "1acf802d", "chunk-0d4c55a4": "0d54c993", "chunk-7c5fed2f": "4dd0e751", "chunk-bb42af12": "985640f6", "chunk-c7722330": "643167e7", "chunk-commons": "3a892a3a", "chunk-0441ac18": "377422d0", "chunk-95279b24": "4d51ed8d", "chunk-d6f3491c": "c243bf16", "chunk-d711add8": "5ed4abab", "chunk-dab226c4": "1a4de2b9", "chunk-e10f4fba": "6cce7619", "chunk-0d15f7df": "219df71b", "chunk-0ff1ff25": "6e5d596e", "chunk-74eeaf86": "db02d25f", "chunk-66043168": "752947a8", "chunk-72b72a35": "e38dfb17", "chunk-e9f73c82": "4db7cee9", "chunk-ef94f9e4": "34b885cb", "chunk-2d0aa5b8": "7a6792ef", "chunk-2bf9ff98": "0cb59caa", "chunk-3aebcc64": "38df6f56", "chunk-682ab6fa": "341236d6", "chunk-4aa0d228": "4a1d0934", "chunk-a64e0e52": "9fcef0dd", "chunk-18941db8": "008b7ab2", "chunk-30ffb292": "be6674d6", "chunk-12020c2c": "44d073f0", "chunk-1d40e4dd": "eb0013e9", "chunk-323c09d9": "7b680b12", "chunk-93b86d00": "4212f4ce", "chunk-945749a6": "d261e7ce", "chunk-f123646c": "7d121b65", "chunk-f31dd558": "848b5cdb", "chunk-f4f2ad3c": "4d3fc675", "chunk-72a81207": "34811335", "chunk-f57e2d4e": "9d10a08c", "chunk-fa236cae": "c37c8916", "chunk-672f23a7": "340eec8a", "chunk-13307a08": "213816e7", "chunk-03236f46": "e7015708", "chunk-65f4e680": "e9009344", "chunk-a90b5ec2": "054f1874", "chunk-58ca30db": "a1df23cd", "chunk-17ac497c": "d1f9eac5", "chunk-2d0b9654": "daeabca5", "chunk-2d2082c5": "91d6f87c", "chunk-2d22cce3": "2c36fe12", "chunk-43f4b4c2": "6ad69cf0", "chunk-5e12deb6": "24c2c451", "chunk-8c99df8a": "854fcbb6", "chunk-2d0c8293": "64a1fd70", "chunk-16bf884b": "91a3e6bb", "chunk-205588da": "afd28f14", "chunk-290573df": "b1034dae", "chunk-2d0bdda3": "f48a09fa", "chunk-367520b4": "891ecb2e", "chunk-3a5fd6b2": "e327bcff", "chunk-574d5906": "efdef4ac", "chunk-5b7f64e0": "aa28cac3", "chunk-7a587c4b": "5540c7c8", "chunk-9a76cd96": "d1a07944", "chunk-af945410": "9244bb34", "chunk-2d0c8dc6": "f8058a18", "chunk-40383e0d": "879f72b2", "chunk-5de8bd5b": "bb3a2e65", "chunk-0a492a9e": "cd209a2b", "chunk-271d5781": "d22f30cc", "chunk-373aa27e": "eb03abd2", "chunk-5bef02ba": "76bfbc5f", "chunk-40bf2235": "20e9054c", "chunk-72120114": "43e7852f", "chunk-7574e53d": "547eaca3", "chunk-8216af38": "d9daefd1", "chunk-bd9a13f4": "9436313c", "chunk-c5b153bc": "13c05eb0", "chunk-2d0e268a": "17ca379b", "chunk-c650ad2c": "34f83a31", "chunk-de7ba61a": "f87708b7", "chunk-ea6b50d4": "a03247b4", "chunk-f147a8c6": "c38e7795", "chunk-f78ebe08": "50b5c2d9", "chunk-0e3918da": "b2edfb17", "chunk-0f22b2bb": "538025c3", "chunk-17c1c66f": "68ae6a6a", "chunk-21d5d6a8": "e01e94e0", "chunk-3676ddf3": "f8498134", "chunk-3fdd08f9": "a55bf887", "chunk-4bc12aa0": "e48a4900", "chunk-51279394": "09e7d96a", "chunk-60ffa822": "95bb23d8", "chunk-71c7afb2": "4c7b18b0", "chunk-74ef81b5": "9d92d987", "chunk-8302281e": "a3952997", "chunk-afecc83c": "fdba638a", "chunk-cbbb17ba": "c4534fc5", "chunk-60080330": "bc98a611", "chunk-2095e530": "9aba1ad2", "chunk-2d0d3836": "7aa9f53a", "chunk-37e71e41": "161e04c3", "chunk-3a86a2e4": "d57044a4", "chunk-2d0f042f": "bb2f9c4b", "chunk-0faebb97": "64434133", "chunk-cd990dce": "cc30675b", "chunk-235daef3": "209addfe", "chunk-30b3a146": "1a824f9f", "chunk-9ca2f668": "925cbd3b", "chunk-7f0ea486": "4fa979d2", "chunk-2d0d3648": "86cec291", "chunk-d91c071a": "d3c433d9", "chunk-6b5b0490": "55e62227", "chunk-34243c32": "160e744b", "chunk-66d8764a": "184e3529", "chunk-7e58d3ae": "da81c9d5", "chunk-f759893a": "3f87f562", "chunk-60ff175e": "f4f2599c", "chunk-682a93d8": "c520e8d5", "chunk-715531ab": "73b53a8a", "chunk-2d0db21b": "bc92217f", "chunk-78d80fca": "ababc537", "chunk-3d705ea0": "042e29e0", "chunk-6ea7e65e": "3daa79ca", "chunk-0c330e08": "40765b8c", "chunk-56ab77f4": "72d28131", "chunk-66bc5ec2": "64ddc708", "chunk-0a8b10c2": "97fe0702", "chunk-0c63bb80": "b3b9a8b1", "chunk-11d9dd90": "fc4dbd4a", "chunk-14ed0682": "0160f2dd", "chunk-17b33bc0": "4c70d9b6", "chunk-20e7ee1e": "c5578a22", "chunk-212be834": "0edfeb55", "chunk-24bbfe3b": "74770d4d", "chunk-30e26798": "2aebc738", "chunk-47754068": "88133c92", "chunk-62468f97": "24e9873e", "chunk-6587a5a1": "e2aa045c", "chunk-6a66aaa2": "456b64dd", "chunk-785f1f55": "34907d63", "chunk-7a6cd5d6": "a4f07708", "chunk-a854f2cc": "f4ed36f8", "chunk-b1f2bf3c": "75cb621e", "chunk-caa4d928": "5d1b58f9", "chunk-4587ca1a": "e5750042", "chunk-04a2bc5c": "bcfa7d99", "chunk-2e4d0aa8": "20c7628a", "chunk-4d6117d2": "61bf6988", "chunk-6760b026": "b19ebcf4", "chunk-2d2084bb": "9c77bb77" }[c] + ".js" } function f(n) { if (e[n]) return e[n].exports; var u = e[n] = { i: n, l: !1, exports: {} }; return c[n].call(u.exports, u, u.exports, f), u.l = !0, u.exports } window.shuibingmeiyue = f; f.e = function(c) { var n = [] , u = { "chunk-00155f4b": 1, "chunk-038e78f2": 1, "chunk-0548fa25": 1, "chunk-09163dd7": 1, "chunk-0b4570f8": 1, "chunk-0b500cce": 1, "chunk-0bbeb896": 1, "chunk-0ca7c584": 1, "chunk-171dca47": 1, "chunk-18cd25b5": 1, "chunk-1dbfb2ca": 1, "chunk-22d38d01": 1, "chunk-24bd6642": 1, "chunk-251ac763": 1, "chunk-4b109e82": 1, "chunk-f3b28598": 1, "chunk-54dce028": 1, "chunk-7eeef8c6": 1, "chunk-120f25a4": 1, "chunk-2d8ba231": 1, "chunk-545581c4": 1, "chunk-2f90d8f0": 1, "chunk-31a04132": 1, "chunk-37abbf52": 1, "chunk-381feb46": 1, "chunk-3aa7734e": 1, "chunk-3afe39af": 1, "chunk-430384fb": 1, "chunk-4a3d12ba": 1, "chunk-4884f80c": 1, "chunk-4a573df5": 1, "chunk-50f5e21c": 1, "chunk-0fcb1caa": 1, "chunk-11ea4519": 1, "chunk-23f89548": 1, "chunk-7066f7a4": 1, "chunk-264ceee0": 1, "chunk-1b4a54c2": 1, "chunk-1fb382d5": 1, "chunk-46155390": 1, "chunk-56244582": 1, "chunk-b5fa86a8": 1, "chunk-2d247d82": 1, "chunk-31d4889a": 1, "chunk-48966bf8": 1, "chunk-4ea24402": 1, "chunk-594ba360": 1, "chunk-61ff399e": 1, "chunk-652f2b55": 1, "chunk-654588bb": 1, "chunk-6a660020": 1, "chunk-1c55cc64": 1, "chunk-1153a3ae": 1, "chunk-675f6070": 1, "chunk-b2237dc8": 1, "chunk-57638791": 1, "chunk-71ef2ed8": 1, "chunk-06940b2f": 1, "chunk-fd4bd9e4": 1, "chunk-2577c36d": 1, "chunk-1548bb5e": 1, "chunk-287ae9c7": 1, "chunk-4fd8d347": 1, "chunk-317d59de": 1, "chunk-4235d6f1": 1, "chunk-4422d324": 1, "chunk-72d1b198": 1, "chunk-ec497ea8": 1, "chunk-1f310d91": 1, "chunk-d3b3a4c0": 1, "chunk-55fa8644": 1, "chunk-9153473e": 1, "chunk-5fd680e6": 1, "chunk-662e0c60": 1, "chunk-62344ab0": 1, "chunk-81bf9dcc": 1, "chunk-bdcedaca": 1, "chunk-d514d152": 1, "chunk-f17d0dd2": 1, "chunk-77ec7d56": 1, "chunk-8c85fabc": 1, "chunk-8f383ba4": 1, "chunk-a1aa28a4": 1, "chunk-ed1821d6": 1, "chunk-0a5b7b24": 1, "chunk-f13d06fc": 1, "chunk-56a54792": 1, "chunk-58157c1c": 1, "chunk-5a3ea4f3": 1, "chunk-63740e52": 1, "chunk-c9ad6fbc": 1, "chunk-2159e022": 1, "chunk-71259396": 1, "chunk-719b43aa": 1, "chunk-039fe120": 1, "chunk-06175d58": 1, "chunk-1f2a4c90": 1, "chunk-21dfcdbe": 1, "chunk-28180124": 1, "chunk-4659744c": 1, "chunk-3d269f11": 1, "chunk-3093f414": 1, "chunk-50b00630": 1, "chunk-77eacaec": 1, "chunk-9873b59a": 1, "chunk-0a14db2e": 1, "chunk-0ed204c4": 1, "chunk-4a11df6c": 1, "chunk-51edc778": 1, "chunk-5c45f974": 1, "chunk-79ba38e3": 1, "chunk-f452313e": 1, "chunk-fc9a2a9e": 1, "chunk-9d34eedc": 1, "chunk-b900ad98": 1, "chunk-c8fddb6a": 1, "chunk-72abef28": 1, "chunk-6331f36e": 1, "chunk-736d3dbc": 1, "chunk-75bb6ef8": 1, "chunk-7658eaca": 1, "chunk-788cd71c": 1, "chunk-797eb7e4": 1, "chunk-7be33868": 1, "chunk-7cdf79bc": 1, "chunk-8116ecf6": 1, "chunk-a9051134": 1, "chunk-ac459d52": 1, "chunk-7c5fed2f": 1, "chunk-bb42af12": 1, "chunk-commons": 1, "chunk-0441ac18": 1, "chunk-95279b24": 1, "chunk-d6f3491c": 1, "chunk-dab226c4": 1, "chunk-0d15f7df": 1, "chunk-0ff1ff25": 1, "chunk-74eeaf86": 1, "chunk-66043168": 1, "chunk-72b72a35": 1, "chunk-e9f73c82": 1, "chunk-ef94f9e4": 1, "chunk-2bf9ff98": 1, "chunk-3aebcc64": 1, "chunk-682ab6fa": 1, "chunk-4aa0d228": 1, "chunk-a64e0e52": 1, "chunk-18941db8": 1, "chunk-30ffb292": 1, "chunk-12020c2c": 1, "chunk-1d40e4dd": 1, "chunk-323c09d9": 1, "chunk-93b86d00": 1, "chunk-945749a6": 1, "chunk-f123646c": 1, "chunk-f4f2ad3c": 1, "chunk-f57e2d4e": 1, "chunk-fa236cae": 1, "chunk-672f23a7": 1, "chunk-13307a08": 1, "chunk-65f4e680": 1, "chunk-a90b5ec2": 1, "chunk-58ca30db": 1, "chunk-17ac497c": 1, "chunk-43f4b4c2": 1, "chunk-8c99df8a": 1, "chunk-16bf884b": 1, "chunk-205588da": 1, "chunk-290573df": 1, "chunk-367520b4": 1, "chunk-574d5906": 1, "chunk-5b7f64e0": 1, "chunk-7a587c4b": 1, "chunk-9a76cd96": 1, "chunk-af945410": 1, "chunk-40383e0d": 1, "chunk-5de8bd5b": 1, "chunk-0a492a9e": 1, "chunk-271d5781": 1, "chunk-373aa27e": 1, "chunk-5bef02ba": 1, "chunk-40bf2235": 1, "chunk-72120114": 1, "chunk-7574e53d": 1, "chunk-8216af38": 1, "chunk-bd9a13f4": 1, "chunk-c5b153bc": 1, "chunk-c650ad2c": 1, "chunk-de7ba61a": 1, "chunk-ea6b50d4": 1, "chunk-f147a8c6": 1, "chunk-f78ebe08": 1, "chunk-0e3918da": 1, "chunk-0f22b2bb": 1, "chunk-17c1c66f": 1, "chunk-21d5d6a8": 1, "chunk-3676ddf3": 1, "chunk-3fdd08f9": 1, "chunk-4bc12aa0": 1, "chunk-51279394": 1, "chunk-60ffa822": 1, "chunk-71c7afb2": 1, "chunk-74ef81b5": 1, "chunk-8302281e": 1, "chunk-afecc83c": 1, "chunk-cbbb17ba": 1, "chunk-60080330": 1, "chunk-2095e530": 1, "chunk-37e71e41": 1, "chunk-3a86a2e4": 1, "chunk-0faebb97": 1, "chunk-235daef3": 1, "chunk-9ca2f668": 1, "chunk-7f0ea486": 1, "chunk-d91c071a": 1, "chunk-34243c32": 1, "chunk-60ff175e": 1, "chunk-682a93d8": 1, "chunk-715531ab": 1, "chunk-6ea7e65e": 1, "chunk-0c330e08": 1, "chunk-56ab77f4": 1, "chunk-0a8b10c2": 1, "chunk-0c63bb80": 1, "chunk-11d9dd90": 1, "chunk-14ed0682": 1, "chunk-17b33bc0": 1, "chunk-20e7ee1e": 1, "chunk-212be834": 1, "chunk-24bbfe3b": 1, "chunk-30e26798": 1, "chunk-47754068": 1, "chunk-62468f97": 1, "chunk-6587a5a1": 1, "chunk-6a66aaa2": 1, "chunk-785f1f55": 1, "chunk-7a6cd5d6": 1, "chunk-a854f2cc": 1, "chunk-b1f2bf3c": 1, "chunk-caa4d928": 1, "chunk-4587ca1a": 1, "chunk-6760b026": 1 }; h[c] ? n.push(h[c]) : 0 !== h[c] && u[c] && n.push(h[c] = new Promise((function(n, u) { for (var e = "static/css/" + ({ "chunk-commons": "chunk-commons" }[c] || c) + "." + { "chunk-00155f4b": "efb80868", "chunk-f81359d0": "31d6cfe0", "chunk-038e78f2": "72512a64", "chunk-0548fa25": "598c5892", "chunk-073daa90": "31d6cfe0", "chunk-09163dd7": "9e7b12ca", "chunk-0b4570f8": "da86bf60", "chunk-0b500cce": "dd0e66f6", "chunk-0bbeb896": "0e1f54b4", "chunk-0ca7c584": "391ecfbb", "chunk-133a2b06": "31d6cfe0", "chunk-171dca47": "b4e9b1c2", "chunk-18cd25b5": "79d6279b", "chunk-1dbfb2ca": "e04f6507", "chunk-22d38d01": "c5280cc0", "chunk-24bd6642": "270c1406", "chunk-251ac763": "155818e9", "chunk-4b109e82": "95b4329c", "chunk-2c4fe7ee": "31d6cfe0", "chunk-f3b28598": "9a3e200e", "chunk-2d0d385a": "31d6cfe0", "chunk-54dce028": "31eebf62", "chunk-7eeef8c6": "334eca6b", "chunk-2d0d641d": "31d6cfe0", "chunk-2d2105d3": "31d6cfe0", "chunk-2d21ead9": "31d6cfe0", "chunk-e31a7778": "31d6cfe0", "chunk-78a58ce0": "31d6cfe0", "chunk-120f25a4": "b86a2a21", "chunk-2d222919": "31d6cfe0", "chunk-2d230c70": "31d6cfe0", "chunk-2d230fe7": "31d6cfe0", "chunk-2d8ba231": "17da5e6c", "chunk-2f617b25": "31d6cfe0", "chunk-545581c4": "132263cc", "chunk-2f90d8f0": "f425b586", "chunk-3142d3bc": "31d6cfe0", "chunk-31a04132": "768f2852", "chunk-37abbf52": "65ea1a12", "chunk-381feb46": "ea3087ab", "chunk-3aa7734e": "16f95cc2", "chunk-3afe39af": "81f8ec42", "chunk-477132e2": "31d6cfe0", "chunk-4794904a": "31d6cfe0", "chunk-9c7039ee": "31d6cfe0", "chunk-430384fb": "0f0411d7", "chunk-4a3d12ba": "8648ae2f", "chunk-f69cf13a": "31d6cfe0", "chunk-4884f80c": "32249d6c", "chunk-4961c0a8": "31d6cfe0", "chunk-4a573df5": "236fba29", "chunk-50e135d2": "31d6cfe0", "chunk-50f5e21c": "d30d30e3", "chunk-5410d1b2": "31d6cfe0", "chunk-0fcb1caa": "6f5df861", "chunk-11ea4519": "1ba7912b", "chunk-23f89548": "4337b79e", "chunk-7066f7a4": "77a6fe0b", "chunk-264ceee0": "ac5e177a", "chunk-2d0cbebe": "31d6cfe0", "chunk-726b8536": "31d6cfe0", "chunk-1b4a54c2": "c47e57e5", "chunk-1fb382d5": "57638d85", "chunk-46155390": "d78fed00", "chunk-56244582": "a03c16ca", "chunk-b5fa86a8": "84cc65c6", "chunk-2d247d82": "03516457", "chunk-31d4889a": "352b290b", "chunk-48966bf8": "1ba7912b", "chunk-4ea24402": "1ba7912b", "chunk-594ba360": "77a6fe0b", "chunk-61ff399e": "3a5bfddd", "chunk-652f2b55": "68a799ab", "chunk-654588bb": "34fe4b92", "chunk-6a660020": "1ba7912b", "chunk-6e87ca78": "31d6cfe0", "chunk-1c55cc64": "6b367069", "chunk-1153a3ae": "8ce80f0e", "chunk-675f6070": "a1332a43", "chunk-b2237dc8": "d8edb731", "chunk-c187c814": "31d6cfe0", "chunk-57638791": "597264d1", "chunk-71ef2ed8": "77a6fe0b", "chunk-06940b2f": "97b1e825", "chunk-fd4bd9e4": "8c3e2de9", "chunk-2577c36d": "cda2ff56", "chunk-1548bb5e": "c47e57e5", "chunk-287ae9c7": "3d612daf", "chunk-4fd8d347": "77a6fe0b", "chunk-317d59de": "2fdd5f37", "chunk-4235d6f1": "77a6fe0b", "chunk-4422d324": "77a6fe0b", "chunk-72d1b198": "63050db6", "chunk-ec497ea8": "499ab90f", "chunk-1f310d91": "b3c41852", "chunk-d3b3a4c0": "69999728", "chunk-55fa8644": "9992c072", "chunk-9153473e": "77a6fe0b", "chunk-5fd680e6": "4f5e1a8f", "chunk-662e0c60": "77a6fe0b", "chunk-62344ab0": "ffec1b7c", "chunk-81bf9dcc": "e2d690a2", "chunk-bdcedaca": "d5c08fb8", "chunk-d514d152": "77a6fe0b", "chunk-f17d0dd2": "883024f2", "chunk-77ec7d56": "ae489c5b", "chunk-8c85fabc": "1ba7912b", "chunk-8f383ba4": "40257cfc", "chunk-a1aa28a4": "8769f8e8", "chunk-ed1821d6": "c414a504", "chunk-0a5b7b24": "77a6fe0b", "chunk-f13d06fc": "77a6fe0b", "chunk-56a54792": "2d2cae9d", "chunk-58157c1c": "334eca6b", "chunk-585cd5cc": "31d6cfe0", "chunk-5a3ea4f3": "b9a2f72a", "chunk-63740e52": "7bf94bfe", "chunk-c9ad6fbc": "4e726ecf", "chunk-6ce0bad4": "31d6cfe0", "chunk-2159e022": "e1a3baa4", "chunk-71259396": "c446bf6b", "chunk-719b43aa": "ea24c8d1", "chunk-724a9633": "31d6cfe0", "chunk-039fe120": "998c3230", "chunk-06175d58": "fcd862a3", "chunk-1f2a4c90": "2eab9828", "chunk-21dfcdbe": "bc448a7d", "chunk-28180124": "c0f51fa7", "chunk-2d2101ff": "31d6cfe0", "chunk-4659744c": "1963b13b", "chunk-3d269f11": "b4833ffb", "chunk-3093f414": "1e0f9679", "chunk-50b00630": "4813a5e0", "chunk-77eacaec": "7463e478", "chunk-39ca7086": "31d6cfe0", "chunk-9873b59a": "473218f9", "chunk-0a14db2e": "38fdf1ae", "chunk-0ed204c4": "11f87e0f", "chunk-4a11df6c": "d73a22e9", "chunk-51edc778": "bf5ecf86", "chunk-5c45f974": "ca44c15f", "chunk-79ba38e3": "b9b98c55", "chunk-f452313e": "35c4216e", "chunk-fc9a2a9e": "2d340671", "chunk-9d34eedc": "ea9d7465", "chunk-b900ad98": "e4f3b6ac", "chunk-c8fddb6a": "d316e025", "chunk-72abef28": "b505366b", "chunk-6331f36e": "2fe0797e", "chunk-736d3dbc": "6c95ec7a", "chunk-75bb6ef8": "676cfe44", "chunk-7658eaca": "e00671c0", "chunk-788cd71c": "7891dff6", "chunk-797eb7e4": "395cfa4d", "chunk-7be33868": "e5acdd1f", "chunk-7cdf79bc": "d59bf4a8", "chunk-8116ecf6": "f079f8be", "chunk-89824c98": "31d6cfe0", "chunk-95200f10": "31d6cfe0", "chunk-a9051134": "aca8daba", "chunk-ac459d52": "d55b7e4f", "chunk-b1c4a05a": "31d6cfe0", "chunk-b3942c98": "31d6cfe0", "chunk-0d4c55a4": "31d6cfe0", "chunk-7c5fed2f": "07ce0f36", "chunk-bb42af12": "13821f5e", "chunk-c7722330": "31d6cfe0", "chunk-commons": "fbf3713c", "chunk-0441ac18": "54e414c9", "chunk-95279b24": "656eb2c6", "chunk-d6f3491c": "b395342d", "chunk-d711add8": "31d6cfe0", "chunk-dab226c4": "843c4e93", "chunk-e10f4fba": "31d6cfe0", "chunk-0d15f7df": "c3267692", "chunk-0ff1ff25": "c8a2c558", "chunk-74eeaf86": "9eb8ff59", "chunk-66043168": "a9b9288d", "chunk-72b72a35": "0fd9d414", "chunk-e9f73c82": "f711e473", "chunk-ef94f9e4": "bf7ab86c", "chunk-2d0aa5b8": "31d6cfe0", "chunk-2bf9ff98": "bfadeb90", "chunk-3aebcc64": "b4b18e20", "chunk-682ab6fa": "d6012331", "chunk-4aa0d228": "f9af7e0d", "chunk-a64e0e52": "45e14f52", "chunk-18941db8": "bc1a0a68", "chunk-30ffb292": "45991aed", "chunk-12020c2c": "ab0c1f0a", "chunk-1d40e4dd": "40fd4f45", "chunk-323c09d9": "d306a139", "chunk-93b86d00": "24769430", "chunk-945749a6": "30e567d4", "chunk-f123646c": "16988035", "chunk-f31dd558": "31d6cfe0", "chunk-f4f2ad3c": "97e81b57", "chunk-72a81207": "31d6cfe0", "chunk-f57e2d4e": "b287fdc0", "chunk-fa236cae": "a04e5f74", "chunk-672f23a7": "f00e47ca", "chunk-13307a08": "06894799", "chunk-03236f46": "31d6cfe0", "chunk-65f4e680": "14ab602b", "chunk-a90b5ec2": "3adbfa33", "chunk-58ca30db": "14ab602b", "chunk-17ac497c": "cabf8644", "chunk-2d0b9654": "31d6cfe0", "chunk-2d2082c5": "31d6cfe0", "chunk-2d22cce3": "31d6cfe0", "chunk-43f4b4c2": "e2ea3846", "chunk-5e12deb6": "31d6cfe0", "chunk-8c99df8a": "dc1b4b2d", "chunk-2d0c8293": "31d6cfe0", "chunk-16bf884b": "1c199aab", "chunk-205588da": "99e92ba7", "chunk-290573df": "5696a6bc", "chunk-2d0bdda3": "31d6cfe0", "chunk-367520b4": "692cc3c0", "chunk-3a5fd6b2": "31d6cfe0", "chunk-574d5906": "28bd60f7", "chunk-5b7f64e0": "3c5dc4a9", "chunk-7a587c4b": "fa56de35", "chunk-9a76cd96": "39791aae", "chunk-af945410": "4813a5e0", "chunk-2d0c8dc6": "31d6cfe0", "chunk-40383e0d": "77a6fe0b", "chunk-5de8bd5b": "77a6fe0b", "chunk-0a492a9e": "1701615c", "chunk-271d5781": "38bf1392", "chunk-373aa27e": "06eb5d35", "chunk-5bef02ba": "41abc115", "chunk-40bf2235": "510057de", "chunk-72120114": "8e9f7fb0", "chunk-7574e53d": "4869a7c8", "chunk-8216af38": "69d5a781", "chunk-bd9a13f4": "c90d3d98", "chunk-c5b153bc": "f3bbb0e3", "chunk-2d0e268a": "31d6cfe0", "chunk-c650ad2c": "c5a01041", "chunk-de7ba61a": "edb7439b", "chunk-ea6b50d4": "e53f9a09", "chunk-f147a8c6": "32bfb1ed", "chunk-f78ebe08": "a11a3eb0", "chunk-0e3918da": "e22b9abb", "chunk-0f22b2bb": "01500157", "chunk-17c1c66f": "76dd0a0f", "chunk-21d5d6a8": "d8556479", "chunk-3676ddf3": "5487c7ed", "chunk-3fdd08f9": "34409961", "chunk-4bc12aa0": "8d1f6862", "chunk-51279394": "67a68854", "chunk-60ffa822": "730b0e66", "chunk-71c7afb2": "4e1ee5b8", "chunk-74ef81b5": "82a2abb0", "chunk-8302281e": "4ed4dce5", "chunk-afecc83c": "a2a56ee9", "chunk-cbbb17ba": "ab5a9bb3", "chunk-60080330": "827831de", "chunk-2095e530": "1c199aab", "chunk-2d0d3836": "31d6cfe0", "chunk-37e71e41": "1c199aab", "chunk-3a86a2e4": "cee6f567", "chunk-2d0f042f": "31d6cfe0", "chunk-0faebb97": "f00e47ca", "chunk-cd990dce": "31d6cfe0", "chunk-235daef3": "692cc3c0", "chunk-30b3a146": "31d6cfe0", "chunk-9ca2f668": "6b9282b2", "chunk-7f0ea486": "63a68660", "chunk-2d0d3648": "31d6cfe0", "chunk-d91c071a": "3c5dc4a9", "chunk-6b5b0490": "31d6cfe0", "chunk-34243c32": "d65ca7e4", "chunk-66d8764a": "31d6cfe0", "chunk-7e58d3ae": "31d6cfe0", "chunk-f759893a": "31d6cfe0", "chunk-60ff175e": "b98d35d7", "chunk-682a93d8": "30c4b139", "chunk-715531ab": "9069d973", "chunk-2d0db21b": "31d6cfe0", "chunk-78d80fca": "31d6cfe0", "chunk-3d705ea0": "31d6cfe0", "chunk-6ea7e65e": "bff248e4", "chunk-0c330e08": "14ab602b", "chunk-56ab77f4": "14ab602b", "chunk-66bc5ec2": "31d6cfe0", "chunk-0a8b10c2": "c19e507e", "chunk-0c63bb80": "a2918439", "chunk-11d9dd90": "3b9d48df", "chunk-14ed0682": "3ea2d569", "chunk-17b33bc0": "e7e36324", "chunk-20e7ee1e": "65d110a8", "chunk-212be834": "e5159fa3", "chunk-24bbfe3b": "6b49bf99", "chunk-30e26798": "10a12de6", "chunk-47754068": "40ee821b", "chunk-62468f97": "4029ca3e", "chunk-6587a5a1": "b395342d", "chunk-6a66aaa2": "13508ba1", "chunk-785f1f55": "ab705e54", "chunk-7a6cd5d6": "e921e4f0", "chunk-a854f2cc": "e35b9326", "chunk-b1f2bf3c": "89e1317d", "chunk-caa4d928": "7b9ea42e", "chunk-4587ca1a": "73ac6ab5", "chunk-04a2bc5c": "31d6cfe0", "chunk-2e4d0aa8": "31d6cfe0", "chunk-4d6117d2": "31d6cfe0", "chunk-6760b026": "8642680d", "chunk-2d2084bb": "31d6cfe0" }[c] + ".css", k = f.p + e, a = document.getElementsByTagName("link"), d = 0; d < a.length; d++) { var b = a[d] , t = b.getAttribute("data-href") || b.getAttribute("href"); if ("stylesheet" === b.rel && (t === e || t === k)) return n() } var r = document.getElementsByTagName("style"); for (d = 0; d < r.length; d++) { b = r[d], t = b.getAttribute("data-href"); if (t === e || t === k) return n() } var o = document.createElement("link"); o.rel = "stylesheet", o.type = "text/css", o.onload = n, o.onerror = function(n) { var e = n && n.target && n.target.src || k , a = new Error("Loading CSS chunk " + c + " failed.\n(" + e + ")"); a.request = e, delete h[c], o.parentNode.removeChild(o), u(a) } , o.href = k; var i = document.getElementsByTagName("head")[0]; i.appendChild(o) } )).then((function() { h[c] = 0 } ))); var e = k[c]; if (0 !== e) if (e) n.push(e[2]); else { var a = new Promise((function(n, u) { e = k[c] = [n, u] } )); n.push(e[2] = a); var b, t = document.createElement("script"); t.charset = "utf-8", t.timeout = 120, f.nc && t.setAttribute("nonce", f.nc), t.src = d(c), b = function(n) { t.onerror = t.onload = null, clearTimeout(r); var u = k[c]; if (0 !== u) { if (u) { var e = n && ("load" === n.type ? "missing" : n.type) , h = n && n.target && n.target.src , a = new Error("Loading chunk " + c + " failed.\n(" + e + ": " + h + ")"); a.type = e, a.request = h, u[1](a) } k[c] = void 0 } } ; var r = setTimeout((function() { b({ type: "timeout", target: t }) } ), 12e4); t.onerror = t.onload = b, document.head.appendChild(t) } return Promise.all(n) } , f.m = c, f.c = e, f.d = function(c, n, u) { f.o(c, n) || Object.defineProperty(c, n, { enumerable: !0, get: u }) } , f.r = function(c) { "undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(c, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(c, "__esModule", { value: !0 }) } , f.t = function(c, n) { if (1 & n && (c = f(c)), 8 & n) return c; if (4 & n && "object" === typeof c && c && c.__esModule) return c; var u = Object.create(null); if (f.r(u), Object.defineProperty(u, "default", { enumerable: !0, value: c }), 2 & n && "string" != typeof c) for (var e in c) f.d(u, e, function(n) { return c[n] } .bind(null, e)); return u } , f.n = function(c) { var n = c && c.__esModule ? function() { return c["default"] } : function() { return c } ; return f.d(n, "a", n), n } , f.o = function(c, n) { return Object.prototype.hasOwnProperty.call(c, n) } , f.p = "/pxf-settlement-outnetpub/", f.oe = function(c) { throw console.error(c), c } ; var b = window["webpackJsonp"] = window["webpackJsonp"] || [] , t = b.push.bind(b); b.push = n, b = b.slice(); for (var r = 0; r < b.length; r++) n(b[r]); var o = t; u() } )({ c99b: function(e, t, r) { "use strict"; function n(e) { return n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { return typeof e } : function(e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e } , n(e) } var o; r.d(t, "g", (function() { return H } )), r.d(t, "f", (function() { return N } )), r.d(t, "b", (function() { return Dr } )), r.d(t, "c", (function() { return Fr } )), r.d(t, "a", (function() { return Pr } )), r.d(t, "e", (function() { return Or } )), r.d(t, "d", (function() { return Ir } )), r.d(t, "h", (function() { return Hr } )); var i = navigator.userAgent , a = i.indexOf("compatible") > -1 && i.indexOf("MSIE") > -1 , l = i.indexOf("Trident") > -1 && i.indexOf("rv:11.0") > -1; o = a || l ? window.msCrypto : window.crypto; var s = function() { return this.parseUTF8 = function(e) { e = unescape(encodeURIComponent(e)); for (var t = e.length, r = [], n = 0; n < t; n++) r[n >>> 2] |= (255 & e.charCodeAt(n)) << 24 - n % 4 * 8; return new c(r,t) } , this.stringifyUTF8 = function(e) { try { for (var t, r = decodeURIComponent, n = escape, o = e.words, i = e.sigBytes, a = (e = [], 0); a < i; a++) { var l = o[a >>> 2] >>> 24 - a % 4 * 8 & 255; 0 != l && e.push(String.fromCharCode(l)) } return t = e.join(""), r(n(t)) } catch (s) { throw Error("Malformed UTF-8 data") } } , this.HexParse = function(e) { for (var t = e.length, r = [], n = 0; n < t; n += 2) r[n >>> 3] |= parseInt(e.substr(n, 2), 16) << 24 - n % 8 * 4; return new c(r,t / 2) } , this.HexStringify = function(e) { for (var t = e.words, r = (e = e.sigBytes, []), n = 0; n < e; n++) { var o = t[n >>> 2] >>> 24 - n % 4 * 8 & 255; r.push((o >>> 4).toString(16)), r.push((15 & o).toString(16)) } return r.join("") } , this } , c = function(e, t) { return this.words = e || [], this.sigBytes = void 0 != t ? t : 4 * e.length, this.getArrs = function() { return this.words } , this } , u = 0xdeadbeefcafe , d = 15715070 == (16777215 & u) , A = 52 , p = "0123456789abcdefghijklmnopqrstuvwxyz" , g = []; for (Q = "0".charCodeAt(0), G = 0; G <= 9; ++G) g[Q++] = G; for (Q = "a".charCodeAt(0), G = 10; G < 36; ++G) g[Q++] = G; for (Q = "A".charCodeAt(0), G = 10; G < 36; ++G) g[Q++] = G; function f(e) { return p.charAt(e) } function h(e, t) { var r = g[e.charCodeAt(t)]; return null == r ? -1 : r } function b() { var e = navigator.userAgent , t = (e.indexOf("Opera"), e.indexOf("compatible") > -1 && e.indexOf("MSIE") > -1) , r = e.indexOf("Edge") > -1 && !t , n = e.indexOf("Trident") > -1 && e.indexOf("rv:11.0") > -1 , o = e.indexOf("Firefox") > -1 , i = (e.indexOf("Safari"), e.indexOf("Chrome") > -1); return r ? "edge" : n ? "IE11" : o || i ? "FF" : void 0 } var m = function() { function e(e) { r[n++] ^= 255 & e, r[n++] ^= e >> 8 & 255, r[n++] ^= e >> 16 & 255, r[n++] ^= e >> 24 & 255, n >= i && (n -= i) } var t, r, n, i = 256; if (null == r) { var a; for (r = [], n = 0; n < i; ) o && (a = Math.floor(65536 * o.getRandomValues(new Uint8Array(1)) * .001), r[n++] = a >>> 8, r[n++] = 255 & a); if ("FF" == b() && o) { var l = new ArrayBuffer(32) , s = new Int8Array(l); for (o && o.getRandomValues(s), a = 0; a < s.length; ++a) r[a] = 255 & s[a] } else if ("IE11" == b()) { l = new ArrayBuffer(32), s = new Int8Array(l); var c = o || o; for (o && c.getRandomValues(s), a = 0; a < s.length; ++a) r[a] = 255 & s[a] } else if ("edge" == b()) { l = new ArrayBuffer(32), s = new Int8Array(l), c = o || o; for (o && c.getRandomValues(s), a = 0; a < s.length; ++a) r[a] = 255 & s[a] } n = 0, e((new Date).getTime()) } this.nextBytes = function(o) { for (var i = 0; i < o.length; ++i) { var a, l = o, s = i; if (null == t) { for (e((new Date).getTime()), t = new w, t.init(r), n = 0; n < r.length; ++n) r[n] = 0; n = 0 } a = t.next(), l[s] = a } } } , w = function() { this.j = this.i = 0, this.S = [], this.init = function(e) { for (var t, r, n = 0; n < 256; ++n) this.S[n] = n; for (n = t = 0; n < 256; ++n) t = t + this.S[n] + e[n % e.length] & 255, r = this.S[n], this.S[n] = this.S[t], this.S[t] = r; this.j = this.i = 0 } , this.next = function() { var e; return this.i = this.i + 1 & 255, this.j = this.j + this.S[this.i] & 255, e = this.S[this.i], this.S[this.i] = this.S[this.j], this.S[this.j] = e, this.S[e + this.S[this.i] & 255] } } , v = function(e, t) { this.x = t, this.q = e }; Array.Clear = function(e) { for (var t in e) e[t] = null } , Array.Copy = function(e, t, r, n, o) { for (e = e.slice(t, t + o), t = 0; t < e.length; t++) r[n] = e[t], n++ } , window.Int32 = { minValue: -parseInt("10000000000000000000000000000000", 2), maxValue: parseInt("1111111111111111111111111111111", 2), parse: function(e) { if (e < this.minValue) { e = new Number(-e), e = e.toString(2), e = e.substr(e.length - 31, 31); for (var t = "", r = 0; r < e.length; r++) { var n = e.substr(r, 1); t += "0" == n ? "1" : "0" } return e = parseInt(t, 2), e + 1 } if (e > this.maxValue) { for (e = Number(e).toString(2), e = e.substr(e.length - 31, 31), t = "", r = 0; r < e.length; r++) n = e.substr(r, 1), t += "0" == n ? "1" : "0"; return e = parseInt(t, 2), -(e + 1) } return e }, parseByte: function(e) { if (e < 0) { e = new Number(-e), e = e.toString(2), e = e.substr(e.length - 8, 8); for (var t = "", r = 0; r < e.length; r++) { var n = e.substr(r, 1); t += "0" == n ? "1" : "0" } return parseInt(t, 2) + 1 } return e > 255 ? (e = Number(e).toString(2), parseInt(e.substr(e.length - 8, 8), 2)) : e } }, "undefined" !== typeof Gt && Gt || (Gt = {}), "undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {}), "undefined" !== typeof Gt && Gt || (Gt = {}), "undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {}); var x = [[214, 144, 233, 254, 204, 225, 61, 183, 22, 182, 20, 194, 40, 251, 44, 5], [43, 103, 154, 118, 42, 190, 4, 195, 170, 68, 19, 38, 73, 134, 6, 153], [156, 66, 80, 244, 145, 239, 152, 122, 51, 84, 11, 67, 237, 207, 172, 98], [228, 179, 28, 169, 201, 8, 232, 149, 128, 223, 148, 250, 117, 143, 63, 166], [71, 7, 167, 252, 243, 115, 23, 186, 131, 89, 60, 25, 230, 133, 79, 168], [104, 107, 129, 178, 113, 100, 218, 139, 248, 235, 15, 75, 112, 86, 157, 53], [30, 36, 14, 94, 99, 88, 209, 162, 37, 34, 124, 59, 1, 33, 120, 135], [212, 0, 70, 87, 159, 211, 39, 82, 76, 54, 2, 231, 160, 196, 200, 158], [234, 191, 138, 210, 64, 199, 56, 181, 163, 247, 242, 206, 249, 97, 21, 161], [224, 174, 93, 164, 155, 52, 26, 85, 173, 147, 50, 48, 245, 140, 177, 227], [29, 246, 226, 46, 130, 102, 202, 96, 192, 41, 35, 171, 13, 83, 78, 111], [213, 219, 55, 69, 222, 253, 142, 47, 3, 255, 106, 114, 109, 108, 91, 81], [141, 27, 175, 146, 187, 221, 188, 127, 17, 217, 92, 65, 31, 16, 90, 216], [10, 193, 49, 136, 165, 205, 123, 189, 45, 116, 208, 18, 184, 229, 180, 176], [137, 105, 151, 74, 12, 150, 119, 126, 101, 185, 241, 9, 197, 110, 198, 132], [24, 240, 125, 236, 58, 220, 77, 32, 121, 238, 95, 62, 215, 203, 57, 72]] , y = [462357, 472066609, 943670861, 1415275113, 1886879365, 2358483617, 2830087869, 3301692121, 3773296373, 4228057617, 404694573, 876298825, 1347903077, 1819507329, 2291111581, 2762715833, 3234320085, 3705924337, 4177462797, 337322537, 808926789, 1280531041, 1752135293, 2223739545, 2695343797, 3166948049, 3638552301, 4110090761, 269950501, 741554753, 1213159005, 1684763257] , B = [2746333894, 1453994832, 1736282519, 2993693404]; function C(e, t) { return e ^ t } function E(e, t) { return t %= 32, e << t | e >>> 32 - t } function k(e) { return x[(4026531840 & e) >>> 28][(251658240 & e) >>> 24] << 24 | x[(15728640 & e) >>> 20][(983040 & e) >>> 16] << 16 | x[(61440 & e) >>> 12][(3840 & e) >>> 8] << 8 | x[(240 & e) >>> 4][(15 & e) >>> 0] << 0 } function D(e) { return e = k(e), C(C(C(e, E(e, 2)), C(E(e, 10), E(e, 18))), E(e, 24)) } function F(e) { return e = k(e), C(e, C(E(e, 13), E(e, 23))) } function P(e) { var t = [] , r = []; for (t[0] = C(e[0], B[0]), t[1] = C(e[1], B[1]), t[2] = C(e[2], B[2]), t[3] = C(e[3], B[3]), e = 0; e < 32; e++) t[e + 4] = C(t[e], F(C(C(t[e + 1], t[e + 2]), C(t[e + 3], y[e])))), r[e] = t[e + 4].toString(16); return r } function O(e, t) { for (var r = Math.ceil(e.length / 4), n = [], o = 0; o < r; o++) { for (var i = e.slice(4 * o, 4 * (o + 1)), a = P(t), l = 0; l < 32; l++) i[l + 4] = C(i[l], D(C(C(i[l + 1], i[l + 2]), C(i[l + 3], parseInt(a[l], 16))))); n = n.concat([i[35].toString(10), i[34].toString(10), i[33].toString(10), i[32].toString(10)]) } return new c(n) } function I(e, t) { for (var r = Math.ceil(e.length / 4), n = [], o = 0; o < r; o++) { for (var i = e.slice(4 * o, 4 * (o + 1)), a = P(t), l = [], s = a.length - 1; s >= 0; s--) l[a.length - 1 - s] = a[s]; for (s = 0; s < 32; s++) i[s + 4] = C(i[s], D(C(C(i[s + 1], i[s + 2]), C(i[s + 3], parseInt(l[s], 16))))); n = n.concat([i[35].toString(10), i[34].toString(10), i[33].toString(10), i[32].toString(10)]) } return new c(n) } function H(e, t) { if (void 0 != e && void 0 != t && "" != e && "" != t) { var r = new s , n = O(r.parseUTF8(e).getArrs(), r.HexParse(t).getArrs()); return r.HexStringify(n) } } function N(e, t) { if (void 0 != e && void 0 != t && "" != e && "" != t) { var r = new s , n = r.HexParse(e); r = r.HexParse(t), n = I(n.getArrs(), r.getArrs()); return (new s).stringifyUTF8(n) } } var L, S = S || function(e, t) { var r = {} , n = r.lib = {} , o = n.Base = function() { function e() {} return { extend: function(t) { e.prototype = this; var r = new e; return t && r.mixIn(t), r.hasOwnProperty("init") || (r.init = function() { r.$super.init.apply(this, arguments) } ), r.init.prototype = r, r.$super = this, r }, create: function() { var e = this.extend(); return e.init.apply(e, arguments), e }, init: function() {}, mixIn: function(e) { for (var t in e) e.hasOwnProperty(t) && (this[t] = e[t]); e.hasOwnProperty("toString") && (this.toString = e.toString) }, clone: function() { return this.init.prototype.extend(this) } } }() , i = n.WordArray = o.extend({ init: function(e, r) { e = this.words = e || [], this.sigBytes = r != t ? r : 4 * e.length }, toString: function(e) { return (e || l).stringify(this) }, concat: function(e) { var t = this.words , r = e.words , n = this.sigBytes , o = e.sigBytes; if (this.clamp(), n % 4) for (var i = 0; i < o; i += 1) { var a = r[i >>> 2] >>> 24 - i % 4 * 8 & 255; t[n + i >>> 2] |= a << 24 - (n + i) % 4 * 8 } else if (r.length > 65535) for (i = 0; i < o; i += 4) t[n + i >>> 2] = r[i >>> 2]; else t.push.apply(t, r); return this.sigBytes += o, this }, clamp: function() { var t = this.words , r = this.sigBytes; t[r >>> 2] &= 4294967295 << 32 - r % 4 * 8, t.length = e.ceil(r / 4) }, clone: function() { var e = o.clone.call(this); return e.words = this.words.slice(0), e }, random: function(t) { for (var r = [], n = 0; n < t; n += 4) r.push(4294967296 * e.random() | 0); return new i.init(r,t) } }) , a = r.enc = {} , l = a.Hex = { stringify: function(e) { for (var t = e.words, r = e.sigBytes, n = [], o = 0; o < r; o += 1) { var i = t[o >>> 2] >>> 24 - o % 4 * 8 & 255; n.push((i >>> 4).toString(16)), n.push((15 & i).toString(16)) } return n.join("") }, parse: function(e) { for (var t = e.length, r = [], n = 0; n < t; n += 2) r[n >>> 3] |= parseInt(e.substr(n, 2), 16) << 24 - n % 8 * 4; return new i.init(r,t / 2) } } , s = a.Latin1 = { stringify: function(e) { for (var t = e.words, r = e.sigBytes, n = [], o = 0; o < r; o += 1) { var i = t[o >>> 2] >>> 24 - o % 4 * 8 & 255; n.push(String.fromCharCode(i)) } return n.join("") }, parse: function(e) { for (var t = e.length, r = [], n = 0; n < t; n += 1) r[n >>> 2] |= (255 & e.charCodeAt(n)) << 24 - n % 4 * 8; return new i.init(r,t) } } , c = a.Utf8 = { stringify: function(e) { try { return decodeURIComponent(escape(s.stringify(e))) } catch (t) { throw new Error("Malformed UTF-8 data") } }, parse: function(e) { return s.parse(unescape(encodeURIComponent(e))) } } , u = n.BufferedBlockAlgorithm = o.extend({ reset: function() { this._data = new i.init, this._nDataBytes = 0 }, _append: function(e) { "string" === typeof e && (e = c.parse(e)), this._data.concat(e), this._nDataBytes += e.sigBytes }, _process: function(t) { var r = this._data , n = r.words , o = r.sigBytes , a = this.blockSize , l = 4 * a , s = o / l; s = t ? e.ceil(s) : e.max((0 | s) - this._minBufferSize, 0); var c = s * a , u = e.min(4 * c, o); if (c) { for (var d = 0; d < c; d += a) this._doProcessBlock(n, d); var A = n.splice(0, c); r.sigBytes -= u } return new i.init(A,u) }, clone: function() { var e = o.clone.call(this); return e._data = this._data.clone(), e }, _minBufferSize: 0 }) , d = (n.Hasher = u.extend({ cfg: o.extend(), init: function(e) { this.cfg = this.cfg.extend(e), this.reset() }, reset: function() { u.reset.call(this), this._doReset() }, update: function(e) { return this._append(e), this._process(), this }, finalize: function(e) { e && this._append(e); var t = this._doFinalize(); return t }, blockSize: 16, _createHelper: function(e) { return function(t, r) { return new e.init(r).finalize(t) } }, _createHmacHelper: function(e) { return function(t, r) { return new d.HMAC.init(e,r).finalize(t) } } }), r.algo = {}); return r }(Math); u = 0xdeadbeefcafe, d = 15715070 == (16777215 & u); function z(e, t, r) { null != e && ("number" === typeof e ? this.fromNumber(e, t, r) : null == t && "string" !== typeof e ? this.fromString(e, 256) : this.fromString(e, t)) } function Y() { return new z(null) } function M(e, t, r, n, o, i) { while (--i >= 0) { var a = t * this[e++] + r[n] + o; o = Math.floor(a / 67108864), r[n++] = 67108863 & a } return o } function X(e, t, r, n, o, i) { var a = 32767 & t , l = t >> 15; while (--i >= 0) { var s = 32767 & this[e] , c = this[e++] >> 15 , u = l * s + c * a; s = a * s + ((32767 & u) << 15) + r[n] + (1073741823 & o), o = (s >>> 30) + (u >>> 15) + l * c + (o >>> 30), r[n++] = 1073741823 & s } return o } function T(e, t, r, n, o, i) { var a = 16383 & t , l = t >> 14; while (--i >= 0) { var s = 16383 & this[e] , c = this[e++] >> 14 , u = l * s + c * a; s = a * s + ((16383 & u) << 14) + r[n] + o, o = (s >> 28) + (u >> 14) + l * c, r[n++] = 268435455 & s } return o } d && "Microsoft Internet Explorer" == navigator.appName ? (z.prototype.am = X, L = 30) : d && "Netscape" != navigator.appName ? (z.prototype.am = M, L = 26) : (z.prototype.am = T, L = 28), z.prototype.DB = L, z.prototype.DM = (1 << L) - 1, z.prototype.DV = 1 << L; A = 52; z.prototype.FV = Math.pow(2, A), z.prototype.F1 = A - L, z.prototype.F2 = 2 * L - A; var Q, G; p = "0123456789abcdefghijklmnopqrstuvwxyz", g = []; for (Q = "0".charCodeAt(0), G = 0; G <= 9; G += 1) g[Q++] = G; for (Q = "a".charCodeAt(0), G = 10; G < 36; G += 1) g[Q++] = G; for (Q = "A".charCodeAt(0), G = 10; G < 36; G += 1) g[Q++] = G; function j(e) { for (var t = this.t - 1; t >= 0; t -= 1) e[t] = this[t]; e.t = this.t, e.s = this.s } function R(e) { this.t = 1, this.s = e < 0 ? -1 : 0, e > 0 ? this[0] = e : e < -1 ? this[0] = e + this.DV : this.t = 0 } function V(e) { var t = Y(); return t.fromInt(e), t } function W(e, t) { var r; if (16 == t) r = 4; else if (8 == t) r = 3; else if (256 == t) r = 8; else if (2 == t) r = 1; else if (32 == t) r = 5; else { if (4 != t) return void this.fromRadix(e, t); r = 2 } this.t = 0, this.s = 0; var n = e.length , o = !1 , i = 0; while (--n >= 0) { var a = 8 == r ? 255 & e[n] : h(e, n); a < 0 ? "-" == e.charAt(n) && (o = !0) : (o = !1, 0 == i ? this[this.t++] = a : i + r > this.DB ? (this[this.t - 1] |= (a & (1 << this.DB - i) - 1) << i, this[this.t++] = a >> this.DB - i) : this[this.t - 1] |= a << i, i += r, i >= this.DB && (i -= this.DB)) } 8 == r && 0 != (128 & e[0]) && (this.s = -1, i > 0 && (this[this.t - 1] |= (1 << this.DB - i) - 1 << i)), this.clamp(), o && z.ZERO.subTo(this, this) } function U() { var e = this.s & this.DM; while (this.t > 0 && this[this.t - 1] == e) --this.t } function K(e) { if (this.s < 0) return "-" + this.negate().toString(e); var t; if (16 == e) t = 4; else if (8 == e) t = 3; else if (2 == e) t = 1; else if (32 == e) t = 5; else { if (4 != e) return this.toRadix(e); t = 2 } var r, n = (1 << t) - 1, o = !1, i = "", a = this.t, l = this.DB - a * this.DB % t; if (a-- > 0) { l < this.DB && (r = this[a] >> l) > 0 && (o = !0, i = f(r)); while (a >= 0) l < t ? (r = (this[a] & (1 << l) - 1) << t - l, r |= this[a -= 1] >> (l += this.DB - t)) : (r = this[a] >> (l -= t) & n, l <= 0 && (l += this.DB, a -= 1)), r > 0 && (o = !0), o && (i += f(r)) } return o ? i : "0" } function q() { var e = Y(); return z.ZERO.subTo(this, e), e } function Z() { return this.s < 0 ? this.negate() : this } function J(e) { var t = this.s - e.s; if (0 != t) return t; var r = this.t; if (t = r - e.t, 0 != t) return this.s < 0 ? -t : t; while (--r >= 0) if (0 != (t = this[r] - e[r])) return t; return 0 } function _(e) { var t, r = 1; return 0 != (t = e >>> 16) && (e = t, r += 16), 0 != (t = e >> 8) && (e = t, r += 8), 0 != (t = e >> 4) && (e = t, r += 4), 0 != (t = e >> 2) && (e = t, r += 2), 0 != (t = e >> 1) && (e = t, r += 1), r } function $() { return this.t <= 0 ? 0 : this.DB * (this.t - 1) + _(this[this.t - 1] ^ this.s & this.DM) } function ee(e, t) { var r; for (r = this.t - 1; r >= 0; r -= 1) t[r + e] = this[r]; for (r = e - 1; r >= 0; r -= 1) t[r] = 0; t.t = this.t + e, t.s = this.s } function te(e, t) { for (var r = e; r < this.t; r += 1) t[r - e] = this[r]; t.t = Math.max(this.t - e, 0), t.s = this.s } function re(e, t) { var r, n = e % this.DB, o = this.DB - n, i = (1 << o) - 1, a = Math.floor(e / this.DB), l = this.s << n & this.DM; for (r = this.t - 1; r >= 0; r -= 1) t[r + a + 1] = this[r] >> o | l, l = (this[r] & i) << n; for (r = a - 1; r >= 0; r -= 1) t[r] = 0; t[a] = l, t.t = this.t + a + 1, t.s = this.s, t.clamp() } function ne(e, t) { t.s = this.s; var r = Math.floor(e / this.DB); if (r >= this.t) t.t = 0; else { var n = e % this.DB , o = this.DB - n , i = (1 << n) - 1; t[0] = this[r] >> n; for (var a = r + 1; a < this.t; a += 1) t[a - r - 1] |= (this[a] & i) << o, t[a - r] = this[a] >> n; n > 0 && (t[this.t - r - 1] |= (this.s & i) << o), t.t = this.t - r, t.clamp() } } function oe(e, t) { var r = 0 , n = 0 , o = Math.min(e.t, this.t); while (r < o) n += this[r] - e[r], t[r++] = n & this.DM, n >>= this.DB; if (e.t < this.t) { n -= e.s; while (r < this.t) n += this[r], t[r++] = n & this.DM, n >>= this.DB; n += this.s } else { n += this.s; while (r < e.t) n -= e[r], t[r++] = n & this.DM, n >>= this.DB; n -= e.s } t.s = n < 0 ? -1 : 0, n < -1 ? t[r++] = this.DV + n : n > 0 && (t[r++] = n), t.t = r, t.clamp() } function ie(e, t) { var r = this.abs() , n = e.abs() , o = r.t; t.t = o + n.t; while (--o >= 0) t[o] = 0; for (o = 0; o < n.t; o += 1) t[o + r.t] = r.am(0, n[o], t, o, 0, r.t); t.s = 0, t.clamp(), this.s != e.s && z.ZERO.subTo(t, t) } function ae(e) { var t = this.abs() , r = e.t = 2 * t.t; while (--r >= 0) e[r] = 0; for (r = 0; r < t.t - 1; r += 1) { var n = t.am(r, t[r], e, 2 * r, 0, 1); (e[r + t.t] += t.am(r + 1, 2 * t[r], e, 2 * r + 1, n, t.t - r - 1)) >= t.DV && (e[r + t.t] -= t.DV, e[r + t.t + 1] = 1) } e.t > 0 && (e[e.t - 1] += t.am(r, t[r], e, 2 * r, 0, 1)), e.s = 0, e.clamp() } function le(e, t, r) { var n = e.abs(); if (!(n.t <= 0)) { var o = this.abs(); if (o.t < n.t) return null != t && t.fromInt(0), void (null != r && this.copyTo(r)); null == r && (r = Y()); var i = Y() , a = this.s , l = e.s , s = this.DB - _(n[n.t - 1]); s > 0 ? (n.lShiftTo(s, i), o.lShiftTo(s, r)) : (n.copyTo(i), o.copyTo(r)); var c = i.t , u = i[c - 1]; if (0 != u) { var d = u * (1 << this.F1) + (c > 1 ? i[c - 2] >> this.F2 : 0) , A = this.FV / d , p = (1 << this.F1) / d , g = 1 << this.F2 , f = r.t , h = f - c , b = null == t ? Y() : t; i.dlShiftTo(h, b), r pareTo(b) >= 0 && (r[r.t++] = 1, r.subTo(b, r)), z.ONE.dlShiftTo(c, b), b.subTo(i, i); while (i.t < c) i[i.t++] = 0; while (--h >= 0) { var m = r[f -= 1] == u ? this.DM : Math.floor(r[f] * A + (r[f - 1] + g) * p); if ((r[f] += i.am(0, m, r, h, 0, c)) < m) { i.dlShiftTo(h, b), r.subTo(b, r); while (r[f] < --m) r.subTo(b, r) } } null != t && (r.drShiftTo(c, t), a != l && z.ZERO.subTo(t, t)), r.t = c, r.clamp(), s > 0 && r.rShiftTo(s, r), a < 0 && z.ZERO.subTo(r, r) } } } function se(e) { var t = Y(); return this.abs().divRemTo(e, null, t), this.s < 0 && t pareTo(z.ZERO) > 0 && e.subTo(t, t), t } function ce(e) { this.m = e } function ue(e) { return e.s < 0 || e pareTo(this.m) >= 0 ? e.mod(this.m) : e } function de(e) { return e } function Ae(e) { e.divRemTo(this.m, null, e) } function pe(e, t, r) { e.multiplyTo(t, r), this.reduce(r) } function ge(e, t) { e.squareTo(t), this.reduce(t) } function fe() { if (this.t < 1) return 0; var e = this[0]; if (0 == (1 & e)) return 0; var t = 3 & e; return t = t * (2 - (15 & e) * t) & 15, t = t * (2 - (255 & e) * t) & 255, t = t * (2 - ((65535 & e) * t & 65535)) & 65535, t = t * (2 - e * t % this.DV) % this.DV, t > 0 ? this.DV - t : -t } function he(e) { this.m = e, this.mp = e.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << e.DB - 15) - 1, this.mt2 = 2 * e.t } function be(e) { var t = Y(); return e.abs().dlShiftTo(this.m.t, t), t.divRemTo(this.m, null, t), e.s < 0 && t pareTo(z.ZERO) > 0 && this.m.subTo(t, t), t } function me(e) { var t = Y(); return e.copyTo(t), this.reduce(t), t } function we(e) { while (e.t <= this.mt2) e[e.t++] = 0; for (var t = 0; t < this.m.t; t += 1) { var r = 32767 & e[t] , n = r * this.mpl + ((r * this.mph + (e[t] >> 15) * this.mpl & this.um) << 15) & e.DM; r = t + this.m.t, e[r] += this.m.am(0, n, e, t, 0, this.m.t); while (e[r] >= e.DV) e[r] -= e.DV, e[r += 1] += 1 } e.clamp(), e.drShiftTo(this.m.t, e), e pareTo(this.m) >= 0 && e.subTo(this.m, e) } function ve(e, t) { e.squareTo(t), this.reduce(t) } function xe(e, t, r) { e.multiplyTo(t, r), this.reduce(r) } function ye() { return 0 == (this.t > 0 ? 1 & this[0] : this.s) } function Be(e, t) { if (e > 4294967295 || e < 1) return z.ONE; var r = Y() , n = Y() , o = t.convert(this) , i = _(e) - 1; o.copyTo(r); while (--i >= 0) if (t.sqrTo(r, n), (e & 1 << i) > 0) t.mulTo(n, o, r); else { var a = r; r = n, n = a } return t.revert(r) } function Ce(e, t) { var r; return r = e < 256 || t.isEven() ? new ce(t) : new he(t), this.exp(e, r) } function Ee() { var e = Y(); return this.copyTo(e), e } function ke() { if (this.s < 0) { if (1 == this.t) return this[0] - this.DV; if (0 == this.t) return -1 } else { if (1 == this.t) return this[0]; if (0 == this.t) return 0 } return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0] } function De() { return 0 == this.t ? this.s : this[0] << 24 >> 24 } function Fe() { return 0 == this.t ? this.s : this[0] << 16 >> 16 } function Pe(e) { return Math.floor(Math.LN2 * this.DB / Math.log(e)) } function Oe() { return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1 } function Ie(e) { if (null == e && (e = 10), 0 == this.signum() || e < 2 || e > 36) return "0"; var t = this.chunkSize(e) , r = Math.pow(e, t) , n = V(r) , o = Y() , i = Y() , a = ""; this.divRemTo(n, o, i); while (o.signum() > 0) a = (r + i.intValue()).toString(e).substr(1) + a, o.divRemTo(n, o, i); return i.intValue().toString(e) + a } function He(e, t) { this.fromInt(0), null == t && (t = 10); for (var r = this.chunkSize(t), n = Math.pow(t, r), o = !1, i = 0, a = 0, l = 0; l < e.length; l += 1) { var s = h(e, l); s < 0 ? "-" == e.charAt(l) && 0 == this.signum() && (o = !0) : (a = t * a + s, ++i >= r && (this.dMultiply(n), this.dAddOffset(a, 0), i = 0, a = 0)) } i > 0 && (this.dMultiply(Math.pow(t, i)), this.dAddOffset(a, 0)), o && z.ZERO.subTo(this, this) } function Ne(e, t, r) { if ("number" === typeof t) if (e < 2) this.fromInt(1); else { this.fromNumber(e, r), this.testBit(e - 1) || this.bitwiseTo(z.ONE.shiftLeft(e - 1), Qe, this), this.isEven() && this.dAddOffset(1, 0); while (!this.isProbablePrime(t)) this.dAddOffset(2, 0), this.bitLength() > e && this.subTo(z.ONE.shiftLeft(e - 1), this) } else { var n = [] , i = 7 & e; if (n.length = 1 + (e >> 3), t.nextBytes(n), i > 0 ? n[0] &= (1 << i) - 1 : n[0] = 0, "FF" == b() && o) { var a = new ArrayBuffer(32) , l = new Int8Array(a); for (o && o.getRandomValues(l), r = 0; r < l.length; ++r) n[r] = 255 & l[r] } else if ("IE11" == b()) { a = new ArrayBuffer(32), l = new Int8Array(a); var s = o || o; for (o && s.getRandomValues(l), r = 0; r < l.length; ++r) n[r] = 255 & l[r] } else if ("edge" == b()) { a = new ArrayBuffer(32), l = new Int8Array(a), s = o || o; for (o && s.getRandomValues(l), r = 0; r < l.length; ++r) n[r] = 255 & l[r] } this.fromString(n, 256) } } function Le() { var e = this.t , t = []; t[0] = this.s; var r, n = this.DB - e * this.DB % 8, o = 0; if (e-- > 0) { n < this.DB && (r = this[e] >> n) != (this.s & this.DM) >> n && (t[o++] = r | this.s << this.DB - n); while (e >= 0) n < 8 ? (r = (this[e] & (1 << n) - 1) << 8 - n, r |= this[e -= 1] >> (n += this.DB - 8)) : (r = this[e] >> (n -= 8) & 255, n <= 0 && (n += this.DB, e -= 1)), 0 != (128 & r) && (r |= -256), 0 == o && (128 & this.s) != (128 & r) && ++o, (o > 0 || r != this.s) && (t[o++] = r) } return t } function Se(e) { return 0 == this pareTo(e) } function ze(e) { return this pareTo(e) < 0 ? this : e } function Ye(e) { return this pareTo(e) > 0 ? this : e } function Me(e, t, r) { var n, o, i = Math.min(e.t, this.t); for (n = 0; n < i; n += 1) r[n] = t(this[n], e[n]); if (e.t < this.t) { for (o = e.s & this.DM, n = i; n < this.t; n += 1) r[n] = t(this[n], o); r.t = this.t } else { for (o = this.s & this.DM, n = i; n < e.t; n += 1) r[n] = t(o, e[n]); r.t = e.t } r.s = t(this.s, e.s), r.clamp() } function Xe(e, t) { return e & t } function Te(e) { var t = Y(); return this.bitwiseTo(e, Xe, t), t } function Qe(e, t) { return e | t } function Ge(e) { var t = Y(); return this.bitwiseTo(e, Qe, t), t } function je(e, t) { return e ^ t } function Re(e) { var t = Y(); return this.bitwiseTo(e, je, t), t } function Ve(e, t) { return e & ~t } function We(e) { var t = Y(); return this.bitwiseTo(e, Ve, t), t } function Ue() { for (var e = Y(), t = 0; t < this.t; t += 1) e[t] = this.DM & ~this[t]; return e.t = this.t, e.s = ~this.s, e } function Ke(e) { var t = Y(); return e < 0 ? this.rShiftTo(-e, t) : this.lShiftTo(e, t), t } function qe(e) { var t = Y(); return e < 0 ? this.lShiftTo(-e, t) : this.rShiftTo(e, t), t } function Ze(e) { if (0 == e) return -1; var t = 0; return 0 == (65535 & e) && (e >>= 16, t += 16), 0 == (255 & e) && (e >>= 8, t += 8), 0 == (15 & e) && (e >>= 4, t += 4), 0 == (3 & e) && (e >>= 2, t += 2), 0 == (1 & e) && ++t, t } function Je() { for (var e = 0; e < this.t; e += 1) if (0 != this[e]) return e * this.DB + Ze(this[e]); return this.s < 0 ? this.t * this.DB : -1 } function _e(e) { var t = 0; while (0 != e) e &= e - 1, t += 1; return t } function $e() { for (var e = 0, t = this.s & this.DM, r = 0; r < this.t; r += 1) e += _e(this[r] ^ t); return e } function et(e) { var t = Math.floor(e / this.DB); return t >= this.t ? 0 != this.s : 0 != (this[t] & 1 << e % this.DB) } function tt(e, t) { var r = z.ONE.shiftLeft(e); return this.bitwiseTo(r, t, r), r } function rt(e) { return this.changeBit(e, Qe) } function nt(e) { return this.changeBit(e, Ve) } function ot(e) { return this.changeBit(e, je) } function it(e, t) { var r = 0 , n = 0 , o = Math.min(e.t, this.t); while (r < o) n += this[r] + e[r], t[r++] = n & this.DM, n >>= this.DB; if (e.t < this.t) { n += e.s; while (r < this.t) n += this[r], t[r++] = n & this.DM, n >>= this.DB; n += this.s } else { n += this.s; while (r < e.t) n += e[r], t[r++] = n & this.DM, n >>= this.DB; n += e.s } t.s = n < 0 ? -1 : 0, n > 0 ? t[r++] = n : n < -1 && (t[r++] = this.DV + n), t.t = r, t.clamp() } function at(e) { var t = Y(); return this.addTo(e, t), t } function lt(e) { var t = Y(); return this.subTo(e, t), t } function st(e) { var t = Y(); return this.multiplyTo(e, t), t } function ct() { var e = Y(); return this.squareTo(e), e } function ut(e) { var t = Y(); return this.divRemTo(e, t, null), t } function dt(e) { var t = Y(); return this.divRemTo(e, null, t), t } function At(e) { var t = Y() , r = Y(); return this.divRemTo(e, t, r), [t, r] } function pt(e) { this[this.t] = this.am(0, e - 1, this, 0, 0, this.t), ++this.t, this.clamp() } function gt(e, t) { if (0 != e) { while (this.t <= t) this[this.t++] = 0; this[t] += e; while (this[t] >= this.DV) this[t] -= this.DV, ++t >= this.t && (this[this.t++] = 0), ++this[t] } } function ft() {} function ht(e) { return e } function bt(e, t, r) { e.multiplyTo(t, r) } function mt(e, t) { e.squareTo(t) } function wt(e) { return this.exp(e, new ft) } function vt(e, t, r) { var n, o = Math.min(this.t + e.t, t); r.s = 0, r.t = o; while (o > 0) r[o -= 1] = 0; for (n = r.t - this.t; o < n; o += 1) r[o + this.t] = this.am(0, e[o], r, o, 0, this.t); for (n = Math.min(e.t, t); o < n; o += 1) this.am(0, e[o], r, o, 0, t - o); r.clamp() } function xt(e, t, r) { t -= 1; var n = r.t = this.t + e.t - t; r.s = 0; while (--n >= 0) r[n] = 0; for (n = Math.max(t - this.t, 0); n < e.t; n += 1) r[this.t + n - t] = this.am(t - n, e[n], r, 0, 0, this.t + n - t); r.clamp(), r.drShiftTo(1, r) } function yt(e) { this.r2 = Y(), this.q3 = Y(), z.ONE.dlShiftTo(2 * e.t, this.r2), this.mu = this.r2.divide(e), this.m = e } function Bt(e) { if (e.s < 0 || e.t > 2 * this.m.t) return e.mod(this.m); if (e pareTo(this.m) < 0) return e; var t = Y(); return e.copyTo(t), this.reduce(t), t } function Ct(e) { return e } function Et(e) { e.drShiftTo(this.m.t - 1, this.r2), e.t > this.m.t + 1 && (e.t = this.m.t + 1, e.clamp()), this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3), this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); while (e pareTo(this.r2) < 0) e.dAddOffset(1, this.m.t + 1); e.subTo(this.r2, e); while (e pareTo(this.m) >= 0) e.subTo(this.m, e) } function kt(e, t) { e.squareTo(t), this.reduce(t) } function Dt(e, t, r) { e.multiplyTo(t, r), this.reduce(r) } function Ft(e, t) { var r, n, o = e.bitLength(), i = V(1); if (o <= 0) return i; r = o < 18 ? 1 : o < 48 ? 3 : o < 144 ? 4 : o < 768 ? 5 : 6, n = o < 8 ? new ce(t) : t.isEven() ? new yt(t) : new he(t); var a = [] , l = 3 , s = r - 1 , c = (1 << r) - 1; if (a[1] = n.convert(this), r > 1) { var u = Y(); n.sqrTo(a[1], u); while (l <= c) a[l] = Y(), n.mulTo(u, a[l - 2], a[l]), l += 2 } var d, A, p = e.t - 1, g = !0, f = Y(); o = _(e[p]) - 1; while (p >= 0) { o >= s ? d = e[p] >> o - s & c : (d = (e[p] & (1 << o + 1) - 1) << s - o, p > 0 && (d |= e[p - 1] >> this.DB + o - s)), l = r; while (0 == (1 & d)) d >>= 1, l -= 1; if ((o -= l) < 0 && (o += this.DB, p -= 1), g) a[d].copyTo(i), g = !1; else { while (l > 1) n.sqrTo(i, f), n.sqrTo(f, i), l -= 2; l > 0 ? n.sqrTo(i, f) : (A = i, i = f, f = A), n.mulTo(f, a[d], i) } while (p >= 0 && 0 == (e[p] & 1 << o)) n.sqrTo(i, f), A = i, i = f, f = A, --o < 0 && (o = this.DB - 1, p -= 1) } return n.revert(i) } function Pt(e) { var t = this.s < 0 ? this.negate() : this.clone() , r = e.s < 0 ? e.negate() : e.clone(); if (t pareTo(r) < 0) { var n = t; t = r, r = n } var o = t.getLowestSetBit() , i = r.getLowestSetBit(); if (i < 0) return t; o < i && (i = o), i > 0 && (t.rShiftTo(i, t), r.rShiftTo(i, r)); while (t.signum() > 0) (o = t.getLowestSetBit()) > 0 && t.rShiftTo(o, t), (o = r.getLowestSetBit()) > 0 && r.rShiftTo(o, r), t pareTo(r) >= 0 ? (t.subTo(r, t), t.rShiftTo(1, t)) : (r.subTo(t, r), r.rShiftTo(1, r)); return i > 0 && r.lShiftTo(i, r), r } function Ot(e) { if (e <= 0) return 0; var t = this.DV % e , r = this.s < 0 ? e - 1 : 0; if (this.t > 0) if (0 == t) r = this[0] % e; else for (var n = this.t - 1; n >= 0; n -= 1) r = (t * r + this[n]) % e; return r } function It(e) { var t = e.isEven(); if (this.isEven() && t || 0 == e.signum()) return z.ZERO; var r = e.clone() , n = this.clone() , o = V(1) , i = V(0) , a = V(0) , l = V(1); while (0 != r.signum()) { while (r.isEven()) r.rShiftTo(1, r), t ? (o.isEven() && i.isEven() || (o.addTo(this, o), i.subTo(e, i)), o.rShiftTo(1, o)) : i.isEven() || i.subTo(e, i), i.rShiftTo(1, i); while (n.isEven()) n.rShiftTo(1, n), t ? (a.isEven() && l.isEven() || (a.addTo(this, a), l.subTo(e, l)), a.rShiftTo(1, a)) : l.isEven() || l.subTo(e, l), l.rShiftTo(1, l); r pareTo(n) >= 0 ? (r.subTo(n, r), t && o.subTo(a, o), i.subTo(l, i)) : (n.subTo(r, n), t && a.subTo(o, a), l.subTo(i, l)) } return 0 != n pareTo(z.ONE) ? z.ZERO : l pareTo(e) >= 0 ? l.subtract(e) : l.signum() < 0 ? (l.addTo(e, l), l.signum() < 0 ? l.add(e) : l) : l } ce.prototype.convert = ue, ce.prototype.revert = de, ce.prototype.reduce = Ae, ce.prototype.mulTo = pe, ce.prototype.sqrTo = ge, he.prototype.convert = be, he.prototype.revert = me, he.prototype.reduce = we, he.prototype.mulTo = xe, he.prototype.sqrTo = ve, z.prototype.copyTo = j, z.prototype.fromInt = R, z.prototype.fromString = W, z.prototype.clamp = U, z.prototype.dlShiftTo = ee, z.prototype.drShiftTo = te, z.prototype.lShiftTo = re, z.prototype.rShiftTo = ne, z.prototype.subTo = oe, z.prototype.multiplyTo = ie, z.prototype.squareTo = ae, z.prototype.divRemTo = le, z.prototype.invDigit = fe, z.prototype.isEven = ye, z.prototype.exp = Be, z.prototype.toString = K, z.prototype.negate = q, z.prototype.abs = Z, z.prototype pareTo = J, z.prototype.bitLength = $, z.prototype.mod = se, z.prototype.modPowInt = Ce, z.ZERO = V(0), z.ONE = V(1), ft.prototype.convert = ht, ft.prototype.revert = ht, ft.prototype.mulTo = bt, ft.prototype.sqrTo = mt, yt.prototype.convert = Bt, yt.prototype.revert = Ct, yt.prototype.reduce = Et, yt.prototype.mulTo = Dt, yt.prototype.sqrTo = kt; var Ht = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997] , Nt = (1 << 26) / Ht[Ht.length - 1]; function Lt(e) { var t, r = this.abs(); if (1 == r.t && r[0] <= Ht[Ht.length - 1]) { for (t = 0; t < Ht.length; t += 1) if (r[0] == Ht[t]) return !0; return !1 } if (r.isEven()) return !1; t = 1; while (t < Ht.length) { var n = Ht[t] , o = t + 1; while (o < Ht.length && n < Nt) n *= Ht[o++]; n = r.modInt(n); while (t < o) if (n % Ht[t++] == 0) return !1 } return r.millerRabin(e) } function St(e) { var t = this.subtract(z.ONE) , r = t.getLowestSetBit(); if (r <= 0) return !1; var n = t.shiftRight(r); e = e + 1 >> 1, e > Ht.length && (e = Ht.length); for (var i = Y(), a = 0; a < e; a += 1) { o && i.fromInt(Ht[Math.floor(.001 * o.getRandomValues(new Uint8Array(1)) * Ht.length)]); var l = i.modPow(n, this); if (0 != l pareTo(z.ONE) && 0 != l pareTo(t)) { var s = 1; while (s++ < r && 0 != l pareTo(t)) if (l = l.modPowInt(2, this), 0 == l pareTo(z.ONE)) return !1; if (0 != l pareTo(t)) return !1 } } return !0 } function zt() { this.i = 0, this.j = 0, this.S = [] } function Yt(e) { var t, r, n; for (t = 0; t < 256; t += 1) this.S[t] = t; for (r = 0, t = 0; t < 256; t += 1) r = r + this.S[t] + e[t % e.length] & 255, n = this.S[t], this.S[t] = this.S[r], this.S[r] = n; this.i = 0, this.j = 0 } function Mt() { var e; return this.i = this.i + 1 & 255, this.j = this.j + this.S[this.i] & 255, e = this.S[this.i], this.S[this.i] = this.S[this.j], this.S[this.j] = e, this.S[e + this.S[this.i] & 255] } z.prototype.chunkSize = Pe, z.prototype.toRadix = Ie, z.prototype.fromRadix = He, z.prototype.fromNumber = Ne, z.prototype.bitwiseTo = Me, z.prototype.changeBit = tt, z.prototype.addTo = it, z.prototype.dMultiply = pt, z.prototype.dAddOffset = gt, z.prototype.multiplyLowerTo = vt, z.prototype.multiplyUpperTo = xt, z.prototype.modInt = Ot, z.prototype.millerRabin = St, z.prototype.clone = Ee, z.prototype.intValue = ke, z.prototype.byteValue = De, z.prototype.shortValue = Fe, z.prototype.signum = Oe, z.prototype.toByteArray = Le, z.prototype.equals = Se, z.prototype.min = ze, z.prototype.max = Ye, z.prototype.and = Te, z.prototype.or = Ge, z.prototype.xor = Re, z.prototype.andNot = We, z.prototype.not = Ue, z.prototype.shiftLeft = Ke, z.prototype.shiftRight = qe, z.prototype.getLowestSetBit = Je, z.prototype.bitCount = $e, z.prototype.testBit = et, z.prototype.setBit = rt, z.prototype.clearBit = nt, z.prototype.flipBit = ot, z.prototype.add = at, z.prototype.subtract = lt, z.prototype.multiply = st, z.prototype.divide = ut, z.prototype.remainder = dt, z.prototype.divideAndRemainder = At, z.prototype.modPow = Ft, z.prototype.modInverse = It, z.prototype.pow = wt, z.prototype.gcd = Pt, z.prototype.isProbablePrime = Lt, z.prototype.square = ct, zt.prototype.init = Yt, zt.prototype.next = Mt; var Xt, Tt, Qt, Gt, jt = 256; function Rt(e) { Tt[Qt++] ^= 255 & e, Tt[Qt++] ^= e >> 8 & 255, Tt[Qt++] ^= e >> 16 & 255, Tt[Qt++] ^= e >> 24 & 255, Qt >= jt && (Qt -= jt) } function Vt() { Rt((new Date).getTime()) } if (null == Tt) { var Wt; if (Tt = [], Qt = 0, o && o.getRandomValues) { var Ut = new Uint8Array(32); for (o.getRandomValues(Ut), Wt = 0; Wt < 32; Wt += 1) Tt[Qt++] = Ut[Wt] } if ("Netscape" == navigator.appName && navigator.appVersion < "5" && o) { var Kt = o.random(32); for (Wt = 0; Wt < Kt.length; Wt += 1) Tt[Qt++] = 255 & Kt.charCodeAt(Wt) } while (Qt < jt) o && (Wt = Math.floor(65536 * o.getRandomValues(new Uint8Array(1)) * .001)), Tt[Qt++] = Wt >>> 8, Tt[Qt++] = 255 & Wt; Qt = 0, Vt() } function qt() { if (null == Xt) { for (Vt(), Xt = w(), Xt.init(Tt), Qt = 0; Qt < Tt.length; Qt += 1) Tt[Qt] = 0; Qt = 0 } return Xt.next() } function Zt(e) { var t; for (t = 0; t < e.length; t += 1) e[t] = qt() } function Jt(e) { return e == this || this.q.equals(e.q) && this.x.equals(e.x) } function _t() { return this.x } function $t() { return new v(this.q,this.x.negate().mod(this.q)) } function er(e) { return new v(this.q,this.x.add(e.toBigInteger()).mod(this.q)) } function tr(e) { return new v(this.q,this.x.subtract(e.toBigInteger()).mod(this.q)) } function rr(e) { return new v(this.q,this.x.multiply(e.toBigInteger()).mod(this.q)) } function nr() { return new v(this.q,this.x.square().mod(this.q)) } function or(e) { return new v(this.q,this.x.multiply(e.toBigInteger().modInverse(this.q)).mod(this.q)) } function ir(e, t, r, n) { this.curve = e, this.x = t, this.y = r, this.z = null == n ? z.ONE : n, this.zinv = null } function ar() { return null == this.zinv && (this.zinv = this.z.modInverse(this.curve.q)), this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q)) } function lr() { return null == this.zinv && (this.zinv = this.z.modInverse(this.curve.q)), this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q)) } function sr(e) { return e == this || (this.isInfinity() ? e.isInfinity() : e.isInfinity() ? this.isInfinity() : (t = e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q), !!t.equals(z.ZERO) && (r = e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q), r.equals(z.ZERO)))); var t, r } function cr() { return null == this.x && null == this.y || this.z.equals(z.ZERO) && !this.y.toBigInteger().equals(z.ZERO) } function ur() { return new ir(this.curve,this.x,this.y.negate(),this.z) } function dr(e) { if (this.isInfinity()) return e; if (e.isInfinity()) return this; var t = e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q) , r = e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q); if (z.ZERO.equals(r)) return z.ZERO.equals(t) ? this.twice() : this.curve.getInfinity(); var n = new z("3") , o = this.x.toBigInteger() , i = this.y.toBigInteger() , a = (e.x.toBigInteger(), e.y.toBigInteger(), r.square()) , l = a.multiply(r) , s = o.multiply(a) , c = t.square().multiply(this.z) , u = c.subtract(s.shiftLeft(1)).multiply(e.z).subtract(l).multiply(r).mod(this.curve.q) , d = s.multiply(n).multiply(t).subtract(i.multiply(l)).subtract(c.multiply(t)).multiply(e.z).add(t.multiply(l)).mod(this.curve.q) , A = l.multiply(this.z).multiply(e.z).mod(this.curve.q); return new ir(this.curve,this.curve.fromBigInteger(u),this.curve.fromBigInteger(d),A) } function Ar() { if (this.isInfinity()) return this; if (0 == this.y.toBigInteger().signum()) return this.curve.getInfinity(); var e = new z("3") , t = this.x.toBigInteger() , r = this.y.toBigInteger() , n = r.multiply(this.z) , o = n.multiply(r).mod(this.curve.q) , i = this.curve.a.toBigInteger() , a = t.square().multiply(e); z.ZERO.equals(i) || (a = a.add(this.z.square().multiply(i))), a = a.mod(this.curve.q); var l = a.square().subtract(t.shiftLeft(3).multiply(o)).shiftLeft(1).multiply(n).mod(this.curve.q) , s = a.multiply(e).multiply(t).subtract(o.shiftLeft(1)).shiftLeft(2).multiply(o).subtract(a.square().multiply(a)).mod(this.curve.q) , c = n.square().multiply(n).shiftLeft(3).mod(this.curve.q); return new ir(this.curve,this.curve.fromBigInteger(l),this.curve.fromBigInteger(s),c) } function pr(e) { if (this.isInfinity()) return this; if (0 == e.signum()) return this.curve.getInfinity(); var t, r = e, n = r.multiply(new z("3")), o = this.negate(), i = this; for (t = n.bitLength() - 2; t > 0; t -= 1) { i = i.twice(); var a = n.testBit(t) , l = r.testBit(t); a != l && (i = i.add(a ? this : o)) } return i } function gr(e, t, r) { var n; n = e.bitLength() > r.bitLength() ? e.bitLength() - 1 : r.bitLength() - 1; var o = this.curve.getInfinity() , i = this.add(t); while (n >= 0) o = o.twice(), e.testBit(n) ? o = r.testBit(n) ? o.add(i) : o.add(this) : r.testBit(n) && (o = o.add(t)), n -= 1; return o } function fr(e, t, r) { this.q = e, this.a = this.fromBigInteger(t), this.b = this.fromBigInteger(r), this.infinity = new ir(this,null,null) } function hr() { return this.q } function br() { return this.a } function mr() { return this.b } function wr(e) { return e == this || this.q.equals(e.q) && this.a.equals(e.a) && this.b.equals(e.b) } function vr() { return this.infinity } function xr(e) { return new v(this.q,e) } function yr(e) { switch (parseInt(e.substr(0, 2), 16)) { case 0: return this.infinity; case 2: case 3: return null; case 4: case 6: case 7: var t = (e.length - 2) / 2 , r = e.substr(2, t) , n = e.substr(t + 2, t); return new ir(this,this.fromBigInteger(new z(r,16)),this.fromBigInteger(new z(n,16))); default: return null } } function Br() { this.BYTE_LENGTH = 64, this.xBuf = [], this.xBufOff = 0, this.byteCount = 0, this.DIGEST_LENGTH = 32, this.v0 = [1937774191, 1226093241, 388252375, -628488704, -1452330820, 372324522, -477237683, -1325724082], this.v = [0, 0, 0, 0, 0, 0, 0, 0], this.v_ = [0, 0, 0, 0, 0, 0, 0, 0], this.X0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], this.X = [68], this.xOff = 0, this.T_00_15 = 2043430169, this.T_16_63 = 2055708042, arguments.length > 0 ? this.InitDigest(arguments[0]) : this.Init() } function Cr(e, t) { return e << t | e >>> -t } function Er(e) { if (e > 2147483647 || e < -2147483648) { var t = 4294967295 & e; return t > 2147483647 ? (t = 2147483647 & e, t ^= 2147483647, -(t + 1)) : t } return e } function kr(e) { this.ct = 1, this.p2 = null, this.sm3keybase = null, this.sm3c3 = null, this.key = new Array(32), this.keyOff = 0, this.cipherMode = "undefined" !== typeof e ? e : SM2CipherMode.C1C3C2 } function Dr(e, t) { if (void 0 != e && void 0 != t && "" != e && "" != t && 130 == t.length) { var r = S.enc.Utf8.parse(e) , n = t , o = n.substr(0, 2); if ("04" == o) { n.length > 128 && (n = n.substr(n.length - 128)); var i = n.substr(0, 64) , a = n.substr(64) , l = new kr(1) , s = l.CreatePoint(i, a); if (void 0 != s) { r = l.GetWords(r.toString()); var c = l.Encrypt(s, r); return "04" + c } } } } function Fr(e, t) { if (void 0 != e && void 0 != t && "" != e && "" != t && 130 == t.length) { var r = S.enc.Utf8.parse(e) , n = t , o = n.substr(0, 2); if ("04" == o) { n.length > 128 && (n = n.substr(n.length - 128)); var i = n.substr(0, 64) , a = n.substr(64) , l = new kr(0) , s = l.CreatePoint(i, a); if (void 0 != s) { r = l.GetWords(r.toString()); var c = l.Encrypt(s, r); return c } } } } function Pr(e, t) { if (void 0 != e && void 0 != t && "" != e && "" != t && 64 == t.length && !(e.length <= 194)) { var r = e.substr(0, 2); if ("04" == r) { e = e.substr(2); var n = new z(t,16) , o = new kr(1) , i = o.Decrypt(n, e); return i } } } function Or(e) { if (void 0 != e && "" != e) { var t = S.enc.Utf8.parse(e) , r = new Br; t = r.GetWords(t.toString()), r.BlockUpdate(t, 0, t.length); var n = new Array(32); r.DoFinal(n, 0); var o = r.GetHex(n).toString(); return o } } function Ir() { var e = new Gt.crypto.ECDSA({ curve: "SM2" }); return e.generateKeyPairHex() } function Hr() { var e = new m , t = new Array(16); e.nextBytes(t); var r = (new Br).GetHex(t); return r.toString() } m.prototype.nextBytes = Zt, v.prototype.equals = Jt, v.prototype.toBigInteger = _t, v.prototype.negate = $t, v.prototype.add = er, v.prototype.subtract = tr, v.prototype.multiply = rr, v.prototype.square = nr, v.prototype.divide = or, ir.prototype.getX = ar, ir.prototype.getY = lr, ir.prototype.equals = sr, ir.prototype.isInfinity = cr, ir.prototype.negate = ur, ir.prototype.add = dr, ir.prototype.twice = Ar, ir.prototype.multiply = pr, ir.prototype.multiplyTwo = gr, fr.prototype.getQ = hr, fr.prototype.getA = br, fr.prototype.getB = mr, fr.prototype.equals = wr, fr.prototype.getInfinity = vr, fr.prototype.fromBigInteger = xr, fr.prototype.decodePointHex = yr, v.prototype.getByteLength = function() { return Math.floor((this.toBigInteger().bitLength() + 7) / 8) } , ir.prototype.getEncoded = function(e) { var t = function(e, t) { var r = e.toByteArrayUnsigned(); if (t < r.length) r = r.slice(r.length - t); else while (t > r.length) r.unshift(0); return r } , r = this.getX().toBigInteger() , n = this.getY().toBigInteger() , o = t(r, 32); return e ? n.isEven() ? o.unshift(2) : o.unshift(3) : (o.unshift(4), o = o.concat(t(n, 32))), o } , ir.decodeFrom = function(e, t) { t[0]; var r = t.length - 1 , n = t.slice(1, 1 + r / 2) , o = t.slice(1 + r / 2, 1 + r); n.unshift(0), o.unshift(0); var i = new z(n) , a = new z(o); return new ir(e,e.fromBigInteger(i),e.fromBigInteger(a)) } , ir.decodeFromHex = function(e, t) { t.substr(0, 2); var r = t.length - 2 , n = t.substr(2, r / 2) , o = t.substr(2 + r / 2, r / 2) , i = new z(n,16) , a = new z(o,16); return new ir(e,e.fromBigInteger(i),e.fromBigInteger(a)) } , ir.prototype.add2D = function(e) { if (this.isInfinity()) return e; if (e.isInfinity()) return this; if (this.x.equals(e.x)) return this.y.equals(e.y) ? this.twice() : this.curve.getInfinity(); var t = e.x.subtract(this.x) , r = e.y.subtract(this.y) , n = r.divide(t) , o = n.square().subtract(this.x).subtract(e.x) , i = n.multiply(this.x.subtract(o)).subtract(this.y); return new ir(this.curve,o,i) } , ir.prototype.twice2D = function() { if (this.isInfinity()) return this; if (0 == this.y.toBigInteger().signum()) return this.curve.getInfinity(); var e = this.curve.fromBigInteger(z.valueOf(2)) , t = this.curve.fromBigInteger(z.valueOf(3)) , r = this.x.square().multiply(t).add(this.curve.a).divide(this.y.multiply(e)) , n = r.square().subtract(this.x.multiply(e)) , o = r.multiply(this.x.subtract(n)).subtract(this.y); return new ir(this.curve,n,o) } , ir.prototype.multiply2D = function(e) { if (this.isInfinity()) return this; if (0 == e.signum()) return this.curve.getInfinity(); var t, r = e, n = r.multiply(new z("3")), o = this.negate(), i = this; for (t = n.bitLength() - 2; t > 0; t -= 1) { i = i.twice(); var a = n.testBit(t) , l = r.testBit(t); a != l && (i = i.add2D(a ? this : o)) } return i } , ir.prototype.isOnCurve = function() { var e = this.getX().toBigInteger() , t = this.getY().toBigInteger() , r = this.curve.getA().toBigInteger() , n = this.curve.getB().toBigInteger() , o = this.curve.getQ() , i = t.multiply(t).mod(o) , a = e.multiply(e).multiply(e).add(r.multiply(e)).add(n).mod(o); return i.equals(a) } , ir.prototype.toString = function() { return "(" + this.getX().toBigInteger().toString() + "," + this.getY().toBigInteger().toString() + ")" } , ir.prototype.validate = function() { var e = this.curve.getQ(); if (this.isInfinity()) throw new Error("Point is at infinity."); var t = this.getX().toBigInteger() , r = this.getY().toBigInteger(); if (t pareTo(z.ONE) < 0 || t pareTo(e.subtract(z.ONE)) > 0) throw new Error("x coordinate out of bounds"); if (r pareTo(z.ONE) < 0 || r pareTo(e.subtract(z.ONE)) > 0) throw new Error("y coordinate out of bounds"); if (!this.isOnCurve()) throw new Error("Point is not on the curve."); if (this.multiply(e).isInfinity()) throw new Error("Point is not a scalar multiple of G."); return !0 } , "undefined" !== typeof Gt && Gt || (Gt = {}), "undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {}), Gt.crypto.ECDSA = function(e) { var t = "secp256r1" , r = new m; this.type = "EC", this.getBigRandom = function(e) { return new z(e.bitLength(),r).mod(e.subtract(z.ONE)).add(z.ONE) } , this.setNamedCurve = function(e) { this.ecparams = Gt.crypto.ECParameterDB.getByName(e), this.prvKeyHex = null, this.pubKeyHex = null, this.curveName = e } , this.setPrivateKeyHex = function(e) { this.isPrivate = !0, this.prvKeyHex = e } , this.setPublicKeyHex = function(e) { this.isPublic = !0, this.pubKeyHex = e } , this.getPublicKeyXYHex = function() { var e = this.pubKeyHex; if ("04" !== e.substr(0, 2)) throw "this method supports uncompressed format(04) only"; var t = this.ecparams.keylen / 4; if (e.length !== 2 + 2 * t) throw "malformed public key hex length"; var r = {}; return r.x = e.substr(2, t), r.y = e.substr(2 + t), r } , this.getShortNISTPCurveName = function() { var e = this.curveName; return "secp256r1" === e || "NIST P-256" === e || "P-256" === e || "prime256v1" === e ? "P-256" : "secp384r1" === e || "NIST P-384" === e || "P-384" === e ? "P-384" : null } , this.generateKeyPairHex = function() { var e = this.ecparams["n"] , t = this.getBigRandom(e) , r = this.ecparams["G"].multiply(t) , n = r.getX().toBigInteger() , o = r.getY().toBigInteger() , i = this.ecparams["keylen"] / 4 , a = ("0000000000" + t.toString(16)).slice(-i) , l = ("0000000000" + n.toString(16)).slice(-i) , s = ("0000000000" + o.toString(16)).slice(-i) , c = "04" + l + s; return this.setPrivateKeyHex(a), this.setPublicKeyHex(c), { ecprvhex: a, ecpubhex: c } } , this.signWithMessageHash = function(e) { return this.signHex(e, this.prvKeyHex) } , this.signHex = function(e, t) { var r = new z(t,16) , n = this.ecparams["n"] , o = new z(e,16); do { var i = this.getBigRandom(n) , a = this.ecparams["G"] , l = a.multiply(i) , s = l.getX().toBigInteger().mod(n) } while (s pareTo(z.ZERO) <= 0); var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n); return Gt.crypto.ECDSA.biRSSigToASN1Sig(s, c) } , this.sign = function(e, t) { var r = t , n = this.ecparams["n"] , o = z.fromByteArrayUnsigned(e); do { var i = this.getBigRandom(n) , a = this.ecparams["G"] , l = a.multiply(i) , s = l.getX().toBigInteger().mod(n) } while (s pareTo(z.ZERO) <= 0); var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n); return this.serializeSig(s, c) } , this.verifyWithMessageHash = function(e, t) { return this.verifyHex(e, t, this.pubKeyHex) } , this.verifyHex = function(e, t, r) { var n, o, i, a = Gt.crypto.ECDSA.parseSigHex(t); n = a.r, o = a.s, i = ir.decodeFromHex(this.ecparams["curve"], r); var l = new z(e,16); return this.verifyRaw(l, n, o, i) } , this.verify = function(e, t, r) { var o, i, a; if (Bitcoin.Util.isArray(t)) { var l = this.parseSig(t); o = l.r, i = l.s } else { if ("object" !== n(t) || !t.r || !t.s) throw "Invalid value for signature"; o = t.r, i = t.s } if (r instanceof ir) a = r; else { if (!Bitcoin.Util.isArray(r)) throw "Invalid format for pubkey value, must be byte array or ECPointFp"; a = ir.decodeFrom(this.ecparams["curve"], r) } var s = z.fromByteArrayUnsigned(e); return this.verifyRaw(s, o, i, a) } , this.verifyRaw = function(e, t, r, n) { var o = this.ecparams["n"] , i = this.ecparams["G"]; if (t pareTo(z.ONE) < 0 || t pareTo(o) >= 0) return !1; if (r pareTo(z.ONE) < 0 || r pareTo(o) >= 0) return !1; var a = r.modInverse(o) , l = e.multiply(a).mod(o) , s = t.multiply(a).mod(o) , c = i.multiply(l).add(n.multiply(s)) , u = c.getX().toBigInteger().mod(o); return u.equals(t) } , this.serializeSig = function(e, t) { var r = e.toByteArraySigned() , n = t.toByteArraySigned() , o = []; return o.push(2), o.push(r.length), o = o.concat(r), o.push(2), o.push(n.length), o = o.concat(n), o.unshift(o.length), o.unshift(48), o } , this.parseSig = function(e) { var t; if (48 != e[0]) throw new Error("Signature not a valid DERSequence"); if (t = 2, 2 != e[t]) throw new Error("First element in signature must be a DERInteger"); var r = e.slice(t + 2, t + 2 + e[t + 1]); if (t += 2 + e[t + 1], 2 != e[t]) throw new Error("Second element in signature must be a DERInteger"); var n = e.slice(t + 2, t + 2 + e[t + 1]); t += 2 + e[t + 1]; var o = z.fromByteArrayUnsigned(r) , i = z.fromByteArrayUnsigned(n); return { r: o, s: i } } , this.parseSigCompact = function(e) { if (65 !== e.length) throw "Signature has the wrong length"; var t = e[0] - 27; if (t < 0 || t > 7) throw "Invalid signature type"; var r = this.ecparams["n"] , n = z.fromByteArrayUnsigned(e.slice(1, 33)).mod(r) , o = z.fromByteArrayUnsigned(e.slice(33, 65)).mod(r); return { r: n, s: o, i: t } } , void 0 !== e && void 0 !== e["curve"] && (this.curveName = e["curve"]), void 0 === this.curveName && (this.curveName = t), this.setNamedCurve(this.curveName), void 0 !== e && (void 0 !== e["prv"] && this.setPrivateKeyHex(e["prv"]), void 0 !== e["pub"] && this.setPublicKeyHex(e["pub"])) } , Gt.crypto.ECDSA.parseSigHex = function(e) { var t = Gt.crypto.ECDSA.parseSigHexInHexRS(e) , r = new z(t.r,16) , n = new z(t.s,16); return { r: r, s: n } } , Gt.crypto.ECDSA.parseSigHexInHexRS = function(e) { if ("30" != e.substr(0, 2)) throw "signature is not a ASN.1 sequence"; var t = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0); if (2 != t.length) throw "number of signature ASN.1 sequence elements seem wrong"; var r = t[0] , n = t[1]; if ("02" != e.substr(r, 2)) throw "1st item of sequene of signature is not ASN.1 integer"; if ("02" != e.substr(n, 2)) throw "2nd item of sequene of signature is not ASN.1 integer"; var o = ASN1HEX.getHexOfV_AtObj(e, r) , i = ASN1HEX.getHexOfV_AtObj(e, n); return { r: o, s: i } } , Gt.crypto.ECDSA.asn1SigToConcatSig = function(e) { var t = Gt.crypto.ECDSA.parseSigHexInHexRS(e) , r = t.r , n = t.s; if ("00" == r.substr(0, 2) && r.length / 2 * 8 % 128 == 8 && (r = r.substr(2)), "00" == n.substr(0, 2) && n.length / 2 * 8 % 128 == 8 && (n = n.substr(2)), r.length / 2 * 8 % 128 != 0) throw "unknown ECDSA sig r length error"; if (n.length / 2 * 8 % 128 != 0) throw "unknown ECDSA sig s length error"; return r + n } , Gt.crypto.ECDSA.concatSigToASN1Sig = function(e) { if (e.length / 2 * 8 % 128 != 0) throw "unknown ECDSA concatinated r-s sig length error"; var t = e.substr(0, e.length / 2) , r = e.substr(e.length / 2); return Gt.crypto.ECDSA.hexRSSigToASN1Sig(t, r) } , Gt.crypto.ECDSA.hexRSSigToASN1Sig = function(e, t) { var r = new z(e,16) , n = new z(t,16); return Gt.crypto.ECDSA.biRSSigToASN1Sig(r, n) } , Gt.crypto.ECDSA.biRSSigToASN1Sig = function(e, t) { var r = new Gt.asn1.DERInteger({ bigint: e }) , n = new Gt.asn1.DERInteger({ bigint: t }) , o = new Gt.asn1.DERSequence({ array: [r, n] }); return o.getEncodedHex() } , function() { var e = S , t = e.lib , r = t.WordArray , n = t.Hasher , o = e.algo , i = [] , a = o.SM3 = n.extend({ _doReset: function() { this._hash = new r.init([1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214]) }, _doProcessBlock: function(e, t) { for (var r = this._hash.words, n = r[0], o = r[1], a = r[2], l = r[3], s = r[4], c = 0; c < 80; c += 1) { if (c < 16) i[c] = 0 | e[t + c]; else { var u = i[c - 3] ^ i[c - 8] ^ i[c - 14] ^ i[c - 16]; i[c] = u << 1 | u >>> 31 } var d = (n << 5 | n >>> 27) + s + i[c]; d += c < 20 ? 1518500249 + (o & a | ~o & l) : c < 40 ? 1859775393 + (o ^ a ^ l) : c < 60 ? (o & a | o & l | a & l) - 1894007588 : (o ^ a ^ l) - 899497514, s = l, l = a, a = o << 30 | o >>> 2, o = n, n = d } r[0] = r[0] + n | 0, r[1] = r[1] + o | 0, r[2] = r[2] + a | 0, r[3] = r[3] + l | 0, r[4] = r[4] + s | 0 }, _doFinalize: function() { var e = this._data , t = e.words , r = 8 * this._nDataBytes , n = 8 * e.sigBytes; return t[n >>> 5] |= 128 << 24 - n % 32, t[14 + (n + 64 >>> 9 << 4)] = Math.floor(r / 4294967296), t[15 + (n + 64 >>> 9 << 4)] = r, e.sigBytes = 4 * t.length, this._process(), this._hash }, clone: function() { var e = n.clone.call(this); return e._hash = this._hash.clone(), e } }); e.SM3 = n._createHelper(a), e.HmacSM3 = n._createHmacHelper(a) }(), Br.prototype = { Init: function() { this.xBuf = [0, 0, 0, 0], this.Reset() }, InitDigest: function(e) { this.xBuf = [e.xBuf.length], Array.Copy(e.xBuf, 0, this.xBuf, 0, e.xBuf.length), this.xBufOff = e.xBufOff, this.byteCount = e.byteCount, Array.Copy(e.X, 0, this.X, 0, e.X.length), this.xOff = e.xOff, Array.Copy(e.v, 0, this.v, 0, e.v.length) }, GetDigestSize: function() { return this.DIGEST_LENGTH }, Reset: function() { this.byteCount = 0, this.xBufOff = 0, Array.Clear(this.xBuf, 0, this.xBuf.length), Array.Copy(this.v0, 0, this.v, 0, this.v0.length), this.xOff = 0, Array.Copy(this.X0, 0, this.X, 0, this.X0.length) }, GetByteLength: function() { return this.BYTE_LENGTH }, ProcessBlock: function() { var e, t = this.X, r = [64]; for (e = 16; e < 68; e += 1) t[e] = this.P1(t[e - 16] ^ t[e - 9] ^ Cr(t[e - 3], 15)) ^ Cr(t[e - 13], 7) ^ t[e - 6]; for (e = 0; e < 64; e += 1) r[e] = t[e] ^ t[e + 4]; var n, o, i, a, l, s = this.v, c = this.v_; for (Array.Copy(s, 0, c, 0, this.v0.length), e = 0; e < 16; e += 1) l = Cr(c[0], 12), n = l + c[4] + Cr(this.T_00_15, e), n = Cr(n, 7), o = n ^ l, i = this.FF_00_15(c[0], c[1], c[2]) + c[3] + o + r[e], a = this.GG_00_15(c[4], c[5], c[6]) + c[7] + n + t[e], c[3] = c[2], c[2] = Cr(c[1], 9), c[1] = c[0], c[0] = i, c[7] = c[6], c[6] = Cr(c[5], 19), c[5] = c[4], c[4] = this.P0(a); for (e = 16; e < 64; e += 1) l = Cr(c[0], 12), n = l + c[4] + Cr(this.T_16_63, e), n = Cr(n, 7), o = n ^ l, i = this.FF_16_63(c[0], c[1], c[2]) + c[3] + o + r[e], a = this.GG_16_63(c[4], c[5], c[6]) + c[7] + n + t[e], c[3] = c[2], c[2] = Cr(c[1], 9), c[1] = c[0], c[0] = i, c[7] = c[6], c[6] = Cr(c[5], 19), c[5] = c[4], c[4] = this.P0(a); for (e = 0; e < 8; e += 1) s[e] ^= c[e]; this.xOff = 0, Array.Copy(this.X0, 0, this.X, 0, this.X0.length) }, ProcessWord: function(e, t) { var r = e[t] << 24; r |= (255 & e[t += 1]) << 16, r |= (255 & e[t += 1]) << 8, r |= 255 & e[t += 1], this.X[this.xOff] = r, 16 == ++this.xOff && this.ProcessBlock() }, ProcessLength: function(e) { this.xOff > 14 && this.ProcessBlock(), this.X[14] = this.URShiftLong(e, 32), this.X[15] = 4294967295 & e }, IntToBigEndian: function(e, t, r) { t[r] = e >>> 24 & 255, t[r += 1] = e >>> 16 & 255, t[r += 1] = e >>> 8 & 255, t[r += 1] = 255 & e }, DoFinal: function(e, t) { this.Finish(); for (var r = 0; r < 8; r += 1) this.IntToBigEndian(this.v[r], e, t + 4 * r); return this.Reset(), this.DIGEST_LENGTH }, Update: function(e) { this.xBuf[this.xBufOff++] = e, this.xBufOff == this.xBuf.length && (this.ProcessWord(this.xBuf, 0), this.xBufOff = 0), this.byteCount++ }, BlockUpdate: function(e, t, r) { while (0 != this.xBufOff && r > 0) this.Update(e[t]), t += 1, r -= 1; while (r > this.xBuf.length) this.ProcessWord(e, t), t += this.xBuf.length, r -= this.xBuf.length, this.byteCount += this.xBuf.length; while (r > 0) this.Update(e[t]), t += 1, r -= 1 }, Finish: function() { var e = this.byteCount << 3; this.Update(128); while (0 != this.xBufOff) this.Update(0); this.ProcessLength(e), this.ProcessBlock() }, ROTATE: function(e, t) { return e << t | this.URShift(e, 32 - t) }, P0: function(e) { return e ^ Cr(e, 9) ^ Cr(e, 17) }, P1: function(e) { return e ^ Cr(e, 15) ^ Cr(e, 23) }, FF_00_15: function(e, t, r) { return e ^ t ^ r }, FF_16_63: function(e, t, r) { return e & t | e & r | t & r }, GG_00_15: function(e, t, r) { return e ^ t ^ r }, GG_16_63: function(e, t, r) { return e & t | ~e & r }, URShift: function(e, t) { return console.error(e), (e > Int32.maxValue || e < Int32.minValue) && (console.error(e), e = Er(e)), e >= 0 ? e >> t : (e >> t) + (2 << ~t) }, URShiftLong: function(e, t) { var r, n = new z; if (n.fromInt(e), n.signum() >= 0) r = n.shiftRight(t).intValue(); else { var o = new z; o.fromInt(2); var i = ~t , a = ""; if (i < 0) { for (var l = 64 + i, s = 0; s < l; s += 1) a += "0"; var c = new z; c.fromInt(e >> t); var u = new z("10" + a,2); a = u.toRadix(10); var d = u.add(c); r = d.toRadix(10) } else a = o.shiftLeft(~t).intValue(), r = (e >> t) + a } return r }, GetZ: function(e, t, r) { var n = S.enc.Utf8.parse(r) , o = 4 * n.words.length * 8; this.Update(o >> 8 & 255), this.Update(255 & o); var i = this.GetWords(n.toString()); this.BlockUpdate(i, 0, i.length); var a = this.GetWords(e.curve.a.toBigInteger().toRadix(16)) , l = this.GetWords(e.curve.b.toBigInteger().toRadix(16)) , s = this.GetWords(e.getX().toBigInteger().toRadix(16)) , c = this.GetWords(e.getY().toBigInteger().toRadix(16)) , u = this.GetWords(t.substr(0, 64)) , d = this.GetWords(t.substr(64, 64)); this.BlockUpdate(a, 0, a.length), this.BlockUpdate(l, 0, l.length), this.BlockUpdate(s, 0, s.length), this.BlockUpdate(c, 0, c.length), this.BlockUpdate(u, 0, u.length), this.BlockUpdate(d, 0, d.length); var A = [this.GetDigestSize()]; return this.DoFinal(A, 0), A }, GetWords: function(e) { for (var t = [], r = e.length, n = 0; n < r; n += 2) t[t.length] = parseInt(e.substr(n, 2), 16); return t }, GetHex: function(e) { for (var t = [], r = 0, n = 0; n < 2 * e.length; n += 2) t[n >>> 3] |= parseInt(e[r]) << 24 - n % 8 * 4, r += 1; var o = new S.lib.WordArray.init(t,e.length); return o } }, Array.Clear = function(e, t, r) { for (var n in e) e[n] = null } , Array.Copy = function(e, t, r, n, o) { for (var i = e.slice(t, t + o), a = 0; a < i.length; a += 1) r[n] = i[a], n += 1 } , window.Int32 = { minValue: -parseInt("10000000000000000000000000000000", 2), maxValue: parseInt("1111111111111111111111111111111", 2), parse: function(e) { if (e < this.minValue) { for (var t = new Number(-e), r = t.toString(2), n = r.substr(r.length - 31, 31), o = "", i = 0; i < n.length; i += 1) { var a = n.substr(i, 1); o += "0" == a ? "1" : "0" } var l = parseInt(o, 2); return l + 1 } if (e > this.maxValue) { for (t = Number(e), r = t.toString(2), n = r.substr(r.length - 31, 31), o = "", i = 0; i < n.length; i += 1) { a = n.substr(i, 1); o += "0" == a ? "1" : "0" } l = parseInt(o, 2); return -(l + 1) } return e }, parseByte: function(e) { if (e > 255) { var t = 255 & e; return t } if (e < -256) { t = 255 & e; return t ^= 255, t + 1 } return e } }, Gt.crypto.SM3withSM2 = function(e) { var t = "sm2" , r = new m; this.type = "SM2", this.getBigRandom = function(e) { return new z(e.bitLength(),r).mod(e.subtract(z.ONE)).add(z.ONE) } , this.setNamedCurve = function(e) { this.ecparams = Gt.crypto.ECParameterDB.getByName(e), this.prvKeyHex = null, this.pubKeyHex = null, this.curveName = e } , this.setPrivateKeyHex = function(e) { this.isPrivate = !0, this.prvKeyHex = e } , this.setPublicKeyHex = function(e) { this.isPublic = !0, this.pubKeyHex = e } , this.generateKeyPairHex = function() { var e = this.ecparams["n"] , t = this.getBigRandom(e) , r = this.ecparams["G"].multiply(t) , n = r.getX().toBigInteger() , o = r.getY().toBigInteger() , i = this.ecparams["keylen"] / 4 , a = ("0000000000" + t.toString(16)).slice(-i) , l = ("0000000000" + n.toString(16)).slice(-i) , s = ("0000000000" + o.toString(16)).slice(-i) , c = "04" + l + s; return this.setPrivateKeyHex(a), this.setPublicKeyHex(c), { ecprvhex: a, ecpubhex: c } } , this.signWithMessageHash = function(e) { return this.signHex(e, this.prvKeyHex) } , this.signHex = function(e, t) { var r = new z(t,16) , n = this.ecparams["n"] , o = new z(e,16) , i = null , a = null , l = null , s = null , c = r; do { do { var u = this.generateKeyPairHex(); i = new z(u.ecprvhex,16); var d = u.ecpubhex; a = ir.decodeFromHex(this.ecparams["curve"], d), l = o.add(a.getX().toBigInteger()), l = l.mod(n) } while (l.equals(z.ZERO) || l.add(i).equals(n)); var A = c.add(z.ONE); A = A.modInverse(n), s = l.multiply(c), s = i.subtract(s).mod(n), s = A.multiply(s).mod(n) } while (s.equals(z.ZERO)); var p = l.toRadix(16) , g = s.toRadix(16); if (64 != p.length) { r = 64 - p.length; for (var f = 0; f < r; f++) p = "0" + p } if (64 != g.length) for (r = 64 - g.length, f = 0; f < r; f++) g = "0" + g; return p + g } , this.sign = function(e, t) { var r = t , n = this.ecparams["n"] , o = z.fromByteArrayUnsigned(e); do { var i = this.getBigRandom(n) , a = this.ecparams["G"] , l = a.multiply(i) , s = l.getX().toBigInteger().mod(n) } while (s pareTo(z.ZERO) <= 0); var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n); return this.serializeSig(s, c) } , this.verifyWithMessageHash = function(e, t) { return this.verifyHex(e, t, this.pubKeyHex) } , this.verifyHex = function(e, t, r) { var n, o; n = t.substr(0, 64), o = t.substr(64, 64); var i, a = new z(n,16), l = new z(o,16); i = ir.decodeFromHex(this.ecparams["curve"], r); var s = new z(e,16); return this.verifyRaw(s, a, l, i) } , this.verify = function(e, t, r) { var o, i, a; if (Bitcoin.Util.isArray(t)) { var l = this.parseSig(t); o = l.r, i = l.s } else { if ("object" !== n(t) || !t.r || !t.s) throw "Invalid value for signature"; o = t.r, i = t.s } if (r instanceof ir) a = r; else { if (!Bitcoin.Util.isArray(r)) throw "Invalid format for pubkey value, must be byte array or ECPointFp"; a = ir.decodeFrom(this.ecparams["curve"], r) } var s = z.fromByteArrayUnsigned(e); return this.verifyRaw(s, o, i, a) } , this.verifyRaw = function(e, t, r, n) { var o = this.ecparams["n"] , i = this.ecparams["G"] , a = t.add(r).mod(o); if (a.equals(z.ZERO)) return !1; if (t pareTo(z.ONE) < 0 || t pareTo(o) >= 0) return !1; if (r pareTo(z.ONE) < 0 || r pareTo(o) >= 0) return !1; if (0 == n.isOnCurve()) return !1; var l = i.multiply(r); l = l.add(n.multiply(a)); var s = e.add(l.getX().toBigInteger()).mod(o); return t.equals(s) } , this.serializeSig = function(e, t) { var r = e.toByteArraySigned() , n = t.toByteArraySigned() , o = []; return o.push(2), o.push(r.length), o = o.concat(r), o.push(2), o.push(n.length), o = o.concat(n), o.unshift(o.length), o.unshift(48), o } , this.parseSig = function(e) { var t; if (48 != e[0]) throw new Error("Signature not a valid DERSequence"); if (t = 2, 2 != e[t]) throw new Error("First element in signature must be a DERInteger"); var r = e.slice(t + 2, t + 2 + e[t + 1]); if (t += 2 + e[t + 1], 2 != e[t]) throw new Error("Second element in signature must be a DERInteger"); var n = e.slice(t + 2, t + 2 + e[t + 1]); t += 2 + e[t + 1]; var o = z.fromByteArrayUnsigned(r) , i = z.fromByteArrayUnsigned(n); return { r: o, s: i } } , this.parseSigCompact = function(e) { if (65 !== e.length) throw "Signature has the wrong length"; var t = e[0] - 27; if (t < 0 || t > 7) throw "Invalid signature type"; var r = this.ecparams["n"] , n = z.fromByteArrayUnsigned(e.slice(1, 33)).mod(r) , o = z.fromByteArrayUnsigned(e.slice(33, 65)).mod(r); return { r: n, s: o, i: t } } , void 0 !== e && void 0 !== e["curve"] && (this.curveName = e["curve"]), void 0 === this.curveName && (this.curveName = t), this.setNamedCurve(this.curveName), void 0 !== e && (void 0 !== e["prv"] && this.setPrivateKeyHex(e["prv"]), void 0 !== e["pub"] && this.setPublicKeyHex(e["pub"])) } , Gt.crypto.ECParameterDB = new function() { var e = {} , t = {}; function r(e) { return new z(e,16) } this.getByName = function(r) { var n = r; if ("undefined" !== typeof t[n] && (n = t[r]), "undefined" !== typeof e[n]) return e[n]; throw "unregistered EC curve name: " + n } , this.regist = function(n, o, i, a, l, s, c, u, d, A, p, g) { e[n] = {}; var f = r(i) , h = r(a) , b = r(l) , m = r(s) , w = r(c) , v = new fr(f,h,b) , x = v.decodePointHex("04" + u + d); e[n]["name"] = n, e[n]["keylen"] = o, e[n]["curve"] = v, e[n]["G"] = x, e[n]["n"] = m, e[n]["h"] = w, e[n]["oid"] = p, e[n]["info"] = g; for (var y = 0; y < A.length; y += 1) t[A[y]] = n } } , Gt.crypto.ECParameterDB.regist("secp128r1", 128, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", "E87579C11079F43DD824993C2CEE5ED3", "FFFFFFFE0000000075A30D1B9038A115", "1", "161FF7528B899B2D0C28607CA52C5B86", "CF5AC8395BAFEB13C02DA292DDED7A83", [], "", "secp128r1 : SECG curve over a 128 bit prime field"), Gt.crypto.ECParameterDB.regist("secp160k1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", "0", "7", "0100000000000000000001B8FA16DFAB9ACA16B6B3", "1", "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", "938CF935318FDCED6BC28286531733C3F03C4FEE", [], "", "secp160k1 : SECG curve over a 160 bit prime field"), Gt.crypto.ECParameterDB.regist("secp160r1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", "0100000000000000000001F4C8F927AED3CA752257", "1", "4A96B5688EF573284664698968C38BB913CBFC82", "23A628553168947D59DCC912042351377AC5FB32", [], "", "secp160r1 : SECG curve over a 160 bit prime field"), Gt.crypto.ECParameterDB.regist("secp192k1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", "0", "3", "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", "1", "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", []), Gt.crypto.ECParameterDB.regist("secp192r1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", "1", "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", []), Gt.crypto.ECParameterDB.regist("secp224r1", 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", "1", "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", []), Gt.crypto.ECParameterDB.regist("secp256k1", 256, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", "0", "7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", "1", "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", []), Gt.crypto.ECParameterDB.regist("secp256r1", 256, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", "1", "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", ["NIST P-256", "P-256", "prime256v1"]), Gt.crypto.ECParameterDB.regist("secp384r1", 384, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", "1", "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", ["NIST P-384", "P-384"]), Gt.crypto.ECParameterDB.regist("secp521r1", 521, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", "051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", "1", "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", ["NIST P-521", "P-521"]), Gt.crypto.ECParameterDB.regist("sm2", 256, "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF", "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC", "28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93", "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123", "1", "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7", "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0", ["sm2", "SM2"]), kr.prototype = { getHexString: function(e) { return 0 == (1 & e.length) ? e : "0" + e }, hex2Byte: function(e) { if (e > 127 || e < -128) { var t = 255 & e; return t > 127 ? (t = 127 & e, t ^= 127, -(t + 1)) : t } return e }, Reset: function() { this.sm3keybase = new Br, this.sm3c3 = new Br; var e = this.p2.getX().toBigInteger().toRadix(16) , t = this.p2.getY().toBigInteger().toRadix(16); if (64 != e.length) for (var r = 64 - e.length, n = 0; n < r; n++) e = "0" + e; if (64 != t.length && 64 != t.length) for (r = 64 - t.length, n = 0; n < r; n++) t = "0" + t; var o = this.GetWords(e) , i = this.GetWords(t); this.sm3c3.BlockUpdate(o, 0, o.length), this.sm3keybase.BlockUpdate(o, 0, o.length), this.sm3keybase.BlockUpdate(i, 0, i.length), this.ct = 1, this.NextKey() }, NextKey: function() { var e = new Br(this.sm3keybase); e.Update(this.ct >> 24 & 255), e.Update(this.ct >> 16 & 255), e.Update(this.ct >> 8 & 255), e.Update(255 & this.ct), e.DoFinal(this.key, 0), this.keyOff = 0, this.ct++ }, InitEncipher: function(e) { var t = null , r = null , n = new Gt.crypto.ECDSA({ curve: "sm2" }) , o = n.generateKeyPairHex(); t = new z(o.ecprvhex,16); var i = o.ecpubhex; return r = ir.decodeFromHex(n.ecparams["curve"], i), this.p2 = e.multiply(t), this.Reset(), r }, EncryptBlock: function(e) { this.sm3c3.BlockUpdate(e, 0, e.length); for (var t = 0; t < e.length; t++) this.keyOff == this.key.length && this.NextKey(), e[t] ^= this.key[this.keyOff++] }, InitDecipher: function(e, t) { this.p2 = t.multiply(e), this.Reset() }, DecryptBlock: function(e) { for (var t = 0; t < e.length; t++) this.keyOff == this.key.length && this.NextKey(), e[t] ^= this.key[this.keyOff++]; this.sm3c3.BlockUpdate(e, 0, e.length) }, Dofinal: function(e) { var t = this.p2.getY().toBigInteger().toRadix(16); if (64 != t.length && 64 != t.length) for (var r = 64 - t.length, n = 0; n < r; n++) t = "0" + t; var o = this.GetWords(t); this.sm3c3.BlockUpdate(o, 0, o.length), this.sm3c3.DoFinal(e, 0), this.Reset() }, Encrypt: function(e, t) { var r = new Array(t.length); Array.Copy(t, 0, r, 0, t.length); var n = this.InitEncipher(e); this.EncryptBlock(r); var o, i = new Array(32); this.Dofinal(i); var a = n.getX().toBigInteger().toRadix(16) , l = n.getY().toBigInteger().toRadix(16); if (64 != a.length) for (var s = 64 - a.length, c = 0; c < s; c++) a = "0" + a; if (64 != l.length && 64 != l.length) for (s = 64 - l.length, c = 0; c < s; c++) l = "0" + l; switch (this.cipherMode) { case SM2CipherMode.C1C3C2: o = a + l + this.GetHex(i).toString() + this.GetHex(r).toString(); break; case SM2CipherMode.C1C2C3: o = n.getX().toBigInteger().toRadix(16) + n.getY().toBigInteger().toRadix(16) + this.GetHex(r).toString() + this.GetHex(i).toString(); break; default: throw new Error("[SM2:Decrypt]invalid type cipherMode(" + this.cipherMode + ")") } return o }, GetWords: function(e) { for (var t = [], r = e.length, n = 0; n < r; n += 2) t[t.length] = parseInt(e.substr(n, 2), 16); return t }, GetHex: function(e) { for (var t = new Array(32), r = 0, n = 0; n < 2 * e.length; n += 2) t[n >>> 3] |= parseInt(e[r]) << 24 - n % 8 * 4, r++; var o = new S.lib.WordArray.init(t,e.length); return o }, Decrypt: function(e, t) { var r, n = t, o = n.substr(0, 64), i = n.substr(0 + o.length, 64), a = new Gt.crypto.ECDSA({ curve: "sm2" }), l = a.ecparams["n"]; if (!(e pareTo(l.subtract(z.ONE)) > 0) && !(e pareTo(z.ONE) < 0)) { switch (this.cipherMode) { case SM2CipherMode.C1C3C2: r = n.substr(o.length + i.length, 64); var s = n.substr(o.length + i.length + 64); break; case SM2CipherMode.C1C2C3: s = n.substr(o.length + i.length, n.length - o.length - i.length - 64); r = n.substr(n.length - 64); break; default: throw new Error("[SM2:Decrypt]invalid type cipherMode(" + this.cipherMode + ")") } var c = this.GetWords(s) , u = this.CreatePoint(o, i); if (void 0 != u) { this.InitDecipher(e, u), this.DecryptBlock(c); var d = new Array(32); this.Dofinal(d); var A = this.GetHex(d).toString().toLowerCase() == r.toLowerCase(); if (A) { var p = this.GetHex(c) , g = S.enc.Utf8.stringify(p); return g } throw new Error("[SM2:Decrypt] C3 is not match!") } } }, CreatePoint: function(e, t) { var r = new Gt.crypto.ECDSA({ curve: "sm2" }) , n = (r.ecparams["curve"], "04" + e + t) , o = ir.decodeFromHex(r.ecparams["curve"], n); if (0 != o.isOnCurve()) return o } }, window.SM2CipherMode = { C1C2C3: 0, C1C3C2: 1 } }, }); // 这是我们需要的参数 var c1 = { key: "getSm4Key", value: function() { return Object(n["h"])() } var c2 = { key: "encryptTest", value: function(e, t) { var r = {} , o = this.getSm2Key() , i = Object(n["e"])(e); return r["sm4"] = Object(n["b"])(e + i, o.ecpubhex), r["sm2"] = Object(n["g"])(o.ecprvhex, t), r } } // 我只验证i = Object(n["e"])(e); 其他的可以自己验证 shuibingmeiyue = window.shuibingmeiyue yy = shuibingmeiyue("c99b")["e"] xixi = '{"paramData":{"infoCodes":["jyjgFlfgzcwj"],"marketId":"PXBXJ"},"timeStamp":1740991885140}' console.log("这是一个测试---",yy(xixi)) 在此致谢提示信息 - 吾爱破解 - 52pojie
爬虫逆向实战小记——解决webpack实记由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“爬虫逆向实战小记——解决webpack实记”