1 | ;
|
2 |
|
3 | var hexcase = 0;
|
4 | var b64pad = '';
|
5 | var chrsz = 8;
|
6 |
|
7 | function hex_md5(s) {
|
8 | return binl2hex(core_md5(str2binl(s), s.length * chrsz));
|
9 | }
|
10 |
|
11 | function b64_md5(s) {
|
12 | return binl2b64(core_md5(str2binl(s), s.length * chrsz));
|
13 | }
|
14 |
|
15 | function str_md5(s) {
|
16 | return binl2str(core_md5(str2binl(s), s.length * chrsz));
|
17 | }
|
18 |
|
19 | function hex_hmac_md5(key, data) {
|
20 | return binl2hex(core_hmac_md5(key, data));
|
21 | }
|
22 |
|
23 | function b64_hmac_md5(key, data) {
|
24 | return binl2b64(core_hmac_md5(key, data));
|
25 | }
|
26 |
|
27 | function str_hmac_md5(key, data) {
|
28 | return binl2str(core_hmac_md5(key, data));
|
29 | }
|
30 |
|
31 | function md5_vm_test() {
|
32 | return hex_md5('abc') == '900150983cd24fb0d6963f7d28e17f72';
|
33 | }
|
34 |
|
35 | function core_md5(x, len) {
|
36 | x[len >> 5] |= 0x80 << len % 32;
|
37 | x[(len + 64 >>> 9 << 4) + 14] = len;
|
38 | var a = 1732584193;
|
39 | var b = -271733879;
|
40 | var c = -1732584194;
|
41 | var d = 271733878;
|
42 | for (var i = 0; i < x.length; i += 16) {
|
43 | var olda = a;
|
44 | var oldb = b;
|
45 | var oldc = c;
|
46 | var oldd = d;
|
47 | a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
|
48 | d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
|
49 | c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
|
50 | b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
51 | a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
|
52 | d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
53 | c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
54 | b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
|
55 | a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
56 | d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
57 | c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
|
58 | b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
59 | a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
60 | d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
|
61 | c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
62 | b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
63 | a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
|
64 | d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
65 | c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
|
66 | b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
|
67 | a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
|
68 | d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
|
69 | c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
|
70 | b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
|
71 | a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
|
72 | d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
73 | c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
|
74 | b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
75 | a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
76 | d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
|
77 | c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
78 | b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
79 | a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
|
80 | d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
81 | c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
82 | b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
|
83 | a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
84 | d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
85 | c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
|
86 | b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
87 | a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
|
88 | d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
|
89 | c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
|
90 | b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
|
91 | a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
|
92 | d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
|
93 | c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
|
94 | b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
|
95 | a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
|
96 | d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
97 | c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
98 | b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
|
99 | a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
100 | d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
101 | c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
|
102 | b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
103 | a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
104 | d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
|
105 | c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
106 | b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
107 | a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
|
108 | d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
109 | c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
|
110 | b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
|
111 | a = safe_add(a, olda);
|
112 | b = safe_add(b, oldb);
|
113 | c = safe_add(c, oldc);
|
114 | d = safe_add(d, oldd);
|
115 | }
|
116 | return Array(a, b, c, d);
|
117 | }
|
118 |
|
119 | function md5_cmn(q, a, b, x, s, t) {
|
120 | return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
|
121 | }
|
122 |
|
123 | function md5_ff(a, b, c, d, x, s, t) {
|
124 | return md5_cmn(b & c | ~b & d, a, b, x, s, t);
|
125 | }
|
126 |
|
127 | function md5_gg(a, b, c, d, x, s, t) {
|
128 | return md5_cmn(b & d | c & ~d, a, b, x, s, t);
|
129 | }
|
130 |
|
131 | function md5_hh(a, b, c, d, x, s, t) {
|
132 | return md5_cmn(b ^ c ^ d, a, b, x, s, t);
|
133 | }
|
134 |
|
135 | function md5_ii(a, b, c, d, x, s, t) {
|
136 | return md5_cmn(c ^ (b | ~d), a, b, x, s, t);
|
137 | }
|
138 |
|
139 | function core_hmac_md5(key, data) {
|
140 | var bkey = str2binl(key);
|
141 | if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
|
142 | var ipad = Array(16),
|
143 | opad = Array(16);
|
144 | for (var i = 0; i < 16; i++) {
|
145 | ipad[i] = bkey[i] ^ 0x36363636;
|
146 | opad[i] = bkey[i] ^ 0x5C5C5C5C;
|
147 | }
|
148 | var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
|
149 | return core_md5(opad.concat(hash), 512 + 128);
|
150 | }
|
151 |
|
152 | function safe_add(x, y) {
|
153 | var lsw = (x & 0xFFFF) + (y & 0xFFFF);
|
154 | var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
155 | return msw << 16 | lsw & 0xFFFF;
|
156 | }
|
157 |
|
158 | function bit_rol(num, cnt) {
|
159 | return num << cnt | num >>> 32 - cnt;
|
160 | }
|
161 |
|
162 | function str2binl(str) {
|
163 | var bin = Array();
|
164 | var mask = (1 << chrsz) - 1;
|
165 | for (var i = 0; i < str.length * chrsz; i += chrsz) {
|
166 | bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32;
|
167 | }return bin;
|
168 | }
|
169 |
|
170 | function binl2str(bin) {
|
171 | var str = '';
|
172 | var mask = (1 << chrsz) - 1;
|
173 | for (var i = 0; i < bin.length * 32; i += chrsz) {
|
174 | str += String.fromCharCode(bin[i >> 5] >>> i % 32 & mask);
|
175 | }return str;
|
176 | }
|
177 |
|
178 | function binl2hex(binarray) {
|
179 | var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef';
|
180 | var str = '';
|
181 | for (var i = 0; i < binarray.length * 4; i++) {
|
182 | str += hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 0xF) + hex_tab.charAt(binarray[i >> 2] >> i % 4 * 8 & 0xF);
|
183 | }
|
184 | return str;
|
185 | }
|
186 |
|
187 | function binl2b64(binarray) {
|
188 | var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
189 | var str = '';
|
190 | for (var i = 0; i < binarray.length * 4; i += 3) {
|
191 | var triplet = (binarray[i >> 2] >> 8 * (i % 4) & 0xFF) << 16 | (binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4) & 0xFF) << 8 | binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4) & 0xFF;
|
192 | for (var j = 0; j < 4; j++) {
|
193 | if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;else str += tab.charAt(triplet >> 6 * (3 - j) & 0x3F);
|
194 | }
|
195 | }
|
196 | return str;
|
197 | }
|
198 |
|
199 | module.exports = { hex_md5: hex_md5 };
|
200 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1kNS5qcyJdLCJuYW1lcyI6WyJoZXhjYXNlIiwiYjY0cGFkIiwiY2hyc3oiLCJoZXhfbWQ1IiwicyIsImJpbmwyaGV4IiwiY29yZV9tZDUiLCJzdHIyYmlubCIsImxlbmd0aCIsImI2NF9tZDUiLCJiaW5sMmI2NCIsInN0cl9tZDUiLCJiaW5sMnN0ciIsImhleF9obWFjX21kNSIsImtleSIsImRhdGEiLCJjb3JlX2htYWNfbWQ1IiwiYjY0X2htYWNfbWQ1Iiwic3RyX2htYWNfbWQ1IiwibWQ1X3ZtX3Rlc3QiLCJ4IiwibGVuIiwiYSIsImIiLCJjIiwiZCIsImkiLCJvbGRhIiwib2xkYiIsIm9sZGMiLCJvbGRkIiwibWQ1X2ZmIiwibWQ1X2dnIiwibWQ1X2hoIiwibWQ1X2lpIiwic2FmZV9hZGQiLCJBcnJheSIsIm1kNV9jbW4iLCJxIiwidCIsImJpdF9yb2wiLCJia2V5IiwiaXBhZCIsIm9wYWQiLCJoYXNoIiwiY29uY2F0IiwieSIsImxzdyIsIm1zdyIsIm51bSIsImNudCIsInN0ciIsImJpbiIsIm1hc2siLCJjaGFyQ29kZUF0IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiYmluYXJyYXkiLCJoZXhfdGFiIiwiY2hhckF0IiwidGFiIiwidHJpcGxldCIsImoiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUlBLFVBQVUsQ0FBZDtBQUNBLElBQUlDLFNBQVMsRUFBYjtBQUNBLElBQUlDLFFBQVEsQ0FBWjs7QUFFQSxTQUFTQyxPQUFULENBQWtCQyxDQUFsQixFQUFxQjtBQUNuQixTQUFPQyxTQUFTQyxTQUFTQyxTQUFTSCxDQUFULENBQVQsRUFBc0JBLEVBQUVJLE1BQUYsR0FBV04sS0FBakMsQ0FBVCxDQUFQO0FBQ0Q7O0FBRUQsU0FBU08sT0FBVCxDQUFrQkwsQ0FBbEIsRUFBcUI7QUFDbkIsU0FBT00sU0FBU0osU0FBU0MsU0FBU0gsQ0FBVCxDQUFULEVBQXNCQSxFQUFFSSxNQUFGLEdBQVdOLEtBQWpDLENBQVQsQ0FB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a0QsT0FBT1MsSUFBSUQsTUFBSixDQUFZRSxXQUFXLEtBQUssSUFBSUMsQ0FBVCxDQUFaLEdBQTJCLElBQXRDLENBQVA7QUFDL0Q7QUFDRjtBQUNELFNBQU9YLEdBQVA7QUFDRDs7QUFFRFksT0FBT0MsT0FBUCxHQUFpQixFQUFFN0QsU0FBU0EsT0FBWCxFQUFqQiIsImZpbGUiOiJtZDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGV4Y2FzZSA9IDBcbnZhciBiNjRwYWQgPSAnJ1xudmFyIGNocnN6ID0gOFxuXG5mdW5jdGlvbiBoZXhfbWQ1IChzKSB7XG4gIHJldHVybiBiaW5sMmhleChjb3JlX21kNShzdHIyYmlubChzKSwgcy5sZW5ndGggKiBjaHJzeikpXG59XG5cbmZ1bmN0aW9uIGI2NF9tZDUgKHMpIHtcbiAgcmV0dXJuIGJpbmwyYjY0KGNvcmVfbWQ1KHN0cjJiaW5sKHMpLCBzLmxlbmd0aCAqIGNocnN6KSlcbn1cblxuZnVuY3Rpb24gc3RyX21kNSAocykge1xuICByZXR1cm4gYmlubDJzdHIoY29yZV9tZDUoc3RyMmJpbmwocyksIHMubGVuZ3RoICogY2hyc3opKVxufVxuXG5mdW5jdGlvbiBoZXhfaG1hY19tZDUgKGtleSwgZGF0YSkge1xuICByZXR1cm4gYmlubDJoZXgoY29yZV9obWFjX21kNShrZXksIGRhdGEpKVxufVxuXG5mdW5jdGlvbiBiNjRfaG1hY19tZDUgKGtleSwgZGF0YSkge1xuICByZXR1cm4gYmlubDJiNjQoY29yZV9obWFjX21kNShrZXksIGRhdGEpKVxufVxuXG5mdW5jdGlvbiBzdHJfaG1hY19tZDUgKGtleSwgZGF0YSkge1xuICByZXR1cm4gYmlubDJzdHIoY29yZV9obWFjX21kNShrZXksIGRhdGEpKVxufVxuXG5mdW5jdGlvbiBtZDVfdm1fdGVzdCAoKSB7XG4gIHJldHVybiBoZXhfbWQ1KCdhYmMnKSA9PSAnOTAwMTUwOTgzY2QyNGZiMGQ2OTYzZjdkMjhlMTdmNzInXG59XG5cbmZ1bmN0aW9uIGNvcmVfbWQ1ICh4LCBsZW4pIHtcbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCAoKGxlbikgJSAzMilcbiAgeFsoKChsZW4gKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbGVuXG4gIHZhciBhID0gMTczMjU4NDE5M1xuICB2YXIgYiA9IC0yNzE3MzM4NzlcbiAgdmFyIGMgPSAtMTczMjU4NDE5NFxuICB2YXIgZCA9IDI3MTczMzg3OFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgdmFyIG9sZGEgPSBhXG4gICAgdmFyIG9sZGIgPSBiXG4gICAgdmFyIG9sZGMgPSBjXG4gICAgdmFyIG9sZGQgPSBkXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAwXSwgNywgLTY4MDg3NjkzNilcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4NilcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KVxuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMClcbiAgICBhID0gbWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KVxuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KVxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSlcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKVxuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KVxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKVxuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpXG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MClcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMClcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMilcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsIDY0MzcxNzcxMylcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArIDBdLCAyMCwgLTM3Mzg5NzMwMilcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKVxuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCA5LCAzODAxNjA4MylcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTQsIC02NjA0NzgzMzUpXG4gICAgYiA9IG1kNV9nZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNSwgNTY4NDQ2NDM4KVxuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCA5LCAtMTAxOTgwMzY5MClcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSlcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArIDhdLCAyMCwgMTE2MzUzMTUwMSlcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNSwgLTE0NDQ2ODE0NjcpXG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KVxuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgN10sIDE0LCAxNzM1MzI4NDczKVxuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNCwgLTM3ODU1OClcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArIDhdLCAxMSwgLTIwMjI1NzQ0NjMpXG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE2LCAxODM5MDMwNTYyKVxuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgMTRdLCAyMywgLTM1MzA5NTU2KVxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgMV0sIDQsIC0xNTMwOTkyMDYwKVxuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgNF0sIDExLCAxMjcyODkzMzUzKVxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgN10sIDE2LCAtMTU1NDk3NjMyKVxuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDQsIDY4MTI3OTE3NClcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArIDBdLCAxMSwgLTM1ODUzNzIyMilcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNiwgLTcyMjUyMTk3OSlcbiAgICBiID0gbWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNCwgLTY0MDM2NDQ4NylcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArIDEyXSwgMTEsIC00MjE4MTU4MzUpXG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAyXSwgMjMsIC05OTUzMzg2NTEpXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAwXSwgNiwgLTE5ODYzMDg0NClcbiAgICBkID0gbWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSlcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KVxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KVxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpXG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KVxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKVxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSlcbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKVxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSlcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSlcbiAgICBhID0gc2FmZV9hZGQoYSwgb2xkYSlcbiAgICBiID0gc2FmZV9hZGQoYiwgb2xkYilcbiAgICBjID0gc2FmZV9hZGQoYywgb2xkYylcbiAgICBkID0gc2FmZV9hZGQoZCwgb2xkZClcbiAgfVxuICByZXR1cm4gQXJyYXkoYSwgYiwgYywgZClcbn1cblxuZnVuY3Rpb24gbWQ1X2NtbiAocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZV9hZGQoYml0X3JvbChzYWZlX2FkZChzYWZlX2FkZChhLCBxKSwgc2FmZV9hZGQoeCwgdCkpLCBzKSwgYilcbn1cblxuZnVuY3Rpb24gbWQ1X2ZmIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVfY21uKChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KVxufVxuXG5mdW5jdGlvbiBtZDVfZ2cgKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNV9jbW4oKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpXG59XG5cbmZ1bmN0aW9uIG1kNV9oaCAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1X2NtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpXG59XG5cbmZ1bmN0aW9uIG1kNV9paSAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1X2NtbihjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdClcbn1cblxuZnVuY3Rpb24gY29yZV9obWFjX21kNSAoa2V5LCBkYXRhKSB7XG4gIHZhciBia2V5ID0gc3RyMmJpbmwoa2V5KVxuICBpZiAoYmtleS5sZW5ndGggPiAxNikgYmtleSA9IGNvcmVfbWQ1KGJrZXksIGtleS5sZW5ndGggKiBjaHJzeilcbiAgdmFyIGlwYWQgPSBBcnJheSgxNiksIG9wYWQgPSBBcnJheSgxNilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgaXBhZFtpXSA9IGJrZXlbaV0gXiAweDM2MzYzNjM2XG4gICAgb3BhZFtpXSA9IGJrZXlbaV0gXiAweDVDNUM1QzVDXG4gIH1cbiAgdmFyIGhhc2ggPSBjb3JlX21kNShpcGFkLmNvbmNhdChzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogY2hyc3opXG4gIHJldHVybiBjb3JlX21kNShvcGFkLmNvbmNhdChoYXNoKSwgNTEyICsgMTI4KVxufVxuXG5mdW5jdGlvbiBzYWZlX2FkZCAoeCwgeSkge1xuICB2YXIgbHN3ID0gKHggJiAweEZGRkYpICsgKHkgJiAweEZGRkYpXG4gIHZhciBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KVxuICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhGRkZGKVxufVxuXG5mdW5jdGlvbiBiaXRfcm9sIChudW0sIGNudCkge1xuICByZXR1cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSlcbn1cblxuZnVuY3Rpb24gc3RyMmJpbmwgKHN0cikge1xuICB2YXIgYmluID0gQXJyYXkoKVxuICB2YXIgbWFzayA9ICgxIDw8IGNocnN6KSAtIDFcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoICogY2hyc3o7IGkgKz0gY2hyc3opIGJpbltpID4+IDVdIHw9IChzdHIuY2hhckNvZGVBdChpIC8gY2hyc3opICYgbWFzaykgPDwgKGkgJSAzMilcbiAgcmV0dXJuIGJpblxufVxuXG5mdW5jdGlvbiBiaW5sMnN0ciAoYmluKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWFzayA9ICgxIDw8IGNocnN6KSAtIDFcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoICogMzI7IGkgKz0gY2hyc3opIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChiaW5baSA+PiA1XSA+Pj4gKGkgJSAzMikpICYgbWFzaylcbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBiaW5sMmhleCAoYmluYXJyYXkpIHtcbiAgdmFyIGhleF90YWIgPSBoZXhjYXNlID8gJzAxMjM0NTY3ODlBQkNERUYnIDogJzAxMjM0NTY3ODlhYmNkZWYnXG4gIHZhciBzdHIgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJpbmFycmF5Lmxlbmd0aCAqIDQ7IGkrKykge1xuICAgIHN0ciArPSBoZXhfdGFiLmNoYXJBdCgoYmluYXJyYXlbaSA+PiAyXSA+PiAoKGkgJSA0KSAqIDggKyA0KSkgJiAweEYpICsgaGV4X3RhYi5jaGFyQXQoKGJpbmFycmF5W2kgPj4gMl0gPj4gKChpICUgNCkgKiA4KSkgJiAweEYpXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBiaW5sMmI2NCAoYmluYXJyYXkpIHtcbiAgdmFyIHRhYiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuICB2YXIgc3RyID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW5hcnJheS5sZW5ndGggKiA0OyBpICs9IDMpIHtcbiAgICB2YXIgdHJpcGxldCA9ICgoKGJpbmFycmF5W2kgPj4gMl0gPj4gOCAqIChpICUgNCkpICYgMHhGRikgPDwgMTYpIHwgKCgoYmluYXJyYXlbaSArIDEgPj4gMl0gPj4gOCAqICgoaSArIDEpICUgNCkpICYgMHhGRikgPDwgOCkgfCAoKGJpbmFycmF5W2kgKyAyID4+IDJdID4+IDggKiAoKGkgKyAyKSAlIDQpKSAmIDB4RkYpXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgIGlmIChpICogOCArIGogKiA2ID4gYmluYXJyYXkubGVuZ3RoICogMzIpIHN0ciArPSBiNjRwYWQ7IGVsc2Ugc3RyICs9IHRhYi5jaGFyQXQoKHRyaXBsZXQgPj4gNiAqICgzIC0gaikpICYgMHgzRilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgaGV4X21kNTogaGV4X21kNSB9XG4iXX0= |
\ | No newline at end of file |