Frame 1
function hex_md5(s) {
return(binl2hex(core_md5(str2binl(s), s.length * chrsz)));
}
function b64_md5(s) {
return(binl2b64(core_md5(str2binl(s), s.length * chrsz)));
}
function str_md5(s) {
return(binl2str(core_md5(str2binl(s), s.length * chrsz)));
}
function hex_hmac_md5(key, data) {
return(binl2hex(core_hmac_md5(key, data)));
}
function b64_hmac_md5(key, data) {
return(binl2b64(core_hmac_md5(key, data)));
}
function str_hmac_md5(key, data) {
return(binl2str(core_hmac_md5(key, data)));
}
function md5_vm_test() {
return(hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72");
}
function core_md5(x, len) {
x[len >> 5] = x[len >> 5] | (128 << (len % 32));
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var _local3 = -271733879;
var _local2 = -1732584194;
var _local1 = 271733878 /* 0x10325476 */;
var i = 0;
while (i < x.length) {
var olda = a;
var oldb = _local3;
var oldc = _local2;
var oldd = _local1;
a = md5_ff(a, _local3, _local2, _local1, x[i + 0], 7, -680876936);
_local1 = md5_ff(_local1, a, _local3, _local2, x[i + 1], 12, -389564586);
_local2 = md5_ff(_local2, _local1, a, _local3, x[i + 2], 17, 606105819);
_local3 = md5_ff(_local3, _local2, _local1, a, x[i + 3], 22, -1044525330);
a = md5_ff(a, _local3, _local2, _local1, x[i + 4], 7, -176418897);
_local1 = md5_ff(_local1, a, _local3, _local2, x[i + 5], 12, 1200080426);
_local2 = md5_ff(_local2, _local1, a, _local3, x[i + 6], 17, -1473231341);
_local3 = md5_ff(_local3, _local2, _local1, a, x[i + 7], 22, -45705983);
a = md5_ff(a, _local3, _local2, _local1, x[i + 8], 7, 1770035416);
_local1 = md5_ff(_local1, a, _local3, _local2, x[i + 9], 12, -1958414417);
_local2 = md5_ff(_local2, _local1, a, _local3, x[i + 10], 17, -42063);
_local3 = md5_ff(_local3, _local2, _local1, a, x[i + 11], 22, -1990404162);
a = md5_ff(a, _local3, _local2, _local1, x[i + 12], 7, 1804603682);
_local1 = md5_ff(_local1, a, _local3, _local2, x[i + 13], 12, -40341101);
_local2 = md5_ff(_local2, _local1, a, _local3, x[i + 14], 17, -1502002290);
_local3 = md5_ff(_local3, _local2, _local1, a, x[i + 15], 22, 1236535329);
a = md5_gg(a, _local3, _local2, _local1, x[i + 1], 5, -165796510);
_local1 = md5_gg(_local1, a, _local3, _local2, x[i + 6], 9, -1069501632);
_local2 = md5_gg(_local2, _local1, a, _local3, x[i + 11], 14, 643717713);
_local3 = md5_gg(_local3, _local2, _local1, a, x[i + 0], 20, -373897302);
a = md5_gg(a, _local3, _local2, _local1, x[i + 5], 5, -701558691);
_local1 = md5_gg(_local1, a, _local3, _local2, x[i + 10], 9, 38016083);
_local2 = md5_gg(_local2, _local1, a, _local3, x[i + 15], 14, -660478335);
_local3 = md5_gg(_local3, _local2, _local1, a, x[i + 4], 20, -405537848);
a = md5_gg(a, _local3, _local2, _local1, x[i + 9], 5, 568446438);
_local1 = md5_gg(_local1, a, _local3, _local2, x[i + 14], 9, -1019803690);
_local2 = md5_gg(_local2, _local1, a, _local3, x[i + 3], 14, -187363961);
_local3 = md5_gg(_local3, _local2, _local1, a, x[i + 8], 20, 1163531501);
a = md5_gg(a, _local3, _local2, _local1, x[i + 13], 5, -1444681467);
_local1 = md5_gg(_local1, a, _local3, _local2, x[i + 2], 9, -51403784);
_local2 = md5_gg(_local2, _local1, a, _local3, x[i + 7], 14, 1735328473);
_local3 = md5_gg(_local3, _local2, _local1, a, x[i + 12], 20, -1926607734);
a = md5_hh(a, _local3, _local2, _local1, x[i + 5], 4, -378558);
_local1 = md5_hh(_local1, a, _local3, _local2, x[i + 8], 11, -2022574463);
_local2 = md5_hh(_local2, _local1, a, _local3, x[i + 11], 16, 1839030562);
_local3 = md5_hh(_local3, _local2, _local1, a, x[i + 14], 23, -35309556);
a = md5_hh(a, _local3, _local2, _local1, x[i + 1], 4, -1530992060);
_local1 = md5_hh(_local1, a, _local3, _local2, x[i + 4], 11, 1272893353);
_local2 = md5_hh(_local2, _local1, a, _local3, x[i + 7], 16, -155497632);
_local3 = md5_hh(_local3, _local2, _local1, a, x[i + 10], 23, -1094730640);
a = md5_hh(a, _local3, _local2, _local1, x[i + 13], 4, 681279174);
_local1 = md5_hh(_local1, a, _local3, _local2, x[i + 0], 11, -358537222);
_local2 = md5_hh(_local2, _local1, a, _local3, x[i + 3], 16, -722521979);
_local3 = md5_hh(_local3, _local2, _local1, a, x[i + 6], 23, 76029189);
a = md5_hh(a, _local3, _local2, _local1, x[i + 9], 4, -640364487);
_local1 = md5_hh(_local1, a, _local3, _local2, x[i + 12], 11, -421815835);
_local2 = md5_hh(_local2, _local1, a, _local3, x[i + 15], 16, 530742520);
_local3 = md5_hh(_local3, _local2, _local1, a, x[i + 2], 23, -995338651);
a = md5_ii(a, _local3, _local2, _local1, x[i + 0], 6, -198630844);
_local1 = md5_ii(_local1, a, _local3, _local2, x[i + 7], 10, 1126891415);
_local2 = md5_ii(_local2, _local1, a, _local3, x[i + 14], 15, -1416354905);
_local3 = md5_ii(_local3, _local2, _local1, a, x[i + 5], 21, -57434055);
a = md5_ii(a, _local3, _local2, _local1, x[i + 12], 6, 1700485571);
_local1 = md5_ii(_local1, a, _local3, _local2, x[i + 3], 10, -1894986606);
_local2 = md5_ii(_local2, _local1, a, _local3, x[i + 10], 15, -1051523);
_local3 = md5_ii(_local3, _local2, _local1, a, x[i + 1], 21, -2054922799);
a = md5_ii(a, _local3, _local2, _local1, x[i + 8], 6, 1873313359);
_local1 = md5_ii(_local1, a, _local3, _local2, x[i + 15], 10, -30611744);
_local2 = md5_ii(_local2, _local1, a, _local3, x[i + 6], 15, -1560198380);
_local3 = md5_ii(_local3, _local2, _local1, a, x[i + 13], 21, 1309151649);
a = md5_ii(a, _local3, _local2, _local1, x[i + 4], 6, -145523070);
_local1 = md5_ii(_local1, a, _local3, _local2, x[i + 11], 10, -1120210379);
_local2 = md5_ii(_local2, _local1, a, _local3, x[i + 2], 15, 718787259);
_local3 = md5_ii(_local3, _local2, _local1, a, x[i + 9], 21, -343485551);
a = safe_add(a, olda);
_local3 = safe_add(_local3, oldb);
_local2 = safe_add(_local2, oldc);
_local1 = safe_add(_local1, oldd);
i = i + 16;
}
return(Array(a, _local3, _local2, _local1));
}
function md5_cmn(q, a, b, x, s, t) {
return(safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b));
}
function md5_ff(a, b, c, d, x, s, t) {
var _local1 = b;
return(md5_cmn((_local1 & c) | ((~_local1) & d), a, _local1, x, s, t));
}
function md5_gg(a, b, c, d, x, s, t) {
return(md5_cmn((b & d) | (c & (~d)), a, b, x, s, t));
}
function md5_hh(a, b, c, d, x, s, t) {
return(md5_cmn((b ^ c) ^ d, a, b, x, s, t));
}
function md5_ii(a, b, c, d, x, s, t) {
return(md5_cmn(c ^ (b | (~d)), a, b, x, s, t));
}
function core_hmac_md5(key, data) {
var _local2 = str2binl(key);
if (_local2.length > 16) {
_local2 = core_md5(_local2, key.length * chrsz);
}
var _local3 = Array(16);
var opad = Array(16);
var _local1 = 0;
while (_local1 < 16) {
_local3[_local1] = _local2[_local1] ^ 909522486;
opad[_local1] = _local2[_local1] ^ 1549556828;
_local1++;
}
var hash = core_md5(_local3.concat(str2binl(data)), 512 + (data.length * chrsz));
return(core_md5(opad.concat(hash), 640));
}
function safe_add(x, y) {
var _local1 = (x & 65535) + (y & 65535);
var _local2 = ((x >> 16) + (y >> 16)) + (_local1 >> 16);
return((_local2 << 16) | (_local1 & 65535));
}
function bit_rol(num, cnt) {
return((num << cnt) | (num >>> (32 - cnt)));
}
function str2binl(str) {
var _local2 = str;
var _local3 = Array();
var mask = ((1 << chrsz) - 1);
var _local1 = 0;
while (_local1 < (_local2.length * chrsz)) {
_local3[_local1 >> 5] = _local3[_local1 >> 5] | ((_local2.charCodeAt(_local1 / chrsz) & mask) << (_local1 % 32));
_local1 = _local1 + chrsz;
}
return(_local3);
}
function binl2str(bin) {
var _local2 = bin;
var _local3 = "";
var mask = ((1 << chrsz) - 1);
var _local1 = 0;
while (_local1 < (_local2.length * 32)) {
_local3 = _local3 + String.fromCharCode((_local2[_local1 >> 5] >>> (_local1 % 32)) & mask);
_local1 = _local1 + chrsz;
}
return(_local3);
}
function binl2hex(binarray) {
var _local2 = binarray;
var _local3 = (hexcase ? "0123456789ABCDEF" : "0123456789abcdef");
var str = "";
var _local1 = 0;
while (_local1 < (_local2.length * 4)) {
str = str + (_local3.charAt((_local2[_local1 >> 2] >> (((_local1 % 4) * 8) + 4)) & 15) + _local3.charAt((_local2[_local1 >> 2] >> ((_local1 % 4) * 8)) & 15));
_local1++;
}
return(str);
}
function binl2b64(binarray) {
var _local3 = binarray;
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
var _local2 = 0;
while (_local2 < (_local3.length * 4)) {
var triplet = (((((_local3[_local2 >> 2] >> (8 * (_local2 % 4))) & 255) << 16) | (((_local3[(_local2 + 1) >> 2] >> (8 * ((_local2 + 1) % 4))) & 255) << 8)) | ((_local3[(_local2 + 2) >> 2] >> (8 * ((_local2 + 2) % 4))) & 255));
var _local1 = 0;
while (_local1 < 4) {
if (((_local2 * 8) + (_local1 * 6)) > (_local3.length * 32)) {
str = str + b64pad;
} else {
str = str + tab.charAt((triplet >> (6 * (3 - _local1))) & 63);
}
_local1++;
}
_local2 = _local2 + 3;
}
return(str);
}
function ComMessage() {
var _local1 = this;
_local1.message = null;
_local1.theXml = null;
_local1.isCritical = false;
_local1.theComClass = null;
_local1.numSends = 0;
_local1.init = function (message, theComClass, critical) {
var _local1 = this;
_local1.message = message;
_local1.theXml = new XML(_local1.message);
_local1.theXml.ignoreWhite = true;
_local1.theComClass = theComClass;
_local1.theXml._self = _local1.theComClass;
_local1.theXml._comMess = _local1;
_local1.isCritical = critical;
_local1.doGameEnd = false;
};
_local1.sendWithDelay = function (delay) {
this.delayInterval = setInterval(this, "onDelayEnded", delay);
};
_local1.onDelayEnded = function () {
var _local1 = this;
clearInterval(_local1.delayInterval);
_local1.theComClass.send(_local1);
};
}
function ComClass() {
var _local1 = this;
_local1.chk = "";
_local1.send = function (theMessage) {
var _local1 = this;
var _local3 = theMessage;
_local3.numSends++;
var _local2 = new XML();
_local2.ignoreWhite = true;
_local2._requestObj = _local3;
_local2.onData = function (src) {
var _local1 = this;
var _local2 = src;
if (_local2 == undefined) {
_local1._requestObj.theComClass.sendFailed(_local1._requestObj);
} else if (_local2.indexOf("<gamedata") > -1) {
var _local3 = _local2.substring(_local2.indexOf("<gamedata"), _local2.indexOf("</gamedata>") + "</gamedata>".length);
_level0.parsedGameData = _local3;
_local1.parseXML(_local2);
_local1.loaded = true;
_local1.onLoad(true);
} else {
_local1.parseXML(_local2);
_local1.loaded = true;
_local1.onLoad(true);
}
};
_local2.onLoad = function (success) {
var _local1 = this;
if (success) {
_local1._requestObj.theComClass.serverResponse(_local1);
} else {
_local1._requestObj.theComClass.sendFailed(_local1._requestObj);
}
};
fscommand ("debug", _local3.theXml.toString());
if ((_level0.fp != undefined) && (_level0.fp != "")) {
_local3.theXml.sendAndLoad(("http://" + _level0.host) + "/servlet/OpenGameServlet", _local2);
} else {
_local3.theXml.sendAndLoad(("http://" + _level0.host) + "/servlet/PracticeGameServlet", _local2);
}
};
_local1.serverResponse = function (node) {
var _local1 = node.firstChild;
if (_local1.nodeName == "server") {
var _local2 = _local1.attributes.playtime;
_local1 = _local1.firstChild;
if (_local1.nodeName == null) {
if (node._requestObj.message.indexOf("gameover") > -1) {
if (_level0.gameoverAction) {
this.endGameSession();
return;
}
if (_level0.gameEndAction) {
_level0.gameEndActionOk = true;
if (_level0.gameQuitAction) {
this.endGameSession();
return;
}
} else if (_local1.nodeName == "game") {
var pType = _local1.attributes.playertype;
var pPath = _local1.attributes.path;
var pWidth = _local1.attributes.width;
var pHeight = _local1.attributes.height;
var gameData = _local1.firstChild;
var bussig = new String(gameData);
getURL ((((((((((("javascript:doLoadGame('" + pPath) + "',") + "'") + pHeight) + "',") + "'") + pWidth) + "',") + "'") + pType) + "');", "_self");
fscommand ("gs", _level0.parsedGameData);
} else if (_local1.nodeName == "response") {
var _local3 = _local1.firstChild;
fscommand ("res", _local3);
fscommand ("pt", _local2);
}
}
} else if (_local1.nodeName == "game") {
var pType = _local1.attributes.playertype;
var pPath = _local1.attributes.path;
var pWidth = _local1.attributes.width;
var pHeight = _local1.attributes.height;
var gameData = _local1.firstChild;
var bussig = new String(gameData);
getURL ((((((((((("javascript:doLoadGame('" + pPath) + "',") + "'") + pHeight) + "',") + "'") + pWidth) + "',") + "'") + pType) + "');", "_self");
fscommand ("gs", _level0.parsedGameData);
} else if (_local1.nodeName == "response") {
var _local3 = _local1.firstChild;
fscommand ("res", _local3);
fscommand ("pt", _local2);
}
}
};
_local1.endGameSession = function () {
_level0.printOut("Ending...");
getURL ("javascript:endGame('')", "_self");
};
_local1.sendFailed = function (origMessage) {
var _local1 = origMessage;
if (_local1.numSends < 4) {
_local1.sendWithDelay(5000);
} else if (_local1.isCritical) {
getURL ("javascript:endGame('comErr_f');", "_self");
}
};
_local1.startSession = function () {
this.chk = this.chk + _level0.magic.substring(0, 2);
var t = hex_md5((((_level0.sessionId + _level0.host) + _level0.slotid) + _level0.magic) + _level0.sessionId.substring(4));
this.chk = this.chk + _level0.slotid;
var _local1 = new ComMessage();
_local1.init(("<client action=\"getgamedata\" slotId=\"" + _level0.slotid) + "\"></client>", c, true);
_local1.sendWithDelay(500);
};
}
function checkVars() {
var msgFetched = false;
if ((inP != "") && (inP != null)) {
var _local1 = inP.split("|");
if (_local1.length == 2) {
msgFetched = true;
debug.text = debug.text + _local1[0];
if (_local1[0] == "gameStart") {
var mess = new ComMessage();
mess.init(("<client action=\"gamestart\" slotId=\"" + _level0.slotid) + "\"></client>", c, false);
c.chk = c.chk + _level0.magic.substring(_level0.magic.length - 3);
mess.sendWithDelay(100);
inP = null;
} else if (_local1[0] == "request") {
var mess = new ComMessage();
var _local3 = Trim(_local1[1]);
var _local2 = ((("<client action=\"request\" slotId=\"" + _level0.slotid) + "\"><request><![CDATA[") + _local3) + "]]></request></client>";
mess.init(_local2, c, false);
c.send(mess);
inP = null;
} else if (_local1[0].indexOf("gameOver") > -1) {
_level0.gameoverAction = true;
var mess = new ComMessage();
this.isGameOverPosted = true;
var _local3 = Trim(_local1[1]);
var checksum = hex_md5(c.chk + _local3);
var _local2 = ("<client action=\"gameover\" slotId=\"" + _level0.slotid) + "\">";
_local2 = _local2 + (("<gameover checksum=\"" + checksum) + "\" >");
_local2 = _local2 + (("<result><![CDATA[" + _local3) + "]]></result>");
_local2 = _local2 + "</gameover>";
_local2 = _local2 + "</client>";
mess.init(_local2, c, true);
c.send(mess);
inP = null;
} else if (_local1[0].indexOf("gameEnd") > -1) {
_level0.gameEndAction = true;
var mess = new ComMessage();
var _local3 = Trim(_local1[1]);
var checksum = hex_md5(c.chk + _local3);
this.doGameEnd = true;
this.isGameOverPosted = false;
var _local2 = ("<client action=\"gameover\" slotId=\"" + _level0.slotid) + "\">";
_local2 = _local2 + (("<gameover checksum=\"" + checksum) + "\" >");
_local2 = _local2 + (("<result><![CDATA[" + _local3) + "]]></result>");
_local2 = _local2 + "</gameover>";
_local2 = _local2 + "</client>";
mess.init(_local2, c, true);
c.send(mess);
inP = null;
} else if (_local1[0].indexOf("gameQuit") > -1) {
_level0.gameQuitAction = true;
this.isEndGame = true;
if (_level0.gameEndActionOk) {
c.endGameSession();
}
}
}
inP = null;
}
inP = null;
if (msgFetched || (lastPollCount > 3)) {
fscommand ("get");
lastPollCount = 0;
} else {
lastPollCount++;
}
}
function LTrim(str) {
var _local3 = new String(" \t\n\r");
var _local2 = new String(str);
if (_local3.indexOf(_local2.charAt(0)) != -1) {
var _local1 = 0;
var i = _local2.length;
while ((_local1 < i) && (_local3.indexOf(_local2.charAt(_local1)) != -1)) {
_local1++;
}
_local2 = _local2.substring(_local1, i);
}
return(_local2);
}
function RTrim(str) {
var _local3 = new String(" \t\n\r");
var _local2 = new String(str);
if (_local3.indexOf(_local2.charAt(_local2.length - 1)) != -1) {
var _local1 = _local2.length - 1;
while ((_local1 >= 0) && (_local3.indexOf(_local2.charAt(_local1)) != -1)) {
_local1--;
}
_local2 = _local2.substring(0, _local1 + 1);
}
return(_local2);
}
function replaceNewLine(str) {
var newLines = new String("\n\r");
var _local1 = new String(str);
return(_local1.split(newline).join("").split("\r").join(""));
}
function Trim(str) {
return(replaceNewLine(RTrim(LTrim(str))));
}
function printOut(d) {
_level0.debug.text = (_level0.debug.text + d) + newline;
}
var hexcase = 0;
var b64pad = "";
var chrsz = 8;
this.isGameOverPosted = false;
this.isEndGame = false;
this.gameOverReceived = false;
var lastPollCount = 0;
setInterval(checkVars, 500);
_level0.debug.text = "Starting...";
c = new ComClass();
c.startSession();