var WECHAT = {};
(function() {
WECHAT.wxEncrypt = function(p, f, d) {
var c = w.enc.Base64.parse(f + '=');
f = w.lib.WordArray.create(w.enc.Latin1.parse(f).words, 16);
var s = w.enc.Latin1.parse(function() {
for (var c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'.split(''), d = '', f = 0; 16 > f; f++) d += c[Math.floor(Math.random() * c.length)];
return d
}());
p = w.enc.Utf8.parse(p);
var v = w.enc.Hex.parse(('00000000' + Math.ceil(p.sigBytes).toString(16)).slice(-8));
s.concat(v).concat(p).concat(w.enc.Latin1.parse(d));
return w.AES.encrypt(s, c, {
iv: f
})
};
WECHAT.wxDecrypt = function(p, f, d) {
var c = w.enc.Base64.parse(f + '=');
f = w.lib.WordArray.create(w.enc.Latin1.parse(f).words, 16);
p = w.AES.decrypt(p, c, {
iv: f
}).toString({
stringify: function(c) {
for (var d = c.words, f = c.sigBytes, e = [], q = 16; 20 > q; q++) {
var a = d[q >>> 2] >>> 24 - q % 4 * 8 & 255;
e.push((a >>> 4).toString(16));
e.push((a & 15).toString(16))
}
for (var p = parseInt(e.join(''), 16) + 20, e = [], q = 20; q < p; q++) a = d[q >>> 2] >>> 24 - q % 4 * 8 & 255, e.push(String.fromCharCode(a));
c = decodeURIComponent(escape(e.join('')));
e = [];
for (q = p; q < f; q++) a = d[q >>> 2] >>> 24 - q % 4 * 8 & 255, e.push(String.fromCharCode(a));
d = e.join('');
return [c, d]
}
});
return p[1] == d ? p[0] : ''
};
WECHAT.wxSignature = function(p, f, d, c) {
p = [p, f, d, c].sort().join('');
return w.SHA1(p)
};
WECHAT.SHA1 = function(p) {
return w.SHA1(p)
};
var w = w || function(p, f) {
var d = {},
c = d.lib = {},
s = function() {},
v = c.Base = {
extend: function(b) {
s.prototype = this;
var a = new s;
b && a.mixIn(b);
a.hasOwnProperty('init') || (a.init = function() {
a.$super.init.apply(this, arguments)
});
a.init.prototype = a;
a.$super = this;
return a
},
create: function() {
var b = this.extend();
b.init.apply(b, arguments);
return b
},
init: function() {},
mixIn: function(b) {
for (var a in b) b.hasOwnProperty(a) && (this[a] = b[a]);
b.hasOwnProperty('toString') && (this.toString = b.toString)
},
clone: function() {
return this.init.prototype.extend(this)
}
},
u = c.WordArray = v.extend({
init: function(b, a) {
b = this.words = b || [];
this.sigBytes = a != f ? a : 4 * b.length
},
toString: function(b) {
return (b || q).stringify(this)
},
concat: function(b) {
var a = this.words,
h = b.words,
m = this.sigBytes;
b = b.sigBytes;
this.clamp();
if (m % 4)
for (var t = 0; t < b; t++) a[m + t >>> 2] |= (h[t >>> 2] >>> 24 - t % 4 * 8 & 255) << 24 - (m + t) % 4 * 8;
else if (65535 < h.length)
for (t = 0; t < b; t += 4) a[m + t >>> 2] = h[t >>> 2];
else a.push.apply(a, h);
this.sigBytes += b;
return this
},
clamp: function() {
var b = this.words,
a = this.sigBytes;
b[a >>> 2] &= 4294967295 << 32 - a % 4 * 8;
b.length = p.ceil(a / 4)
},
clone: function() {
var b = v.clone.call(this);
b.words = this.words.slice(0);
return b
},
random: function(b) {
for (var a = [], h = 0; h < b; h += 4) a.push(4294967296 * p.random() | 0);
return new u.init(a, b)
}
}),
e = d.enc = {},
q = e.Hex = {
stringify: function(b) {
var a = b.words;
b = b.sigBytes;
for (var h = [], m = 0; m < b; m++) {
var t = a[m >>> 2] >>> 24 - m % 4 * 8 & 255;
h.push((t >>> 4).toString(16));
h.push((t & 15).toString(16))
}
return h.join('')
},
parse: function(b) {
for (var a = b.length, h = [], m = 0; m < a; m += 2) h[m >>> 3] |= parseInt(b.substr(m, 2), 16) << 24 - m % 8 * 4;
return new u.init(h, a / 2)
}
},
a = e.Latin1 = {
stringify: function(b) {
var a = b.words;
b = b.sigBytes;
for (var h = [], m = 0; m < b; m++) h.push(String.fromCharCode(a[m >>> 2] >>> 24 - m % 4 * 8 & 255));
return h.join('')
},
parse: function(b) {
for (var a = b.length, h = [], m = 0; m < a; m++) h[m >>> 2] |= (b.charCodeAt(m) & 255) << 24 - m % 4 * 8;
return new u.init(h, a)
}
},
y = e.Utf8 = {
stringify: function(b) {
try {
return decodeURIComponent(escape(a.stringify(b)))
} catch (r) {
throw Error('Malformed UTF-8 data');
}
},
parse: function(b) {
return a.parse(unescape(encodeURIComponent(b)))
}
},
r = c.BufferedBlockAlgorithm = v.extend({
reset: function() {
this._data = new u.init;
this._nDataBytes = 0
},
_append: function(b) {
'string' == typeof b && (b = y.parse(b));
this._data.concat(b);
this._nDataBytes += b.sigBytes
},
_process: function(b) {
var a = this._data,
h = a.words,
m = a.sigBytes,
t = this.blockSize,
r = m / (4 * t),
r = b ? p.ceil(r) : p.max((r | 0) - this._minBufferSize, 0);
b = r * t;
m = p.min(4 * b, m);
if (b) {
for (var c = 0; c < b; c += t) this._doProcessBlock(h, c);
c = h.splice(0, b);
a.sigBytes -= m
}
return new u.init(c, m)
},
clone: function() {
var b = v.clone.call(this);
b._data = this._data.clone();
return b
},
_minBufferSize: 0
});
c.Hasher = r.extend({
cfg: v.extend(),
init: function(b) {
this.cfg = this.cfg.extend(b);
this.reset()
},
reset: function() {
r.reset.call(this);
this._doReset()
},
update: function(b) {
this._append(b);
this._process();
return this
},
finalize: function(b) {
b && this._append(b);
return this._doFinalize()
},
blockSize: 16,
_createHelper: function(b) {
return function(a, h) {
return (new b.init(h)).finalize(a)
}
},
_createHmacHelper: function(b) {
return function(a, h) {
return (new A.HMAC.init(b, h)).finalize(a)
}
}
});
var A = d.algo = {};
return d
}(Math);
(function() {
var p = w,
f = p.lib.WordArray;
p.enc.Base64 = {
stringify: function(d) {
var c = d.words,
f = d.sigBytes,
p = this._map;
d.clamp();
d = [];
for (var u = 0; u < f; u += 3)
for (var e = (c[u >>> 2] >>> 24 - u % 4 * 8 & 255) << 16 | (c[u + 1 >>> 2] >>> 24 - (u + 1) % 4 * 8 & 255) << 8 | c[u + 2 >>> 2] >>> 24 - (u + 2) % 4 * 8 & 255, q = 0; 4 > q && u + .75 * q < f; q++) d.push(p.charAt(e >>> 6 * (3 - q) & 63));
if (c = p.charAt(64))
for (; d.length % 4;) d.push(c);
return d.join('')
},
parse: function(d) {
var c = d.length,
p = this._map,
v = p.charAt(64);
v && (v = d.indexOf(v), -1 != v && (c = v));
for (var v = [], u = 0, e = 0; e < c; e++)
if (e % 4) {
var q = p.indexOf(d.charAt(e - 1)) << e % 4 * 2,
a = p.indexOf(d.charAt(e)) >>> 6 - e % 4 * 2;
v[u >>> 2] |= (q | a) << 24 - u % 4 * 8;
u++
}
return f.create(v, u)
},
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
}
})();
(function(p) {
function f(a, c, b, d, h, m, t) {
a = a + (c & b | ~c & d) + h + t;
return (a << m | a >>> 32 - m) + c
}
function d(a, c, b, d, h, m, t) {
a = a + (c & d | b & ~d) + h + t;
return (a << m | a >>> 32 - m) + c
}
function c(a, c, b, d, h, m, t) {
a = a + (c ^ b ^ d) + h + t;
return (a << m | a >>> 32 - m) + c
}
function s(a, c, b, d, h, m, t) {
a = a + (b ^ (c | ~d)) + h + t;
return (a << m | a >>> 32 - m) + c
}
for (var v = w, u = v.lib, e = u.WordArray, q = u.Hasher, u = v.algo, a = [], y = 0; 64 > y; y++) a[y] = 4294967296 * p.abs(p.sin(y + 1)) | 0;
u = u.MD5 = q.extend({
_doReset: function() {
this._hash = new e.init([1732584193, 4023233417, 2562383102, 271733878])
},
_doProcessBlock: function(r, e) {
for (var b = 0; 16 > b; b++) {
var q = e + b,
h = r[q];
r[q] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360
}
var b = this._hash.words,
q = r[e + 0],
h = r[e + 1],
m = r[e + 2],
t = r[e + 3],
p = r[e + 4],
u = r[e + 5],
v = r[e + 6],
y = r[e + 7],
w = r[e + 8],
C = r[e + 9],
D = r[e + 10],
E = r[e + 11],
F = r[e + 12],
G = r[e + 13],
H = r[e + 14],
I = r[e + 15],
g = b[0],
n = b[1],
k = b[2],
l = b[3],
g = f(g, n, k, l, q, 7, a[0]),
l = f(l, g, n, k, h, 12, a[1]),
k = f(k, l, g, n, m, 17, a[2]),
n = f(n, k, l, g, t, 22, a[3]),
g = f(g, n, k, l, p, 7, a[4]),
l = f(l, g, n, k, u, 12, a[5]),
k = f(k, l, g, n, v, 17, a[6]),
n = f(n, k, l, g, y, 22, a[7]),
g = f(g, n, k, l, w, 7, a[8]),
l = f(l, g, n, k, C, 12, a[9]),
k = f(k, l, g, n, D, 17, a[10]),
n = f(n, k, l, g, E, 22, a[11]),
g = f(g, n, k, l, F, 7, a[12]),
l = f(l, g, n, k, G, 12, a[13]),
k = f(k, l, g, n, H, 17, a[14]),
n = f(n, k, l, g, I, 22, a[15]),
g = d(g, n, k, l, h, 5, a[16]),
l = d(l, g, n, k, v, 9, a[17]),
k = d(k, l, g, n, E, 14, a[18]),
n = d(n, k, l, g, q, 20, a[19]),
g = d(g, n, k, l, u, 5, a[20]),
l = d(l, g, n, k, D, 9, a[21]),
k = d(k, l, g, n, I, 14, a[22]),
n = d(n, k, l, g, p, 20, a[23]),
g = d(g, n, k, l, C, 5, a[24]),
l = d(l, g, n, k, H, 9, a[25]),
k = d(k, l, g, n, t, 14, a[26]),
n = d(n, k, l, g, w, 20, a[27]),
g = d(g, n, k, l, G, 5, a[28]),
l = d(l, g, n, k, m, 9, a[29]),
k = d(k, l, g, n, y, 14, a[30]),
n = d(n, k, l, g, F, 20, a[31]),
g = c(g, n, k, l, u, 4, a[32]),
l = c(l, g, n, k, w, 11, a[33]),
k = c(k, l, g, n, E, 16, a[34]),
n = c(n, k, l, g, H, 23, a[35]),
g = c(g, n, k, l, h, 4, a[36]),
l = c(l, g, n, k, p, 11, a[37]),
k = c(k, l, g, n, y, 16, a[38]),
n = c(n, k, l, g, D, 23, a[39]),
g = c(g, n, k, l, G, 4, a[40]),
l = c(l, g, n, k, q, 11, a[41]),
k = c(k, l, g, n, t, 16, a[42]),
n = c(n, k, l, g, v, 23, a[43]),
g = c(g, n, k, l, C, 4, a[44]),
l = c(l, g, n, k, F, 11, a[45]),
k = c(k, l, g, n, I, 16, a[46]),
n = c(n, k, l, g, m, 23, a[47]),
g = s(g, n, k, l, q, 6, a[48]),
l = s(l, g, n, k, y, 10, a[49]),
k = s(k, l, g, n, H, 15, a[50]),
n = s(n, k, l, g, u, 21, a[51]),
g = s(g, n, k, l, F, 6, a[52]),
l = s(l, g, n, k, t, 10, a[53]),
k = s(k, l, g, n, D, 15, a[54]),
n = s(n, k, l, g, h, 21, a[55]),
g = s(g, n, k, l, w, 6, a[56]),
l = s(l, g, n, k, I, 10, a[57]),
k = s(k, l, g, n, v, 15, a[58]),
n = s(n, k, l, g, G, 21, a[59]),
g = s(g, n, k, l, p, 6, a[60]),
l = s(l, g, n, k, E, 10, a[61]),
k = s(k, l, g, n, m, 15, a[62]),
n = s(n, k, l, g, C, 21, a[63]);
b[0] = b[0] + g | 0;
b[1] = b[1] + n | 0;
b[2] = b[2] + k | 0;
b[3] = b[3] + l | 0
},
_doFinalize: function() {
var a = this._data,
c = a.words,
b = 8 * this._nDataBytes,
d = 8 * a.sigBytes;
c[d >>> 5] |= 128 << 24 - d % 32;
var h = p.floor(b / 4294967296);
c[(d + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360;
c[(d + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360;
a.sigBytes = 4 * (c.length + 1);
this._process();
a = this._hash;
c = a.words;
for (b = 0; 4 > b; b++) d = c[b], c[b] = (d << 8 | d >>> 24) & 16711935 | (d << 24 | d >>> 8) & 4278255360;
return a
},
clone: function() {
var a = q.clone.call(this);
a._hash = this._hash.clone();
return a
}
});
v.MD5 = q._createHelper(u);
v.HmacMD5 = q._createHmacHelper(u)
})(Math);
(function() {
var p = w,
f = p.lib,
d = f.Base,
c = f.WordArray,
f = p.algo,
s = f.EvpKDF = d.extend({
cfg: d.extend({
keySize: 4,
hasher: f.MD5,
iterations: 1
}),
init: function(c) {
this.cfg = this.cfg.extend(c)
},
compute: function(d, f) {
for (var e = this.cfg, q = e.hasher.create(), a = c.create(), p = a.words, r = e.keySize, e = e.iterations; p.length < r;) {
s && q.update(s);
var s = q.update(d).finalize(f);
q.reset();
for (var b = 1; b < e; b++) s = q.finalize(s), q.reset();
a.concat(s)
}
a.sigBytes = 4 * r;
return a
}
});
p.EvpKDF = function(c, d, e) {
return s.create(e).compute(c, d)
}
})();
w.lib.Cipher || function(p) {
var f = w,
d = f.lib,
c = d.Base,
s = d.WordArray,
v = d.BufferedBlockAlgorithm,
u = f.enc.Base64,
e = f.algo.EvpKDF,
q = d.Cipher = v.extend({
cfg: c.extend(),
createEncryptor: function(a, b) {
return this.create(this._ENC_XFORM_MODE, a, b)
},
createDecryptor: function(a, b) {
return this.create(this._DEC_XFORM_MODE, a, b)
},
init: function(a, b, c) {
this.cfg = this.cfg.extend(c);
this._xformMode = a;
this._key = b;
this.reset()
},
reset: function() {
v.reset.call(this);
this._doReset()
},
process: function(a) {
this._append(a);
return this._process()
},
finalize: function(a) {
a && this._append(a);
return this._doFinalize()
},
keySize: 4,
ivSize: 4,
_ENC_XFORM_MODE: 1,
_DEC_XFORM_MODE: 2,
_createHelper: function(a) {
return {
encrypt: function(m, c, d) {
return ('string' == typeof c ? x : b).encrypt(a, m, c, d)
},
decrypt: function(m, c, d) {
return ('string' == typeof c ? x : b).decrypt(a, m, c, d)
}
}
}
});
d.StreamCipher = q.extend({
_doFinalize: function() {
return this._process(!0)
},
blockSize: 1
});
var a = f.mode = {},
y = function(a, b, c) {
var d = this._iv;
d ? this._iv = p : d = this._prevBlock;
for (var e = 0; e < c; e++) a[b + e] ^= d[e]
},
r = (d.BlockCipherMode = c.extend({
createEncryptor: function(a, b) {
return this.Encryptor.create(a, b)
},
createDecryptor: function(a, b) {
return this.Decryptor.create(a, b)
},
init: function(a, b) {
this._cipher = a;
this._iv = b
}
})).extend();
r.Encryptor = r.extend({
processBlock: function(a, b) {
var c = this._cipher,
d = c.blockSize;
y.call(this, a, b, d);
c.encryptBlock(a, b);
this._prevBlock = a.slice(b, b + d)
}
});
r.Decryptor = r.extend({
processBlock: function(a, b) {
var c = this._cipher,
d = c.blockSize,
e = a.slice(b, b + d);
c.decryptBlock(a, b);
y.call(this, a, b, d);
this._prevBlock = e
}
});
a = a.CBC = r;
r = (f.pad = {}).Pkcs7 = {
pad: function(a, b) {
for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, e = [], f = 0; f < c; f += 4) e.push(d);
c = s.create(e, c);
a.concat(c)
},
unpad: function(a) {
a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
}
};
d.BlockCipher = q.extend({
cfg: q.cfg.extend({
mode: a,
padding: r
}),
reset: function() {
q.reset.call(this);
var a = this.cfg,
b = a.iv,
a = a.mode;
if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor;
else c = a.createDecryptor, this._minBufferSize = 1;
this._mode = c.call(a, this, b && b.words)
},
_doProcessBlock: function(a, b) {
this._mode.processBlock(a, b)
},
_doFinalize: function() {
var a = this.cfg.padding;
if (this._xformMode == this._ENC_XFORM_MODE) {
a.pad(this._data, this.blockSize);
var b = this._process(!0)
} else b = this._process(!0), a.unpad(b);
return b
},
blockSize: 4
});
var A = d.CipherParams = c.extend({
init: function(a) {
this.mixIn(a)
},
toString: function(a) {
return (a || this.formatter).stringify(this)
}
}),
a = (f.format = {}).OpenSSL = {
stringify: function(a) {
var b = a.ciphertext;
a = a.salt;
return (a ? s.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(u)
},
parse: function(a) {
a = u.parse(a);
var b = a.words;
if (1398893684 == b[0] && 1701076831 == b[1]) {
var c = s.create(b.slice(2, 4));
b.splice(0, 4);
a.sigBytes -= 16
}
return A.create({
ciphertext: a,
salt: c
})
}
},
b = d.SerializableCipher = c.extend({
cfg: c.extend({
format: a
}),
encrypt: function(a, b, c, d) {
d = this.cfg.extend(d);
var e = a.createEncryptor(c, d);
b = e.finalize(b);
e = e.cfg;
return A.create({
ciphertext: b,
key: c,
iv: e.iv,
algorithm: a,
mode: e.mode,
padding: e.padding,
blockSize: a.blockSize,
formatter: d.format
})
},
decrypt: function(a, b, c, d) {
d = this.cfg.extend(d);
b = this._parse(b, d.format);
return a.createDecryptor(c, d).finalize(b.ciphertext)
},
_parse: function(a, b) {
return 'string' == typeof a ? b.parse(a, this) : a
}
}),
f = (f.kdf = {}).OpenSSL = {
execute: function(a, b, c, d) {
d || (d = s.random(8));
a = e.create({
keySize: b + c
}).compute(a, d);
c = s.create(a.words.slice(b), 4 * c);
a.sigBytes = 4 * b;
return A.create({
key: a,
iv: c,
salt: d
})
}
},
x = d.PasswordBasedCipher = b.extend({
cfg: b.cfg.extend({
kdf: f
}),
encrypt: function(a, c, d, e) {
e = this.cfg.extend(e);
d = e.kdf.execute(d, a.keySize, a.ivSize);
e.iv = d.iv;
a = b.encrypt.call(this, a, c, d.key, e);
a.mixIn(d);
return a
},
decrypt: function(a, c, d, e) {
e = this.cfg.extend(e);
c = this._parse(c, e.format);
d = e.kdf.execute(d, a.keySize, a.ivSize, c.salt);
e.iv = d.iv;
return b.decrypt.call(this, a, c, d.key, e)
}
})
}();
(function() {
for (var p = w, f = p.lib.BlockCipher, d = p.algo, c = [], s = [], v = [], u = [], e = [], q = [], a = [], y = [], r = [], A = [], b = [], x = 0; 256 > x; x++) b[x] = 128 > x ? x << 1 : x << 1 ^ 283;
for (var h = 0, m = 0, x = 0; 256 > x; x++) {
var t = m ^ m << 1 ^ m << 2 ^ m << 3 ^ m << 4,
t = t >>> 8 ^ t & 255 ^ 99;
c[h] = t;
s[t] = h;
var B = b[h],
J = b[B],
K = b[J],
z = 257 * b[t] ^ 16843008 * t;
v[h] = z << 24 | z >>> 8;
u[h] = z << 16 | z >>> 16;
e[h] = z << 8 | z >>> 24;
q[h] = z;
z = 16843009 * K ^ 65537 * J ^ 257 * B ^ 16843008 * h;
a[t] = z << 24 | z >>> 8;
y[t] = z << 16 | z >>> 16;
r[t] = z << 8 | z >>> 24;
A[t] = z;
h ? (h = B ^ b[b[b[K ^ B]]], m ^= b[b[m]]) : h = m = 1
}
var L = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],
d = d.AES = f.extend({
_doReset: function() {
for (var b = this._key, d = b.words, e = b.sigBytes / 4, b = 4 * ((this._nRounds = e + 6) + 1), f = this._keySchedule = [], m = 0; m < b; m++)
if (m < e) f[m] = d[m];
else {
var h = f[m - 1];
m % e ? 6 < e && 4 == m % e && (h = c[h >>> 24] << 24 | c[h >>> 16 & 255] << 16 | c[h >>> 8 & 255] << 8 | c[h & 255]) : (h = h << 8 | h >>> 24, h = c[h >>> 24] << 24 | c[h >>> 16 & 255] << 16 | c[h >>> 8 & 255] << 8 | c[h & 255], h ^= L[m / e | 0] << 24);
f[m] = f[m - e] ^ h
}
d = this._invKeySchedule = [];
for (e = 0; e < b; e++) m = b - e, h = e % 4 ? f[m] : f[m - 4], d[e] = 4 > e || 4 >= m ? h : a[c[h >>> 24]] ^ y[c[h >>> 16 & 255]] ^ r[c[h >>> 8 & 255]] ^ A[c[h & 255]]
},
encryptBlock: function(a, b) {
this._doCryptBlock(a, b, this._keySchedule, v, u, e, q, c)
},
decryptBlock: function(b, c) {
var d = b[c + 1];
b[c + 1] = b[c + 3];
b[c + 3] = d;
this._doCryptBlock(b, c, this._invKeySchedule, a, y, r, A, s);
d = b[c + 1];
b[c + 1] = b[c + 3];
b[c + 3] = d
},
_doCryptBlock: function(a, b, c, d, e, h, m, g) {
for (var n = this._nRounds, k = a[b] ^ c[0], l = a[b + 1] ^ c[1], f = a[b + 2] ^ c[2], q = a[b + 3] ^ c[3], p = 4, r = 1; r < n; r++) var u = d[k >>> 24] ^ e[l >>> 16 & 255] ^ h[f >>> 8 & 255] ^ m[q & 255] ^ c[p++],
s = d[l >>> 24] ^ e[f >>> 16 & 255] ^ h[q >>> 8 & 255] ^ m[k & 255] ^ c[p++],
t = d[f >>> 24] ^ e[q >>> 16 & 255] ^ h[k >>> 8 & 255] ^ m[l & 255] ^ c[p++],
q = d[q >>> 24] ^ e[k >>> 16 & 255] ^ h[l >>> 8 & 255] ^ m[f & 255] ^ c[p++],
k = u,
l = s,
f = t;
u = (g[k >>> 24] << 24 | g[l >>> 16 & 255] << 16 | g[f >>> 8 & 255] << 8 | g[q & 255]) ^ c[p++];
s = (g[l >>> 24] << 24 | g[f >>> 16 & 255] << 16 | g[q >>> 8 & 255] << 8 | g[k & 255]) ^ c[p++];
t = (g[f >>> 24] << 24 | g[q >>> 16 & 255] << 16 | g[k >>> 8 & 255] << 8 | g[l & 255]) ^ c[p++];
q = (g[q >>> 24] << 24 | g[k >>> 16 & 255] << 16 | g[l >>> 8 & 255] << 8 | g[f & 255]) ^ c[p++];
a[b] = u;
a[b + 1] = s;
a[b + 2] = t;
a[b + 3] = q
},
keySize: 8
});
p.AES = f._createHelper(d)
})();
(function() {
var p = w,
f = p.lib,
d = f.WordArray,
c = f.Hasher,
s = [],
f = p.algo.SHA1 = c.extend({
_doReset: function() {
this._hash = new d.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
},
_doProcessBlock: function(c, d) {
for (var e = this._hash.words, f = e[0], a = e[1], p = e[2], r = e[3], w = e[4], b = 0; 80 > b; b++) {
if (16 > b) s[b] = c[d + b] | 0;
else {
var x = s[b - 3] ^ s[b - 8] ^ s[b - 14] ^ s[b - 16];
s[b] = x << 1 | x >>> 31
}
x = (f << 5 | f >>> 27) + w + s[b];
x = 20 > b ? x + ((a & p | ~a & r) + 1518500249) : 40 > b ? x + ((a ^ p ^ r) + 1859775393) : 60 > b ? x + ((a & p | a & r | p & r) - 1894007588) : x + ((a ^ p ^ r) - 899497514);
w = r;
r = p;
p = a << 30 | a >>> 2;
a = f;
f = x
}
e[0] = e[0] + f | 0;
e[1] = e[1] + a | 0;
e[2] = e[2] + p | 0;
e[3] = e[3] + r | 0;
e[4] = e[4] + w | 0
},
_doFinalize: function() {
var c = this._data,
d = c.words,
e = 8 * this._nDataBytes,
f = 8 * c.sigBytes;
d[f >>> 5] |= 128 << 24 - f % 32;
d[(f + 64 >>> 9 << 4) + 14] = Math.floor(e / 4294967296);
d[(f + 64 >>> 9 << 4) + 15] = e;
c.sigBytes = 4 * d.length;
this._process();
return this._hash
},
clone: function() {
var d = c.clone.call(this);
d._hash = this._hash.clone();
return d
}
});
p.SHA1 = c._createHelper(f);
p.HmacSHA1 = c._createHmacHelper(f)
})()
})();