(function(){var md5={hexcase:0,b64pad:"",chrsz:8,'hex_md5':function(s){return this.binl2hex(this.core_md5(this.str2binl(s),s.length*this.chrsz))},'b64_md5':function(s){return this.binl2b64(this.core_md5(this.str2binl(s),s.length*this.chrsz))},'str_md5':function(s){return this.binl2str(this.core_md5(this.str2binl(s),s.length*this.chrsz))},'hex_hmac_md5':function(key,data){return this.binl2hex(this.core_hmac_md5(key,data))},'b64_hmac_md5':function(key,data){return this.binl2b64(this.core_hmac_md5(key,data))},'str_hmac_md5':function(key,data){return this.binl2str(this.core_hmac_md5(key,data))},'core_md5':function(x,len){x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i16)bkey=this.core_md5(bkey,key.length*this.chrsz);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++){ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C}var hash=this.core_md5(ipad.concat(this.str2binl(data)),512+data.length*this.chrsz);return this.core_md5(opad.concat(hash),512+128)},'safe_add':function(x,y){var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF)},'bit_rol':function(num,cnt){return(num<>>(32-cnt))},'str2binl':function(str){var bin=Array();var mask=(1<>5]|=(str.charCodeAt(i/this.chrsz)&mask)<<(i%32);return bin},'binl2str':function(bin){var str="";var mask=(1<>5]>>>(i%32))&mask);return str},'binl2hex':function(binarray){var hex_tab=this.hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i>2]>>((i%4)*8+4))&0xF)+hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF)}return str},'binl2b64':function(binarray){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;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);for(var j=0;j<4;j++){if(i*8+j*6>binarray.length*32)str+=this.b64pad;else str+=tab.charAt((triplet>>6*(3-j))&0x3F)}}return str}};if(!String.prototype.md5)String.prototype.md5=function(){return md5.hex_md5(this)}})();