function debug_println(str) {
	debug_print(str+"<br>") ;
}

function debug_print(str) {
	var debugDiv = "debugDivForTesting" ;
	if (!document.getElementById(debugDiv)) {
		var D = document.createElement('pre') ;
		D.id = debugDiv ;
		D.style.border = "1px solid black" ;
		D.style.backgroundColor = "silver" ;
		document.body.appendChild(D) ;
	}
	var D = document.getElementById(debugDiv) ;
	D.innerHTML += str ; 
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function htmlEntities(str) {
	return htmlentities(str) ;
}

function htmlentities(str) {
	var HET = new Array() ;
	HET['160']  = '&nbsp;'   ;	HET['161']  = '&iexcl;'  ;	HET['162']  = '&cent;'   ;	HET['163']  = '&pound;'  ;	HET['164']  = '&curren;' ;
	HET['165']  = '&yen;'    ;	HET['166']  = '&brvbar;' ;	HET['167']  = '&sect;'   ;	HET['168']  = '&uml;'    ;	HET['169']  = '&copy;'   ;
	HET['170']  = '&ordf;'   ;	HET['171']  = '&laquo;'  ;	HET['172']  = '&not;'    ;	HET['173']  = '&shy;'    ;	HET['174']  = '&reg;'    ;
	HET['175']  = '&macr;'   ;	HET['176']  = '&deg;'    ;	HET['177']  = '&plusmn;' ;	HET['178']  = '&sup2;'   ;	HET['179']  = '&sup3;'   ;
	HET['180']  = '&acute;'  ;	HET['181']  = '&micro;'  ;	HET['182']  = '&para;'   ;	HET['183']  = '&middot;' ;	HET['184']  = '&cedil;'  ;
	HET['185']  = '&sup1;'   ;	HET['186']  = '&ordm;'   ;	HET['187']  = '&raquo;'  ;	HET['188']  = '&frac14;' ;	HET['189']  = '&frac12;' ;
	HET['190']  = '&frac34;' ;	HET['191']  = '&iquest;' ;	HET['192']  = '&Agrave;' ;	HET['193']  = '&Aacute;' ;	HET['194']  = '&Acirc;'  ;
	HET['195']  = '&Atilde;' ;	HET['196']  = '&Auml;'   ;	HET['197']  = '&Aring;'  ;	HET['198']  = '&AElig;'  ;	HET['199']  = '&Ccedil;' ;
	HET['200']  = '&Egrave;' ;	HET['201']  = '&Eacute;' ;	HET['202']  = '&Ecirc;'  ;	HET['203']  = '&Euml;'   ;	HET['204']  = '&Igrave;' ;
	HET['205']  = '&Iacute;' ;	HET['206']  = '&Icirc;'  ;	HET['207']  = '&Iuml;'   ;	HET['208']  = '&ETH;'    ;	HET['209']  = '&Ntilde;' ;
	HET['210']  = '&Ograve;' ;	HET['211']  = '&Oacute;' ;	HET['212']  = '&Ocirc;'  ;	HET['213']  = '&Otilde;' ;	HET['214']  = '&Ouml;'   ;
	HET['215']  = '&times;'  ;	HET['216']  = '&Oslash;' ;	HET['217']  = '&Ugrave;' ;	HET['218']  = '&Uacute;' ;	HET['219']  = '&Ucirc;'  ;
	HET['220']  = '&Uuml;'   ;	HET['221']  = '&Yacute;' ;	HET['222']  = '&THORN;'  ;	HET['223']  = '&szlig;'  ;	HET['224']  = '&agrave;' ;
	HET['225']  = '&aacute;' ;	HET['226']  = '&acirc;'  ;	HET['227']  = '&atilde;' ;	HET['228']  = '&auml;'   ;	HET['229']  = '&aring;'  ;
	HET['230']  = '&aelig;'  ;	HET['231']  = '&ccedil;' ;	HET['232']  = '&egrave;' ;	HET['233']  = '&eacute;' ;	HET['234']  = '&ecirc;'  ;
	HET['235']  = '&euml;'   ;	HET['236']  = '&igrave;' ;	HET['237']  = '&iacute;' ;	HET['238']  = '&icirc;'  ;	HET['239']  = '&iuml;'   ;
	HET['240']  = '&eth;'    ;	HET['241']  = '&ntilde;' ;	HET['242']  = '&ograve;' ;	HET['243']  = '&oacute;' ;	HET['244']  = '&ocirc;'  ;
	HET['245']  = '&otilde;' ;	HET['246']  = '&ouml;'   ;	HET['247']  = '&divide;' ;	HET['248']  = '&oslash;' ;	HET['249']  = '&ugrave;' ;
	HET['250']  = '&uacute;' ;	HET['251']  = '&ucirc;'  ;	HET['252']  = '&uuml;'   ;	HET['253']  = '&yacute;' ;	HET['254']  = '&thorn;'  ;
	HET['255']  = '&yuml;'   ;	HET['34']   = '&quot;'   ;	HET['60']   = '&lt;'     ;	HET['62']   = '&gt;'     ;	HET['38']   = '&amp;'    ;
	
	var newStr = "" ;
	for (i = 0; i < str.length ; i++) {
        var chr = str[i] ;
        var ord = chr.charCodeAt(0);
        if((ord > 47 && ord < 58) || (ord > 62 && ord < 127)){
	        newStr += chr ;
        } else {
	        if (!HET[ord]) {
		        newStr += "&#" + ord + ";" ;
	        } else {
		        newStr += HET[ord] ;
	        }
        }
	}
	return newStr ;
}

function xmlEntities(str) {
	return htmlentities(str) ;
}

function xmlentities(str) {
	str = str.replace(/\&/g,"&amp;") ;
	str = str.replace(/\</g,"&lt;") ;
	str = str.replace(/\>/g,"&gt;") ;
	str = str.replace(/\"/g,"&quot;") ;
	str = str.replace(/\'/g,"&apos;") ;
	return str ;
}

function encodeURL(str) {
	return EncodeURL(str) ;
}

function EncodeURL(str) {
	if (str) {
		str = encodeURI(str);
		str = str.replace(/\&/g,"%26");
		str = str.replace(/\,/g,"%2C");
		str = str.replace(/\+/g,"%2B");
		str = str.replace(/\?/g,"%3F");
		str = str.replace(/\//g,"%2F");
		str = str.replace(/\=/g,"%3D");
		str = str.replace(/\@/g,"%40");
		str = str.replace(/\#/g,"%23");
		str = str.replace(/\%20/g,"+");
	}
	return str ;
}

function decodeURL(str) {
	return DecodeURL(str) ;
}

function DecodeURL(str) {
	if (str) {
		str = str.replace(/\+/g," ");
		str = str.replace(/\%26/g,"&");
		str = str.replace(/\%2C/g,",");
		str = str.replace(/\%2B/g,"+");
		str = str.replace(/\%3F/g,"?");
		str = str.replace(/\%2F/g,"/");
		str = str.replace(/\%3D/g,"=");
		str = str.replace(/\%40/g,"@");
		str = str.replace(/\%23/g,"#");
		str = decodeURI(str);
	}
	return str ;
}

function jObject() {
	var objectId = (Math.random() + "" + Math.random()) ;
	objectId = objectId.replace(/\./g,"") ;
	objectId = objectId.replace(/^0+/g,"") ;
	objectId = objectId.replace(/0+$/g,"") ;
	this.jObjectId = objectId ;
}

function cNum(e) {
	var strCheck = '0123456789\b';
	var whichCode = (window.Event) ? e.which : e.keyCode;
	key = String.fromCharCode(whichCode);  // Get key value from key code
	if (whichCode == 0) return true ;
	if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
}

function cPhone(e) {
	var strCheck = '0123456789-+ ()[]/\b';
	var whichCode = (window.Event) ? e.which : e.keyCode;
	key = String.fromCharCode(whichCode);  // Get key value from key code
	if (whichCode == 0) return true ;
	if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
}

function cUserName(e) {
	var strCheck = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\b';
	var whichCode = (window.Event) ? e.which : e.keyCode;
	key = String.fromCharCode(whichCode);  // Get key value from key code
	if (whichCode == 0) return true ;
	if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
}

function isPhone(Str) {
    var Regex = /^\+{0,1}([\(\)\[\]]*([0-9\ \-]|ext|ex|ex\.|ext\.)+[\(\)\[\]]*)+$/ ;
    return Regex.test(Str);   
}

function isURL(theurl){
	var Regex = /^(http|https|ftp)\:\/\/([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&amp;%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(\/($|[a-zA-Z0-9\.\,\?\'\\\+\[\]&amp;%\$#\=~_\-]+))*$/;
	return Regex.test(theurl);
}

function isEmail(Email) {
	var result = true ;
	var Regex = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/ ;
	return Regex.test(Email) ;
}

function isInt(str){
	if(parseInt(str,10)+''==str+'')
		return true;
	else
		return false;
}

function isIpAddress(Str) {
	var RegEx = /^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])(\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])){3}$/;
	return RegEx.test(Str);
}

function isUserID(Str){
	var RegEx = /^[a-zA-Z0-9_]*$/;
	return RegEx.test(Str);
}

function isAlphaNum(Str){
	var RegEx = /^[a-zA-Z0-9]*$/;
	return RegEx.test(Str);
}

function isAlphaNumSpace(Str){
	var RegEx = /^[a-zA-Z0-9 _]*$/;
	return RegEx.test(Str);
}

function isDate(str){
	var RegEx = /^\d{4}-\d{2}-\d{2}$/;
	return RegEx.test(str);
}

function isTime(str){
	var RegEx = /^\d{2}:\d{2}:\d{2}$/;
	return RegEx.test(str);
}

function parseStringToXML(str){
	if(window.ActiveXObject){
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.loadXML(str);
		return xmlDoc;
	}else{
		return (new DOMParser()).parseFromString(str,"text/xml");
	}
}

function set_cookie( name, value, expires, path, domain, secure ) {
	Set_Cookie( name, value, expires, path, domain, secure ) ;
}

function Set_Cookie( name, value, expires, path, domain, secure ) 
{
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires )
	{
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
	( ( path ) ? ";path=" + path : "" ) + 
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}

function get_cookie( name ) {
	return Get_Cookie( name ) ;
}

function Get_Cookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) &&
	( name != document.cookie.substring( 0, name.length ) ) )
	{
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ";", len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}

function print_r(vars,opt) {
	var Str = "" ;
	var sorting = false ;
	var sortingAsc = true ;
	var TP = typeof(vars) ;
	
	if ((new RegExp("sort", "i")).test(opt)) {
		sorting = true ;
	}
	if ((new RegExp("desc", "i")).test(opt)) {
		sortingAsc = false ;
	}
	if ((new RegExp("asc", "i")).test(opt)) {
		sortingAsc = true ;
	}
	
	if (TP) {
		if (TP == "boolean") {
			if (vars == true) {
				Str = "true" ;
			} else {
				Str = "false" ;
			}
		} else if (TP == "string" || TP == "number") {
			Str = ""+vars ;
		} else if (TP == "function") {
			Str = ""+vars ;
		} else if (TP == "object") {
			recursive(vars,"",0,"") ;
		}
	} else {
		return "undefined" ;
	}
	return Str ;
	
	function recursive(ot_vars,var_name,deep,commas) {
		var StrBlank = "" ;
		for (var i = 0; i < deep; i++) {
			StrBlank += "\t" ;
		}
		if (var_name == "") {
			Str += StrBlank+"Array (\n" ;
		} else {
			Str += StrBlank+"'"+var_name+"' => Array(\n" ;
		}
		deep++ ;
		
		var arraysSort = new Array() ;
		for (var i in ot_vars) {
			arraysSort.push(""+i) ;
			
		}
		if (sorting == true) {
			arraysSort.sort(sortIgnoreCase) ;
			if (sortingAsc == false) {
				arraysSort.reverse() ;
			}
		}
		
		var last ;
		for (var x in arraysSort) {
			last = arraysSort[x] ;
		}
		var comma = "," ;
		for (var x in arraysSort) {
			var i = arraysSort[x] ;
			if (last == i) { comma = "" } ;
			if (typeof(ot_vars[i]) != "object") {
				Str += StrBlank + "\t'" + i + "'" + " => '"+ot_vars[i]+"'"+comma+"\n" ;
			} else if (typeof(ot_vars[i]) == "object") {
				recursive(ot_vars[i],i,deep,comma) ;
			}
		}
		if (var_name == "") {
			Str += StrBlank+")\n" ;
		} else {
			Str += StrBlank+")"+commas+"\n" ;
		}
		
		function sortIgnoreCase(a,b)
		{
			a = a.toLowerCase(); 
			b = b.toLowerCase();
			if (a>b) return 1 ;
			if (a<b) return -1;
			return 0; 
		}
	}
}

function md5(string) {
	return MD5(string) ;
}

function MD5(string) {
	function RotateLeft(lValue, iShiftBits) {
		return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
	}
 
	function AddUnsigned(lX,lY) {
		var lX4,lY4,lX8,lY8,lResult;
		lX8 = (lX & 0x80000000);
		lY8 = (lY & 0x80000000);
		lX4 = (lX & 0x40000000);
		lY4 = (lY & 0x40000000);
		lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
		if (lX4 & lY4) {
			return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
		}
		if (lX4 | lY4) {
			if (lResult & 0x40000000) {
				return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
			} else {
				return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
			}
		} else {
			return (lResult ^ lX8 ^ lY8);
		}
 	}
 
 	function F(x,y,z) { return (x & y) | ((~x) & z); }
 	function G(x,y,z) { return (x & z) | (y & (~z)); }
 	function H(x,y,z) { return (x ^ y ^ z); }
	function I(x,y,z) { return (y ^ (x | (~z))); }
 
	function FF(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	};
 
	function GG(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	};
 
	function HH(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	};
 
	function II(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	};
 
	function ConvertToWordArray(string) {
		var lWordCount;
		var lMessageLength = string.length;
		var lNumberOfWords_temp1=lMessageLength + 8;
		var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
		var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
		var lWordArray=Array(lNumberOfWords-1);
		var lBytePosition = 0;
		var lByteCount = 0;
		while ( lByteCount < lMessageLength ) {
			lWordCount = (lByteCount-(lByteCount % 4))/4;
			lBytePosition = (lByteCount % 4)*8;
			lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
			lByteCount++;
		}
		lWordCount = (lByteCount-(lByteCount % 4))/4;
		lBytePosition = (lByteCount % 4)*8;
		lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
		lWordArray[lNumberOfWords-2] = lMessageLength<<3;
		lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
		return lWordArray;
	};
 
	function WordToHex(lValue) {
		var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
		for (lCount = 0;lCount<=3;lCount++) {
			lByte = (lValue>>>(lCount*8)) & 255;
			WordToHexValue_temp = "0" + lByte.toString(16);
			WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
		}
		return WordToHexValue;
	};
 
	function Utf8Encode(string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	};
 
	var x=Array();
	var k,AA,BB,CC,DD,a,b,c,d;
	var S11=7, S12=12, S13=17, S14=22;
	var S21=5, S22=9 , S23=14, S24=20;
	var S31=4, S32=11, S33=16, S34=23;
	var S41=6, S42=10, S43=15, S44=21;
 
	string = Utf8Encode(string);
 
	x = ConvertToWordArray(string);
 
	a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
 
	for (k=0;k<x.length;k+=16) {
		AA=a; BB=b; CC=c; DD=d;
		a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
		d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
		c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
		b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
		a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
		d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
		c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
		b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
		a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
		d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
		c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
		b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
		a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
		d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
		c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
		b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
		a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
		d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
		c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
		b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
		a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
		d=GG(d,a,b,c,x[k+10],S22,0x2441453);
		c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
		b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
		a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
		d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
		c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
		b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
		a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
		d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
		c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
		b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
		a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
		d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
		c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
		b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
		a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
		d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
		c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
		b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
		a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
		d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
		c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
		b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
		a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
		d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
		c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
		b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
		a=II(a,b,c,d,x[k+0], S41,0xF4292244);
		d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
		c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
		b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
		a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
		d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
		c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
		b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
		a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
		d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
		c=II(c,d,a,b,x[k+6], S43,0xA3014314);
		b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
		a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
		d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
		c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
		b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
		a=AddUnsigned(a,AA);
		b=AddUnsigned(b,BB);
		c=AddUnsigned(c,CC);
		d=AddUnsigned(d,DD);
	}
 
	var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
 
	return temp.toLowerCase();
}
