Frame 1
function __com_mochibot__(swfid, mc, lv, trk) {
var x;
var g;
var s;
var fv;
var sb;
var u;
var res;
var mb;
var mbc;
mb = "__mochibot__";
mbc = "mochibot.com";
g = (_global ? (_global) : (_level0._root));
if (g[mb + swfid]) {
return(g[mb + swfid]);
}
s = System.security;
x = mc._root.getSWFVersion;
fv = (x ? (mc.getSWFVersion()) : ((_global ? 6 : 5)));
if (!s) {
s = {};
}
sb = s.sandboxType;
if (sb == "localWithFile") {
return(null);
}
x = s.allowDomain;
if (x) {
s.allowDomain(mbc);
}
x = s.allowInsecureDomain;
if (x) {
s.allowInsecureDomain(mbc);
}
u = (((((((((((("http://" + mbc) + "/my/core.swf?mv=7&fv=") + fv) + "&v=") + escape(getVersion())) + "&swfid=") + escape(swfid)) + "&l=") + lv) + "&f=") + mc) + (sb ? ("&sb=" + sb) : "")) + (trk ? "&t=1" : "");
lv = ((fv > 6) ? (mc.getNextHighestDepth()) : ((g[mb + "level"] ? (g[mb + "level"] + 1) : (lv))));
g[mb + "level"] = lv;
if (fv == 5) {
res = "_level" + lv;
if (!eval (res)) {
loadMovieNum (u, lv);
}
} else {
res = mc.createEmptyMovieClip(mb + swfid, lv);
res.loadMovie(u);
}
return(res);
}
new GravityTunnelGame(this);
__com_mochibot__("c41e1c9c", this, 10301, true);
stop();
Frame 8
Symbol 24 MovieClip [enemy78] Frame 25
gotoAndStop (1);
Symbol 25 MovieClip [enemy77] Frame 25
gotoAndStop (1);
Symbol 73 MovieClip [enemy57] Frame 80
gotoAndStop (1);
Symbol 76 MovieClip [enemy62] Frame 73
gotoAndStop (1);
Symbol 77 MovieClip [enemy61] Frame 63
gotoAndStop (1);
Symbol 78 MovieClip [enemy60] Frame 54
stop();
Symbol 103 MovieClip [enemy58] Frame 71
gotoAndStop (1);
Symbol 116 MovieClip [enemy54] Frame 24
gotoAndStop (1);
Symbol 124 MovieClip [enemy55] Frame 70
gotoAndStop (1);
Symbol 126 MovieClip [enemy59] Frame 71
gotoAndStop (1);
Symbol 128 MovieClip [enemy73] Frame 37
gotoAndStop (1);
Symbol 129 MovieClip [enemy74] Frame 38
gotoAndStop (1);
Symbol 196 MovieClip [enemy8] Frame 131
gotoAndStop (1);
Symbol 213 MovieClip [enemy9] Frame 85
gotoAndStop (1);
Symbol 219 MovieClip [smoke] Frame 120
removeMovieClip(this);
Symbol 226 MovieClip [enemy76] Frame 79
gotoAndStop (1);
Symbol 298 MovieClip [__Packages.GameBase] Frame 0
class GameBase
{
function GameBase () {
}
function sTrace(msg) {
SConsole.module("tracer").trace(namespace, msg);
}
function sError(msg) {
SConsole.module("tracer").error(namespace, msg);
}
function toString() {
return(("[" + namespace.join(".")) + "]");
}
var namespace = new Array("screens", "StartScreen");
}
Symbol 299 MovieClip [__Packages.collections.ObjectArray] Frame 0
class collections.ObjectArray
{
var len, data, keyArray, updated;
function ObjectArray () {
clear();
}
function clear() {
len = 0;
data = new Object();
keyArray = new Array();
updated = false;
}
function addValue(key, value) {
if (data[key] == undefined) {
len++;
}
data[key] = value;
updated = true;
}
function getValue(key) {
if (data[key] != undefined) {
return(data[key]);
}
return(null);
}
function deleteValue(key) {
if (data[key] != undefined) {
delete data[key];
len--;
updated = true;
return(true);
}
return(false);
}
function count() {
return(len);
}
function getKey(index) {
if (!updated) {
return(keyArray[index]);
}
keyArray = new Array();
for (var _local2 in data) {
keyArray.push(_local2);
}
updated = false;
return(keyArray[index]);
}
}
Symbol 300 MovieClip [__Packages.SConsole] Frame 0
class SConsole
{
static var instance;
var modules;
function SConsole () {
modules = new Object();
mx.events.EventDispatcher.initialize(this);
var _local3 = new ContextMenu();
_local3.hideBuiltInItems();
_root.menu = _local3;
}
static function module(moduleId) {
var _local1 = getInstance().modules[moduleId];
if (_local1 != null) {
return(_local1);
}
trace("SConsole couldn't find module with id " + moduleId);
return(null);
}
static function getInstance() {
if (instance == null) {
instance = new SConsole();
}
return(instance);
}
function addModule(moduleToAdd, id) {
modules[id] = moduleToAdd;
trace(["SConsole"], "Add module " + id);
}
function initModules() {
for (var _local2 in modules) {
modules[_local2].init();
}
}
static function addTickListener(requestObject) {
module("ticker").addEventListener("tick", requestObject);
}
static function removeTickListener(requestObject) {
module("ticker").removeEventListener("tick", requestObject);
}
static function startTicker() {
module("ticker").startTicker();
}
static function stopTicker() {
module("ticker").stopTicker();
}
static function trace(ns, msg) {
module("tracer").trace(ns, msg);
}
static function error(ns, msg) {
var _local1 = module("tracer");
if (_local1 == null) {
trace("\n################\n### Error: " + msg);
trace(("occured in " + ns) + "\n################\n");
} else {
_local1.error(ns, msg);
}
}
static function set devMode(flag) {
if (flag) {
trace("\n *** SConsole.devMode is set to true!!! *** \n");
}
_devMode = flag;
//return(devMode);
}
static function get devMode() {
return(_devMode);
}
static var session = new collections.ObjectArray();
static var _devMode = false;
}
Symbol 301 MovieClip [__Packages.modules.Module] Frame 0
class modules.Module
{
var namespace;
function Module () {
}
function init() {
}
function sTrace(msg) {
SConsole.module("tracer").trace(namespace, msg);
}
function sError(msg) {
SConsole.module("tracer").error(namespace, msg);
}
function toString() {
return(("[" + namespace.join(".")) + "]");
}
}
Symbol 302 MovieClip [__Packages.mx.events.EventDispatcher] Frame 0
class mx.events.EventDispatcher
{
function EventDispatcher () {
}
static function _removeEventListener(queue, event, handler) {
if (queue != undefined) {
var _local4 = queue.length;
var _local1;
_local1 = 0;
while (_local1 < _local4) {
var _local2 = queue[_local1];
if (_local2 == handler) {
queue.splice(_local1, 1);
return(undefined);
}
_local1++;
}
}
}
static function initialize(object) {
if (_fEventDispatcher == undefined) {
_fEventDispatcher = new mx.events.EventDispatcher();
}
object.addEventListener = _fEventDispatcher.addEventListener;
object.removeEventListener = _fEventDispatcher.removeEventListener;
object.dispatchEvent = _fEventDispatcher.dispatchEvent;
object.dispatchQueue = _fEventDispatcher.dispatchQueue;
}
function dispatchQueue(queueObj, eventObj) {
var _local7 = "__q_" + eventObj.type;
var _local4 = queueObj[_local7];
if (_local4 != undefined) {
var _local5;
for (_local5 in _local4) {
var _local1 = _local4[_local5];
var _local3 = typeof(_local1);
if ((_local3 == "object") || (_local3 == "movieclip")) {
if (_local1.handleEvent != undefined) {
_local1.handleEvent(eventObj);
}
if (_local1[eventObj.type] != undefined) {
if (exceptions[eventObj.type] == undefined) {
_local1[eventObj.type](eventObj);
}
}
} else {
_local1.apply(queueObj, [eventObj]);
}
}
}
}
function dispatchEvent(eventObj) {
if (eventObj.target == undefined) {
eventObj.target = this;
}
this[eventObj.type + "Handler"](eventObj);
dispatchQueue(this, eventObj);
}
function addEventListener(event, handler) {
var _local3 = "__q_" + event;
if (this[_local3] == undefined) {
this[_local3] = new Array();
}
_global.ASSetPropFlags(this, _local3, 1);
_removeEventListener(this[_local3], event, handler);
this[_local3].push(handler);
}
function removeEventListener(event, handler) {
var _local2 = "__q_" + event;
_removeEventListener(this[_local2], event, handler);
}
static var _fEventDispatcher = undefined;
static var exceptions = {move:1, draw:1, load:1};
}
Symbol 303 MovieClip [__Packages.GravityTunnelGame] Frame 0
class GravityTunnelGame extends GameBase
{
var console, root, sTrace;
function GravityTunnelGame (scope) {
super();
console = SConsole.getInstance();
root = scope;
SConsole.session.addValue("version", (CURRENT_VERSION + " ") + VERSION_NUMBER);
var _local3 = modules.screens.ScreenManager.getInstance();
_local3.init(scope, 500, 300);
var _local6 = true;
var _local4 = new modules.system.System();
modules.screens.MochiLoader.loader = new se.salomonsson.loader.MSLoader("loader_mc");
_local4.__set__loader(new modules.screens.MochiLoader("06f51abd473363e8", "500x300"));
_local4.setup(_local6);
if (CURRENT_VERSION == MINDJOLT) {
var _local5 = new se.salomonsson.onlinehiscore.MindJoltHiscore(20);
} else {
var _local5 = new se.salomonsson.onlinehiscore.MochiLeaderBoard(20);
}
_local4.addStartupTask(new synchronizer.Task(this, gotoStartFrame));
_local4.addStartupTask(new synchronizer.Task(this, setupModel));
_local3.addBackgroundScreen(new screens.BackgroundScreen(), "background");
_local3.addScreen(new screens.StartScreen(), "StartScreen");
_local3.addScreen(new screens.LocalScoreScreen(), "LocalScore");
_local3.addScreen(new screens.MultipleHiscoreScreen(_local5), "Hiscore");
_local3.addScreen(new screens.CreditsScreen(), "Credits");
_local3.addScreen(new screens.InstructionScreen(), "Instructions");
_local3.addScreen(new screens.LevelScreen(), "Levels");
_local3.addScreen(new screens.GameScreen(), "Game");
_local3.addScreen(new screens.SubmitScreen(_local5), "Submit");
_local3.addScreen(new screens.ErrorScreen(), "Error");
SConsole.module("musicmixer").setVolumeHandler(new modules.musicmixer.Mute("sound_on", "sound_off"));
SConsole.module("ticker").FPS = 35;
modules.musicmixer.Song.useLibraryAssets = true;
_local4.startup();
}
function setupModel(ts) {
var _local1 = modules.screens.ScreenManager.getInstance();
var _local2 = se.salomonsson.grav.Model.getInstance();
_local2.setup(_local1.__get__root(), "spaceShip");
_local1.__get__root()._lockroot = true;
ts.completed();
}
function gotoStartFrame(ts) {
sTrace("GO TO STARTFRAME");
root.gotoAndStop("start");
ts.completed();
}
var namespace = new Array("GravitTunnelGame");
var ORIGINAL = "version";
var MINDJOLT = "mindjolted version";
var CURRENT_VERSION = GravityTunnelGame.prototype.ORIGINAL;
var VERSION_NUMBER = "1.1";
}
Symbol 304 MovieClip [__Packages.modules.screens.ScreenManager] Frame 0
class modules.screens.ScreenManager extends modules.Module
{
static var instance;
var screens, backgroundScreens, currentScreen, firstScreen, consoleRoot, screenHolder, maskMc, debugHolder, stageWidth, stageHeight, sError, backgroundScreenHolder, sTrace, screenTransition;
function ScreenManager () {
super();
Stage.scaleMode = "noScale";
Stage.align = "TL";
Stage.addListener(this);
screens = new collections.ObjectArray();
backgroundScreens = new collections.ObjectArray();
currentScreen = null;
firstScreen = null;
}
static function get backgroundScreen() {
return(instance.currentBackground);
}
static function set backgroundScreen(id) {
var _local1 = modules.screens.IScreen(instance.backgroundScreens.getValue(id));
if (_local1 == backgroundScreen) {
return;
}
instance.sTrace("set bg screen " + _local1);
var _local2 = new synchronizer.TaskSequence();
if (instance.currentBackground != null) {
_local2.addSequentialTask(backgroundScreen, backgroundScreen.outro);
}
if (_local1 != null) {
_local2.addSequentialTask(_local1, _local1.intro);
}
instance.currentBackground = _local1;
_local2.execute();
//return(backgroundScreen);
}
function get root() {
if (consoleRoot == null) {
init(_root, Stage.width, Stage.height);
}
return(screenHolder);
}
function get mask() {
if (root == null) {
init(_root, Stage.width, Stage.height);
}
return(maskMc);
}
function get topLayer() {
if (root == null) {
init(_root, Stage.width, Stage.height);
}
return(debugHolder);
}
function get width() {
if (root == null) {
return(Stage.width);
}
return(stageWidth);
}
function get height() {
if (root == null) {
return(Stage.height);
}
return(stageHeight);
}
static function getInstance() {
if (instance == null) {
instance = new modules.screens.ScreenManager();
}
return(instance);
}
function init(__root, stageWidth, stageHeight) {
if (consoleRoot != null) {
sError("Warning: Trying to define root when root already exists. Reassigning root!");
screenHolder.removeMovieClip();
backgroundScreenHolder.removeMovieClip();
maskMc.removeMovieClip();
debugHolder.removeMovieClip();
}
this.stageWidth = stageWidth;
this.stageHeight = stageHeight;
consoleRoot = __root;
backgroundScreenHolder = consoleRoot.createEmptyMovieClip("backgroundHolder", consoleRoot.getNextHighestDepth());
screenHolder = consoleRoot.createEmptyMovieClip("screenHolder", consoleRoot.getNextHighestDepth());
maskMc = consoleRoot.createEmptyMovieClip("screenMask", consoleRoot.getNextHighestDepth());
debugHolder = consoleRoot.createEmptyMovieClip("debugHolder", consoleRoot.getNextHighestDepth());
onResize();
}
function loadScreens(ts) {
sTrace("Loading screens");
var _local8 = new synchronizer.TaskSequence();
var _local2;
_local2 = 0;
while (_local2 < backgroundScreens.count()) {
var _local5 = modules.screens.IScreen(backgroundScreens.getValue(backgroundScreens.getKey(_local2)));
var _local4 = backgroundScreenHolder.getNextHighestDepth();
var _local6 = backgroundScreenHolder.createEmptyMovieClip("bg_" + _local4, _local4);
_local8.addSequentialTask(_local5, _local5.load, [_local6]);
_local2++;
}
_local2 = 0;
while (_local2 < screens.count()) {
var _local3 = modules.screens.IScreen(screens.getValue(screens.getKey(_local2)));
var _local4 = screenHolder.getNextHighestDepth();
var _local7 = screenHolder.createEmptyMovieClip("screen_" + _local4, _local4);
_local8.addSequentialTask(_local3, _local3.load, [_local7]);
_local2++;
}
_local8.addSequentialTask(this, loadAssets);
_local8.addSequentialTask(ts, ts.completed);
_local8.execute();
}
function reset(ts) {
sTrace("Resetting screens...");
openScreen(firstScreen);
ts.completed();
}
function hardReset(ts) {
}
function addScreen(newScreen, id) {
if (firstScreen == null) {
firstScreen = id;
}
screens.addValue(id, newScreen);
}
function addBackgroundScreen(bgScreen, id) {
backgroundScreens.addValue(id, bgScreen);
}
function openScreen(id, ts) {
sTrace((("open new screen with id " + id) + " ts=") + ts);
var _local2 = modules.screens.IScreen(screens.getValue(id));
sTrace("current screen is " + currentScreen);
sTrace("next screen is " + _local2);
if (_local2 != null) {
screenTransition.aborted();
screenTransition = new synchronizer.TaskSequence();
if (currentScreen != null) {
screenTransition.addSequentialTask(currentScreen, currentScreen.outro);
}
screenTransition.addSequentialTask(_local2, _local2.intro);
screenTransition.addSequentialTask(ts, ts.completed);
screenTransition.execute();
currentScreen = _local2;
}
}
function inactivateAll() {
var _local2 = 0;
while (_local2 < screens.count()) {
var _local3 = modules.screens.IScreen(screens.getValue(screens.getKey(_local2)));
_local3.inactivate();
_local2++;
}
}
function loadAssets(ts) {
var _local2 = modules.assets.AssetManager(SConsole.module("assets"));
sTrace("load assets from " + _local2);
if (_local2 != null) {
_local2.setCallback(ts, ts.completed);
_local2.startLoad();
} else {
ts.completed();
}
}
function onResize() {
if (consoleRoot != null) {
var _local4 = Math.round((Stage.width / 2) - (stageWidth / 2));
var _local2 = Math.round((Stage.height / 2) - (stageHeight / 2));
consoleRoot._x = 0;
consoleRoot._y = 0;
backgroundScreenHolder._x = _local4;
backgroundScreenHolder._y = _local2;
screenHolder._x = _local4;
screenHolder._y = _local2;
maskMc._x = 0;
maskMc._y = 0;
debugHolder._x = 0;
debugHolder._y = 0;
maskMc.clear();
var _local3 = 0;
ui.Draw.rectangle(maskMc, {_w:Stage.width, _h:_local2}, _local3, 100);
ui.Draw.rectangle(maskMc, {_w:_local4, _h:Stage.height}, _local3, 100);
ui.Draw.rectangle(maskMc, {_x:_local4 + stageWidth, _w:Stage.width, _h:Stage.height}, _local3, 100);
ui.Draw.rectangle(maskMc, {_y:_local2 + stageHeight, _w:Stage.width, _h:Stage.height}, _local3, 100);
}
}
var namespace = new Array("modules", "screen", "ScreenManager");
}
Symbol 305 MovieClip [__Packages.modules.screens.IScreen] Frame 0
interface modules.screens.IScreen
{
}
Symbol 306 MovieClip [__Packages.synchronizer.ITaskStatus] Frame 0
interface synchronizer.ITaskStatus
{
}
Symbol 307 MovieClip [__Packages.synchronizer.Task] Frame 0
class synchronizer.Task implements synchronizer.ITaskStatus
{
var targetObject, targetMethod, targetMethodParameters, done, completionHandler, __get__onCompletion, failureHandler, __get__onFailure, abortionHandler, __get__onAbortion, taskOwner, id;
function Task (targetObject, targetMethod, targetMethodParameters) {
this.targetObject = targetObject;
this.targetMethod = targetMethod;
this.targetMethodParameters = targetMethodParameters;
done = false;
}
function set onCompletion(handler) {
completionHandler = handler;
//return(__get__onCompletion());
}
function set onFailure(handler) {
failureHandler = handler;
//return(__get__onFailure());
}
function set onAbortion(handler) {
abortionHandler = handler;
//return(__get__onAbortion());
}
function completed(Void) {
if (!done) {
done = true;
if (taskOwner != undefined) {
taskOwner.subTaskCompleted(id);
}
if (completionHandler != undefined) {
completionHandler.apply(undefined);
delete completionHandler;
}
}
}
function aborted(Void) {
if (!done) {
done = true;
if (taskOwner != undefined) {
taskOwner.subTaskAborted(id);
}
if (abortionHandler != undefined) {
abortionHandler.apply(undefined);
delete abortionHandler;
}
}
}
function failed(Void) {
if (!done) {
done = true;
if ((!taskOwner) != undefined) {
taskOwner.subTaskFailed(id);
}
if (failureHandler != undefined) {
failureHandler.apply(undefined);
delete failureHandler;
}
}
}
function setTaskID(id) {
this.id = id;
}
function setTaskOwner(owner) {
taskOwner = owner;
}
function execute(Void) {
if (!done) {
try {
if (targetMethodParameters == undefined) {
targetMethodParameters = new Array();
}
targetMethodParameters.push(this);
targetMethod.apply(targetObject, targetMethodParameters);
} catch(e:Error) {
trace("*** Catching error in Task.execute() ***");
failed();
}
}
}
function traceTask() {
trace("task: " + targetObject.toString());
}
function toString() {
return(("[" + namespace.join(".")) + "]");
}
var namespace = new Array("synchronizer", "Task");
var sequential = true;
}
Symbol 308 MovieClip [__Packages.synchronizer.TaskSequence] Frame 0
class synchronizer.TaskSequence extends synchronizer.Task
{
static var queue, processID;
var namespace, waiting, active, totalItems, done, aborted, failed, completed;
function TaskSequence () {
super();
namespace = new Array("synchronizer", "TaskSequence");
waiting = new Array();
active = new Array();
active.items = 0;
totalItems = 0;
}
function addTask(task) {
task.setTaskOwner(this);
waiting.push(task);
totalItems++;
}
function addSequentialTask(targetObject, targetMethod, targetMethodParameters) {
var _local2 = new synchronizer.Task(targetObject, targetMethod, targetMethodParameters);
_local2.sequential = true;
addTask(_local2);
}
function addParallelTask(targetObject, targetMethod, targetMethodParameters) {
var _local2 = new synchronizer.Task(targetObject, targetMethod, targetMethodParameters);
_local2.sequential = false;
addTask(_local2);
}
function subTaskCompleted(id) {
if (active[id] != undefined) {
delete active[id];
active.items--;
}
if (!done) {
post(this);
}
}
function subTaskAborted(id) {
delete waiting;
delete active;
aborted();
}
function subTaskFailed(id) {
delete waiting;
delete active;
failed();
}
function execute(Void) {
try {
if (!done) {
var _local2;
var _local4;
if ((waiting.length == 0) && (active.items == 0)) {
completed();
} else {
while (waiting.length > 0) {
if ((active.items > 0) && (waiting[0].sequential)) {
break;
}
_local2 = waiting.shift();
var _local3 = ++active.items;
_local2.setTaskID(_local3);
active[_local3] = _local2;
_local2.execute();
}
}
}
} catch(e:Error) {
trace("*** Catching error in TaskSequence.execute() ***");
failed();
}
}
static function post(t) {
if (queue == undefined) {
queue = new Array();
}
queue.push(t);
startProcessing();
}
static function startProcessing(Void) {
if (processID == undefined) {
processID = setInterval(process, 10);
}
}
static function stopProcessing(Void) {
if (processID != undefined) {
clearInterval(processID);
processID = undefined;
}
}
static function process(Void) {
if (queue.length > 0) {
var _local2;
var _local3 = queue.length;
var _local1 = 0;
while (_local1 < _local3) {
_local2 = queue.shift();
_local2.execute.apply(_local2);
_local1++;
}
} else {
stopProcessing();
}
}
function toString() {
return(("[" + namespace.join(".")) + "]");
}
}
Symbol 309 MovieClip [__Packages.modules.assets.AssetManager] Frame 0
class modules.assets.AssetManager extends modules.Module
{
var queue, callbacks, currentLoad, dataHolder, sTrace, mp3FailCounter, bugFixIntervalId, sError;
function AssetManager () {
super();
queue = new Array();
callbacks = new Array();
currentLoad = null;
dataHolder = new Object();
}
function setCallback(caller, callback) {
var _local2 = utils.Proxy.create(caller, callback);
callbacks.push(_local2);
sTrace("Number of callbacks are now " + callbacks.length);
}
function addJob(type, identifier, src, target) {
var _local2 = {type:type, id:identifier, src:src, target:target};
sTrace((((("adding loadJob " + type) + " ") + identifier) + ", src: ") + src);
if (!exists(_local2)) {
sTrace("loadjob dont exist, load it!");
queue.push(_local2);
}
}
function startLoad() {
sTrace("AssetManager.startLoad " + queue.length);
if (queue.length > 0) {
loadData();
} else {
loadDone();
}
}
function getManagedData(type, identifier) {
var _local2 = dataHolder[type][identifier];
if (_local2 != undefined) {
return(_local2);
}
if (type == "path") {
return("");
}
return(null);
}
function setManagedData(type, identifier, data) {
if (dataHolder[type] == undefined) {
dataHolder[type] = new Object();
}
if (dataHolder[type][identifier] != undefined) {
sTrace("ERROR!! Manager.dataHolder duplication id error!");
sTrace("type: " + type);
sTrace("identifier" + identifier);
sTrace("****************************");
return(false);
}
dataHolder[type][identifier] = data;
sTrace((((("Manager added type[" + type) + "][") + identifier) + "]: ") + data);
return(true);
}
function clearManagedData(type, identifier) {
if (arguments.length == 0) {
dataHolder = new Object();
} else if (arguments.length == 1) {
dataHolder[type] = null;
} else {
dataHolder[type][identifier] = null;
}
}
function exists(loadJob) {
if (getManagedData(loadJob.type, loadJob.id) != null) {
return(true);
}
var _local2 = 0;
while (_local2 < queue.length) {
if (queue[_local2] == loadJob) {
return(true);
}
_local2++;
}
return(false);
}
function loadData() {
currentLoad = queue.shift();
switch (currentLoad.type) {
case "path" :
case "xml" :
loadXml(currentLoad.src);
break;
case "css" :
loadCss(currentLoad.src);
break;
case "mp3" :
sTrace("loadData() src = " + currentLoad.src);
loadMp3(currentLoad.src);
break;
case "swf" :
case "img" :
loadSwf(currentLoad.src, currentLoad.target);
break;
case "bmp" :
var _local3 = _root.getNextHighestDepth();
var _local4 = _root.createEmptyMovieClip("temp_" + _local3, _local3);
loadBmp(currentLoad.src, _local4);
}
}
function loadXml(src) {
sTrace("loadXml " + String(getManagedData("path", "xml") + src));
var _local3 = new data.GetData(String(getManagedData("path", "xml") + src), this, loadDone);
}
function loadSwf(src, target) {
var _local2 = new MovieClipLoader();
_local2.addListener(this);
_local2.loadClip(src, target);
}
function loadBmp(src, target) {
var _local3 = new MovieClipLoader();
var _local2 = new Object();
var a = this;
_local2.onLoadInit = function (success) {
a.sTrace("Bitmap loaded!");
var _local1 = new flash.display.BitmapData(target._width, target._height, true, 16777215);
_local1.draw(target);
target.removeMovieClip();
a.loadDone(_local1);
};
_local2.onLoadError = function () {
a.sError("Error loading external bitmap " + src);
target.removeMovieClip();
a.loadDone(null);
};
_local3.addListener(_local2);
_local3.loadClip(src, target);
}
function onLoadInit(targetMc) {
loadDone();
}
function loadCss(src) {
var _local2 = new TextField.StyleSheet();
_local2.load(getManagedData("path", "css") + src);
_local2.onLoad = utils.Proxy.create(this, cssLoaded, _local2);
}
function cssLoaded(success, data) {
if (success != true) {
sTrace("**WARNING: unable to load css: " + currentLoad.type);
}
loadDone(data);
}
function loadMp3(src) {
var _local2 = new Sound();
mp3FailCounter = 600;
bugFixIntervalId = setInterval(utils.Proxy.create(this, mp3LoadCheck, _local2), 15);
_local2.loadSound(src, false);
}
function mp3LoadCheck(snd) {
if (snd.getBytesLoaded() == 0) {
if ((--mp3FailCounter) <= 0) {
mp3Loaded(false, null);
}
}
if (snd.getBytesLoaded() == snd.getBytesTotal()) {
clearInterval(bugFixIntervalId);
mp3Loaded(true, snd);
}
}
function mp3Loaded(success, data) {
sTrace("the mp3 is loaded " + success);
if (success != true) {
sError("unable to load mp3: " + currentLoad.src);
}
loadDone(data);
}
function loadDone(data) {
if (data != undefined) {
setManagedData(currentLoad.type, currentLoad.id, data);
}
currentLoad = null;
if (queue.length > 0) {
loadData();
} else {
var _local3 = callbacks.slice();
callbacks = new Array();
sTrace("Load done. Callbacks: " + _local3.length);
var _local2 = 0;
while (_local2 < _local3.length) {
_local3[_local2]();
_local2++;
}
}
}
var namespace = new Array("modules", "assets", "AssetManager");
}
Symbol 310 MovieClip [__Packages.utils.Proxy] Frame 0
class utils.Proxy
{
function Proxy () {
}
static function create(callTarget, callFunction) {
var parameters = new Array();
var _local2 = 2;
while (_local2 < arguments.length) {
parameters.push(arguments[_local2]);
_local2++;
}
var _local4 = function () {
var _local2 = arguments.concat(parameters);
_local2.push(arguments.callee);
callFunction.apply(callTarget, _local2);
};
return(_local4);
}
static function exec(callTarget, callFunction) {
var parameters = new Array();
var _local2 = 2;
while (_local2 < arguments.length) {
parameters.push(arguments[_local2]);
_local2++;
}
var _local4 = function () {
var _local2 = arguments.concat(parameters);
_local2.push(arguments.callee);
callFunction.apply(callTarget, _local2);
};
_local4();
}
}
Symbol 311 MovieClip [__Packages.data.GetData] Frame 0
class data.GetData
{
var caller, callback, loadedXML, dataSet, completed;
function GetData (sourceXML, c, cb) {
caller = c;
callback = cb;
loadedXML = new XML();
loadedXML.ignoreWhite = true;
loadedXML.onLoad = utils.Proxy.create(this, generateDataSet);
loadedXML.load(sourceXML);
}
function generateDataSet() {
dataSet = new Object();
dataSet.data = getDataSet(loadedXML.childNodes[0]);
completed = utils.Proxy.create(caller, callback, dataSet);
completed();
delete loadedXML;
}
function getDataSet(xml_object) {
var _local3 = xml_object;
var _local4 = new Object();
for (var _local6 in _local3.attributes) {
_local4[_local6] = _local3.attributes[_local6];
}
if (_local3.childNodes[0].nodeValue != null) {
_local4.value = _local3.childNodes[0].nodeValue;
} else {
var _local2 = 0;
while (_local2 < _local3.childNodes.length) {
var _local5 = new Object();
_local5 = getDataSet(_local3.childNodes[_local2]);
if (_local4[_local3.childNodes[_local2].nodeName] == undefined) {
_local4[_local3.childNodes[_local2].nodeName] = new Array();
}
_local4[_local3.childNodes[_local2].nodeName].push(_local5);
_local2++;
}
}
return(_local4);
}
}
Symbol 312 MovieClip [__Packages.ui.Draw] Frame 0
class ui.Draw
{
function Draw () {
}
static function rectangle(target, dimensions, color, alpha) {
var x = (isNaN(dimensions._x) ? 0 : (dimensions._x));
var y = (isNaN(dimensions._y) ? 0 : (dimensions._y));
var w = (isNaN(dimensions._w) ? 0 : (dimensions._w));
var h = (isNaN(dimensions._h) ? 0 : (dimensions._h));
var c1 = 0;
var c2 = 0;
var c3 = 0;
var c4 = 0;
if (!isNaN(dimensions._c)) {
c1 = (c2 = (c3 = (c4 = int(dimensions._c))));
}
if (!isNaN(dimensions._c1)) {
c1 = int(dimensions._c1);
c2 = int(dimensions._c2);
c3 = int(dimensions._c3);
c4 = int(dimensions._c4);
}
var fillColor = color;
var fillAlpha = alpha;
with (target) {
moveTo(x + c1, y);
beginFill(fillColor, fillAlpha);
lineTo(w - c2, y);
curveTo(w, y, w, y + c2);
lineTo(w, h - c3);
curveTo(w, h, w - c3, h);
lineTo(x + c4, h);
curveTo(x, h, x, h - c4);
lineTo(x, y + c1);
curveTo(x, y, x + c1, y);
endFill();
}
}
static function circle(holder, dimensions, color, alpha, lineWidth, lineAlpha, lineColor, centered) {
var x = (isNaN(dimensions._x) ? 0 : (dimensions._x));
var y = (isNaN(dimensions._y) ? 0 : (dimensions._y));
var w = (isNaN(dimensions._w) ? 0 : (dimensions._w));
var h = (isNaN(dimensions._h) ? 0 : (dimensions._h));
if (centered) {
x = (w / 2) - w;
y = (h / 2) - h;
w = w / 2;
h = h / 2;
}
var fillColor = color;
var fillAlpha = alpha;
var lineColor = lineColor;
var lineAlpha = lineAlpha;
var lineWidth = lineWidth;
var tx = w;
var ty = h;
var bx = x;
var by = y;
if ((w > x) && (h > y)) {
tx = x;
ty = y;
bx = w;
by = h;
} else if ((w < x) && (h > y)) {
tx = w;
ty = y;
bx = x;
by = h;
} else if ((w > x) && (h < y)) {
tx = x;
ty = h;
bx = w;
by = y;
}
var nw = (bx - tx);
var nh = (by - ty);
var a = (nw / 2);
var b = (nw / 7);
var c = (nw / 10);
var d = (nh / 2);
var e = (nh / 7);
var f = (nh / 10);
var m = 2.9;
with (holder) {
clear();
moveTo(tx + a, ty);
if (lineWidth > 0) {
lineStyle(lineWidth, lineColor, lineAlpha);
}
beginFill(fillColor, fillAlpha);
curveTo((tx + nw) - (c * m), ty, (tx + nw) - b, ty + e);
curveTo(tx + nw, ty + (f * m), tx + nw, ty + d);
curveTo(tx + nw, (ty + nh) - (f * m), (tx + nw) - b, (ty + nh) - e);
curveTo((tx + nw) - (c * m), ty + nh, tx + a, ty + nh);
curveTo(tx + (c * m), ty + nh, tx + b, (ty + nh) - e);
curveTo(tx, (ty + nh) - (f * m), tx, ty + d);
curveTo(tx, ty + (f * m), tx + b, ty + e);
curveTo(tx + (c * m), ty, tx + a, ty);
endFill();
}
}
}
Symbol 313 MovieClip [__Packages.modules.system.System] Frame 0
class modules.system.System extends modules.Module
{
var loaderScreen, __get__loader, sTrace, startupTasks, consoleStartup, loadTask, loadInterval;
function System () {
super();
}
function set loader(loaderScreen) {
this.loaderScreen = loaderScreen;
//return(__get__loader());
}
function setup(useTracer) {
var _local2 = SConsole.getInstance();
var _local3 = modules.screens.ScreenManager.getInstance();
var _local4 = new modules.debug.Tracer();
_local4.setConsole(new modules.debug.TraceConsole());
_local4.setConsole(new modules.debug.DebugConsole(_local3.__get__width(), _local3.__get__height() * 0.7, _local3.__get__topLayer()));
_local4.setActive(useTracer);
_local4.trace(namespace, "System creating new Tracer(s) to Console");
if (loaderScreen == null) {
loaderScreen = new modules.screens.Loader();
}
_local2.addModule(_local4, "tracer");
_local2.addModule(this, "system");
_local2.addModule(new modules.assets.AssetManager(), "assets");
_local2.addModule(new modules.musicmixer.MusicMixer(), "musicmixer");
_local2.addModule(new modules.system.Ticker(), "ticker");
_local2.addModule(_local3, "screenManager");
_local2.addModule(modules.Module(loaderScreen), "loader");
_local2.addModule(new modules.persistant.Cookie(), "cookie");
addStartupTask(new synchronizer.Task(this, loadConfig));
addStartupTask(new synchronizer.Task(_local3, _local3.loadScreens));
addStartupTask(new synchronizer.Task(this, loadSystem));
}
function loadConfig(ts) {
sTrace("load configuration");
ts.completed();
}
function addStartupTask(t) {
if (startupTasks == undefined) {
startupTasks = new synchronizer.TaskSequence();
startupTasks.sequential = true;
}
t.sequential = true;
startupTasks.addTask(t);
}
function startup() {
var _local3 = new modules.screens.ApplicationIntro();
var _local2 = SConsole.module("screenManager");
var _local4 = SConsole.module("loader");
sTrace("* Starting Console startup sequence *");
consoleStartup = new synchronizer.TaskSequence();
if (SConsole.__get__devMode()) {
consoleStartup.addSequentialTask(this, delaySequence, [300]);
consoleStartup.addSequentialTask(this, executecuteStartupTasks);
consoleStartup.addSequentialTask(_local2, _local2.reset);
} else {
consoleStartup.addSequentialTask(_local4, _local4.show);
consoleStartup.addSequentialTask(this, executecuteStartupTasks);
consoleStartup.addSequentialTask(_local3, _local3.load);
consoleStartup.addSequentialTask(_local4, _local4.hide);
consoleStartup.addSequentialTask(_local3, _local3.intro);
consoleStartup.addSequentialTask(_local2, _local2.reset);
consoleStartup.addSequentialTask(this, sTrace, ["* Console startupSequence completed! *"]);
}
consoleStartup.execute();
}
function executecuteStartupTasks(ts) {
sTrace("Manually executing startupTasks");
startupTasks.__set__onCompletion(utils.Proxy.create(ts, ts.completed));
startupTasks.execute();
}
function loadSystem(loadTask) {
this.loadTask = loadTask;
loadInterval = setInterval(utils.Proxy.create(this, checkLoadSystem), 100);
checkLoadSystem();
}
function checkLoadSystem() {
sTrace("checkLoadSystem");
if (_root.getBytesLoaded() == _root.getBytesTotal()) {
sTrace("load system completed!");
clearInterval(loadInterval);
loadTask.completed();
}
}
function delaySequence(ms, ts) {
utils.Delay.create(ts, ts.completed, ms);
}
var namespace = new Array("modules", "system", "System");
}
Symbol 314 MovieClip [__Packages.modules.debug.Tracer] Frame 0
class modules.debug.Tracer extends modules.Module
{
var outputs, active;
function Tracer () {
super();
outputs = new Array();
}
static function setFilter(filter) {
trace(("setting filter to [" + filter.join(".")) + "]");
filterArray = filter;
}
function setActive(flag) {
active = flag;
var _local2 = 0;
while (_local2 < outputs.length) {
modules.debug.ITraceable(outputs[_local2]).setActive(flag);
_local2++;
}
}
function setConsole(console) {
console.setActive(active);
outputs.push(console);
trace(namespace, "Added debug console: " + console);
}
function error(ns, msg) {
if (active == true) {
output("*** WARNING: " + msg, ns);
}
logError(ns, msg);
}
function trace(ns, msg) {
if (active != true) {
return(undefined);
}
if (!checkFilter(ns)) {
return(undefined);
}
output(msg, ns);
}
function output(msg, ns) {
var _local4 = "";
_local4 = _local4 + ns.join(".");
_local4 = _local4 + " ::\t\t";
_local4 = _local4 + msg;
var _local2 = 0;
while (_local2 < outputs.length) {
var _local3 = modules.debug.ITraceable(outputs[_local2]);
_local3.output(_local4);
_local2++;
}
}
function checkFilter(ns) {
var _local1 = 0;
while (_local1 < filterArray.length) {
if (filterArray[_local1] == "all") {
return(true);
}
if (filterArray[_local1] != ns[_local1]) {
return(false);
}
_local1++;
}
return(true);
}
function logError(ns, msg) {
}
var namespace = new Array("modules", "debug", "Tracer");
static var filterArray = new Array("all");
}
Symbol 315 MovieClip [__Packages.modules.debug.ITraceable] Frame 0
interface modules.debug.ITraceable
{
}
Symbol 316 MovieClip [__Packages.modules.debug.TraceConsole] Frame 0
class modules.debug.TraceConsole implements modules.debug.ITraceable
{
function TraceConsole () {
}
function output(msg) {
trace("** " + msg);
}
function setActive(flag) {
}
function toString() {
return(namespace.join("."));
}
var namespace = new Array("modules", "debug", "TraceConsole");
}
Symbol 317 MovieClip [__Packages.modules.debug.DebugConsole] Frame 0
class modules.debug.DebugConsole implements modules.debug.ITraceable
{
var width, height, mc, isVisible, isSelected, tf, isActive;
function DebugConsole (width, height, holderMc) {
var _local2 = holderMc.getNextHighestDepth();
this.width = width;
this.height = height;
mc = holderMc.createEmptyMovieClip("debugConsole", _local2);
isVisible = false;
isSelected = false;
mc._visible = false;
build();
Key.addListener(this);
}
function output(msg) {
tf.text = tf.text + (msg + newline);
if (!isSelected) {
tf.scroll = tf.maxscroll;
}
}
function show() {
mc._visible = true;
isVisible = true;
isSelected = false;
isActive = true;
var _local2 = new mx.transitions.Tween(mc, "_y", mx.transitions.easing.Strong.easeOut, -height, 0, 0.3, true);
}
function hide() {
mc._visible = false;
isVisible = false;
isSelected = false;
}
function build() {
ui.Draw.rectangle(mc, {_x:0, _y:0, _w:width, _h:height}, 16777215, 90);
tf = mc.createTextField("tf", 2, 2, 2, width - 4, height - 4);
tf.multiline = true;
tf.wordWrap = false;
tf.selectable = true;
tf.type = "input";
tf.onSetFocus = utils.Proxy.create(this, setFocus);
tf.onKillFocus = utils.Proxy.create(this, killFocus);
var _local2 = new TextFormat();
_local2.font = "arial";
_local2.size = 12;
_local2.color = 0;
tf.setNewTextFormat(_local2);
}
function setActive(flag) {
isActive = flag;
if (!flag) {
hide();
}
}
function toString() {
return(namespace.join("."));
}
function onKeyUp() {
if (!isActive) {
return(undefined);
}
if (Key.getCode() == TOGGLE_KEY) {
if (isVisible) {
hide();
} else {
show();
}
}
}
function setFocus() {
isSelected = true;
}
function killFocus() {
isSelected = false;
}
var namespace = new Array("modules", "debug", "DebugConsole");
static var TOGGLE_KEY = 220;
}
Symbol 318 MovieClip [__Packages.mx.transitions.OnEnterFrameBeacon] Frame 0
class mx.transitions.OnEnterFrameBeacon
{
function OnEnterFrameBeacon () {
}
static function init() {
var _local4 = _global.MovieClip;
if (!_root.__OnEnterFrameBeacon) {
mx.transitions.BroadcasterMX.initialize(_local4);
var _local3 = _root.createEmptyMovieClip("__OnEnterFrameBeacon", 9876);
_local3.onEnterFrame = function () {
_global.MovieClip.broadcastMessage("onEnterFrame");
};
}
}
static var version = "1.1.0.52";
}
Symbol 319 MovieClip [__Packages.mx.transitions.BroadcasterMX] Frame 0
class mx.transitions.BroadcasterMX
{
var _listeners;
function BroadcasterMX () {
}
static function initialize(o, dontCreateArray) {
if (o.broadcastMessage != undefined) {
delete o.broadcastMessage;
}
o.addListener = mx.transitions.BroadcasterMX.prototype.addListener;
o.removeListener = mx.transitions.BroadcasterMX.prototype.removeListener;
if (!dontCreateArray) {
o._listeners = new Array();
}
}
function addListener(o) {
removeListener(o);
if (broadcastMessage == undefined) {
broadcastMessage = mx.transitions.BroadcasterMX.prototype.broadcastMessage;
}
return(_listeners.push(o));
}
function removeListener(o) {
var _local2 = _listeners;
var _local3 = _local2.length;
while (_local3--) {
if (_local2[_local3] == o) {
_local2.splice(_local3, 1);
if (!_local2.length) {
broadcastMessage = undefined;
}
return(true);
}
}
return(false);
}
function broadcastMessage() {
var _local5 = String(arguments.shift());
var _local4 = _listeners.concat();
var _local6 = _local4.length;
var _local3 = 0;
while (_local3 < _local6) {
_local4[_local3][_local5].apply(_local4[_local3], arguments);
_local3++;
}
}
static var version = "1.1.0.52";
}
Symbol 320 MovieClip [__Packages.mx.transitions.Tween] Frame 0
class mx.transitions.Tween
{
var obj, prop, begin, useSeconds, _listeners, addListener, prevTime, _time, looping, _duration, broadcastMessage, isPlaying, _fps, prevPos, _pos, change, _intervalID, _startTime;
function Tween (obj, prop, func, begin, finish, duration, useSeconds) {
mx.transitions.OnEnterFrameBeacon.init();
if (!arguments.length) {
return;
}
this.obj = obj;
this.prop = prop;
this.begin = begin;
position = (begin);
this.duration = (duration);
this.useSeconds = useSeconds;
if (func) {
this.func = func;
}
this.finish = (finish);
_listeners = [];
addListener(this);
start();
}
function set time(t) {
prevTime = _time;
if (t > duration) {
if (looping) {
rewind(t - _duration);
update();
broadcastMessage("onMotionLooped", this);
} else {
if (useSeconds) {
_time = _duration;
update();
}
stop();
broadcastMessage("onMotionFinished", this);
}
} else if (t < 0) {
rewind();
update();
} else {
_time = t;
update();
}
//return(time);
}
function get time() {
return(_time);
}
function set duration(d) {
_duration = (((d == null) || (d <= 0)) ? (_global.Infinity) : (d));
//return(duration);
}
function get duration() {
return(_duration);
}
function set FPS(fps) {
var _local2 = isPlaying;
stopEnterFrame();
_fps = fps;
if (_local2) {
startEnterFrame();
}
//return(FPS);
}
function get FPS() {
return(_fps);
}
function set position(p) {
setPosition(p);
//return(position);
}
function setPosition(p) {
prevPos = _pos;
obj[prop] = (_pos = p);
broadcastMessage("onMotionChanged", this, _pos);
updateAfterEvent();
}
function get position() {
return(getPosition());
}
function getPosition(t) {
if (t == undefined) {
t = _time;
}
return(func(t, begin, change, _duration));
}
function set finish(f) {
change = f - begin;
//return(finish);
}
function get finish() {
return(begin + change);
}
function continueTo(finish, duration) {
begin = position;
this.finish = (finish);
if (duration != undefined) {
this.duration = (duration);
}
start();
}
function yoyo() {
continueTo(begin, time);
}
function startEnterFrame() {
if (_fps == undefined) {
_global.MovieClip.addListener(this);
} else {
_intervalID = setInterval(this, "onEnterFrame", 1000 / _fps);
}
isPlaying = true;
}
function stopEnterFrame() {
if (_fps == undefined) {
_global.MovieClip.removeListener(this);
} else {
clearInterval(_intervalID);
}
isPlaying = false;
}
function start() {
rewind();
startEnterFrame();
broadcastMessage("onMotionStarted", this);
}
function stop() {
stopEnterFrame();
broadcastMessage("onMotionStopped", this);
}
function resume() {
fixTime();
startEnterFrame();
broadcastMessage("onMotionResumed", this);
}
function rewind(t) {
_time = ((t == undefined) ? 0 : (t));
fixTime();
update();
}
function fforward() {
time = (_duration);
fixTime();
}
function nextFrame() {
if (useSeconds) {
time = ((getTimer() - _startTime) / 1000);
} else {
time = (_time + 1);
}
}
function onEnterFrame() {
nextFrame();
}
function prevFrame() {
if (!useSeconds) {
time = (_time - 1);
}
}
function toString() {
return("[Tween]");
}
function fixTime() {
if (useSeconds) {
_startTime = getTimer() - (_time * 1000);
}
}
function update() {
position = (getPosition(_time));
}
static var version = "1.1.0.52";
static var __initBeacon = mx.transitions.OnEnterFrameBeacon.init();
static var __initBroadcaster = mx.transitions.BroadcasterMX.initialize(mx.transitions.Tween.prototype, true);
function func(t, b, c, d) {
return(((c * t) / d) + b);
}
}
Symbol 321 MovieClip [__Packages.mx.transitions.easing.Strong] Frame 0
class mx.transitions.easing.Strong
{
function Strong () {
}
static function easeIn(t, b, c, d) {
t = t / d;
return((((((c * t) * t) * t) * t) * t) + b);
}
static function easeOut(t, b, c, d) {
t = (t / d) - 1;
return((c * (((((t * t) * t) * t) * t) + 1)) + b);
}
static function easeInOut(t, b, c, d) {
t = t / (d / 2);
if (t < 1) {
return(((((((c / 2) * t) * t) * t) * t) * t) + b);
}
t = t - 2;
return(((c / 2) * (((((t * t) * t) * t) * t) + 2)) + b);
}
static var version = "1.1.0.52";
}
Symbol 322 MovieClip [__Packages.modules.screens.BaseScreen] Frame 0
class modules.screens.BaseScreen extends modules.Module implements modules.screens.IScreen
{
var sTrace, mc;
function BaseScreen () {
super();
sTrace("new screen created");
}
function get root() {
return(mc);
}
function intro(introTask) {
introTask.completed();
}
function outro(outroTask) {
outroTask.completed();
}
function activate() {
}
function inactivate() {
}
function load(mc, loadTask) {
this.mc = mc;
loadTask.completed();
}
var namespace = new Array("modules", "screens", "BaseScreen");
}
Symbol 323 MovieClip [__Packages.modules.screens.Loader] Frame 0
class modules.screens.Loader extends modules.screens.BaseScreen
{
var particles, blur, holder, animationTimer, tween, hideTS, bitmapHolder, logoHolder, width, height, bmp;
function Loader (loaderColor, linkageId) {
super();
if (loaderColor != undefined) {
this.loaderColor = loaderColor;
}
if (linkageId != null) {
logoLinkageId = linkageId;
}
particles = new Array();
blur = new flash.filters.BlurFilter(1.8, 1.8, 2);
}
function show(ts) {
if (holder == undefined) {
buildLoader();
}
holder._x = (SConsole.module("screenManager").width / 2) - (holder._width / 2);
holder._y = (SConsole.module("screenManager").height / 2) - (holder._height / 2);
bringToFront();
holder._visible = true;
animationTimer = setInterval(utils.Proxy.create(this, renderParticles), 30);
holder._alpha = 0;
tween = new mx.transitions.Tween(holder, "_alpha", mx.transitions.easing.None.easeNone, holder._alpha, 100, 1, true);
tween.onMotionFinished = utils.Proxy.create(ts, ts.completed);
}
function hide(ts) {
hideTS = ts;
tween = new mx.transitions.Tween(holder, "_alpha", mx.transitions.easing.None.easeNone, holder._alpha, 0, 1, true);
tween.onMotionFinished = utils.Proxy.create(this, outDone);
}
function outDone() {
holder._visible = false;
clearInterval(animationTimer);
utils.Delay.create(hideTS, hideTS.completed, 200);
}
function buildLoader() {
var _local3 = SConsole.module("screenManager").root;
holder = _local3.createEmptyMovieClip("loader", _local3.getNextHighestDepth());
bitmapHolder = holder.createEmptyMovieClip("bitmapHolder", holder.getNextHighestDepth());
logoHolder = holder.attachMovie("loader_mc", logoLinkageId, holder.getNextHighestDepth());
var _local2 = 140;
var _local4 = ((logoHolder._width > logoHolder._height) ? (logoHolder._width + _local2) : (logoHolder._height + _local2));
width = _local4;
height = _local4;
bmp = new flash.display.BitmapData(width, height, true, 16777215);
bitmapHolder.attachBitmap(bmp, bitmapHolder.getNextHighestDepth());
logoHolder._x = Math.round((width / 2) - (logoHolder._width / 2));
logoHolder._y = Math.round((height / 2) - (logoHolder._height / 2));
var _local6 = new Color(logoHolder);
_local6.setRGB(loaderColor);
var _local5 = logoHolder._height + 10;
particles.push(buildParticle(_local5, 0));
particles.push(buildParticle(_local5, Math.PI));
}
function buildParticle(dist, rad) {
var _local1 = {dist:dist, rad:rad, side:12, speed:0.08};
return(_local1);
}
function renderParticles() {
bmp.applyFilter(bmp, new flash.geom.Rectangle(0, 0, width, height), new flash.geom.Point(0, 0), blur);
bmp.colorTransform(bmp.rectangle, new flash.geom.ColorTransform(1, 1, 1, 1, 0, 0, 0, -3));
var _local3 = 0;
while (_local3 < particles.length) {
var _local2 = particles[_local3];
_local2.rad = _local2.rad + _local2.speed;
var _local6 = (width / 2) + (Math.cos(_local2.rad) * _local2.dist);
var _local5 = (height / 2) + (Math.sin(_local2.rad) * _local2.dist);
var _local4 = new flash.geom.Rectangle(_local6 - 6, _local5 - 6, _local2.side, _local2.side);
bmp.fillRect(_local4, loaderColor);
_local3++;
}
}
function bringToFront() {
var _local2 = SConsole.module("screenManager").root;
holder.swapDepths(_local2.getNextHighestDepth());
}
var namespace = new Array("modules", "screens", "Loader");
var loaderColor = 4290685826;
var logoLinkageId = "logo_mc";
}
Symbol 324 MovieClip [__Packages.mx.transitions.easing.None] Frame 0
class mx.transitions.easing.None
{
function None () {
}
static function easeNone(t, b, c, d) {
return(((c * t) / d) + b);
}
static function easeIn(t, b, c, d) {
return(((c * t) / d) + b);
}
static function easeOut(t, b, c, d) {
return(((c * t) / d) + b);
}
static function easeInOut(t, b, c, d) {
return(((c * t) / d) + b);
}
static var version = "1.1.0.52";
}
Symbol 325 MovieClip [__Packages.utils.Delay] Frame 0
class utils.Delay
{
static var delays;
var instanceId, intervalId;
function Delay (id) {
instanceId = id;
}
static function create(caller, callback, delay) {
if (arguments.length < 3) {
return(-1);
}
id++;
var _local2 = new utils.Delay(id);
if (delays == undefined) {
delays = new Array();
}
delays.push(_local2);
_local2.setup(arguments);
return(id);
}
static function abort(id) {
for (var _local2 in delays) {
if (delays[_local2].instanceId == id) {
delays[_local2].abortDelay();
delays[_local2] = null;
delays.splice(_local2, 1);
return(true);
}
}
return(false);
}
function setup(arg) {
var _local3 = arg[2];
arg.push(instanceId);
intervalId = setInterval(utils.Proxy.create(this, callDelay), _local3, arg);
}
function callDelay(arg) {
var _local4 = arg[0];
var _local3 = arg[1];
var _local5 = arg.slice(3, arg.length + 1);
_local3.apply(_local4, _local5);
clearInterval(intervalId);
}
function abortDelay() {
clearInterval(intervalId);
}
static var id = 0;
}
Symbol 326 MovieClip [__Packages.modules.musicmixer.MusicMixer] Frame 0
class modules.musicmixer.MusicMixer extends modules.Module
{
var tracks, sounds, sTrace;
function MusicMixer () {
super();
tracks = new collections.ObjectArray();
sounds = new Array();
createTrack("main");
}
function abortAll() {
var _local2 = 0;
while (_local2 < tracks.count()) {
tracks.getValue(tracks.getKey(_local2)).stop();
_local2++;
}
_local2 = 0;
while (_local2 < sounds.length) {
sounds[_local2].destroy();
_local2++;
}
sounds = new Array();
}
function createTrack(trackId) {
var _local3 = getTracks();
var _local2 = 0;
while (_local2 < _local3.length) {
if (_local3[_local2].getId == trackId) {
return(undefined);
}
_local2++;
}
var _local5 = new modules.musicmixer.Track(trackId);
tracks.addValue(trackId, _local5);
}
function getTracks() {
var _local3 = new Array();
var _local2 = 0;
while (_local2 < tracks.count()) {
_local3.push(tracks.getKey(_local2));
_local2++;
}
return(_local3);
}
function getTrack(key) {
if (key == undefined) {
key = "main";
}
var _local3 = modules.musicmixer.Track(tracks.getValue(key));
return(_local3);
}
function startSong(trackId, songId, useCrossFade, fadeDur1, fadeDur2, endVolume) {
var _local2 = getTrack(trackId);
if (songId == _local2.getCurrentSong().getId()) {
return(undefined);
}
if (!useCrossFade) {
_local2.swap(songId, fadeDur1, fadeDur2, endVolume);
return(undefined);
}
_local2.crossFade(songId, fadeDur1, endVolume);
}
function fadeOut(trackId, dur, cb) {
var _local2 = modules.musicmixer.Track(tracks.getValue(trackId));
_local2.stop(dur, cb);
}
function startFX(songId, loops, volume) {
if (loops == undefined) {
loops = 1;
}
if (volume == undefined) {
volume = 100;
}
var _local1 = new modules.musicmixer.Song(songId);
_local1.setVolume(volume);
_local1.play(0, loops);
}
function setVolume(val) {
sTrace("setting new global value to " + val);
modules.musicmixer.Song.globalVolume = val;
var _local2 = 0;
while (_local2 < tracks.count()) {
tracks.getValue(tracks.getKey(_local2)).getCurrentSong().setVolume(null);
_local2++;
}
}
function get volume() {
return(modules.musicmixer.Song.globalVolume);
}
function setVolumeHandler(volumeHandler) {
volumeHandler.setVolumeHandler(utils.Proxy.create(this, setVolume));
}
var namespace = new Array("modules", "musicmixer", "MusicMixer");
}
Symbol 327 MovieClip [__Packages.modules.musicmixer.Track] Frame 0
class modules.musicmixer.Track extends GameBase
{
var trackId, currentSong, nextSong, sTrace, fadeIn, fadeOut;
function Track (trackId) {
super();
this.trackId = trackId;
currentSong = null;
nextSong = null;
}
function getId() {
return(trackId);
}
function getCurrentSong() {
if (nextSong != null) {
return(nextSong);
}
return(currentSong);
}
function fade(song, fadeStart, fadeEnd, dur, cb) {
var _local4 = new modules.musicmixer.VolumeTweener(song, cb);
mx.effects.Tween.Interval = 20;
sTrace((("fade called on " + song) + " fadeTo ") + fadeEnd);
if ((fadeStart > fadeEnd) || (fadeEnd == 0)) {
song.stop();
} else {
song.play();
}
}
function crossFade(songId, fadeDur, endVolume) {
sTrace((("Crossfading from " + currentSong) + " to ") + songId);
if (fadeDur == null) {
fadeDur = 600;
}
if (endVolume == null) {
endVolume = 100;
}
if (currentSong != null) {
currentSong.stop();
}
currentSong = new modules.musicmixer.Song(songId);
currentSong.setVolume(100);
start();
}
function swap(songId, fadeDur1, fadeDur2, endVolume) {
if (fadeDur1 == undefined) {
fadeDur1 = 300;
}
if (fadeDur2 == undefined) {
fadeDur2 = fadeDur1;
}
if (endVolume == undefined) {
endVolume = 100;
}
if (currentSong != undefined) {
var _local2 = new modules.musicmixer.Song(songId);
_local2.setVolume(0);
var _local6 = utils.Proxy.create(this, fade, _local2, 0, endVolume, fadeDur2, null);
fade(currentSong, currentSong.getVolume(), 0, fadeDur1, _local6);
currentSong = _local2;
start();
} else {
crossFade(songId, fadeDur2, endVolume);
}
}
function start(loops, offset) {
if (loops == null) {
loops = 9999;
}
if (offset == null) {
offset = 0;
}
currentSong.play(offset, loops);
}
function stop(dur, cb) {
if (((dur != null) && (dur > 0)) && (currentSong.__get__isPlaying())) {
fade(currentSong, currentSong.getVolume(), 0, dur, cb);
currentSong = null;
} else {
fadeIn.endTween();
fadeOut.endTween();
currentSong.stop();
}
}
function destroy() {
stop();
currentSong.destroy();
}
function toString() {
return(("Track [" + trackId) + "]");
}
var namespace = new Array("modules", "musicmixer", "Track");
}
Symbol 328 MovieClip [__Packages.modules.musicmixer.Song] Frame 0
class modules.musicmixer.Song extends GameBase
{
var id, snd, sError;
function Song (songId) {
super();
id = songId;
if (useLibraryAssets) {
snd = getSongFromLibrary(id);
} else {
snd = getSongFromFramework(id);
}
}
function getSongFromFramework(id) {
var _local3 = SConsole.module("assets");
var _local2 = Sound(_local3.getManagedData("mp3", id));
if (_local3 == null) {
sError("AssetManager not registred");
}
if (_local2 == null) {
sError("No such song exist " + this.id);
}
return(_local2);
}
function getSongFromLibrary(id) {
var _local1 = new Sound();
_local1.attachSound(id);
return(_local1);
}
function play(offset, loops) {
if (offset == null) {
offset = 0;
}
if (loops == null) {
loops = 1;
}
playing = true;
setVolume();
snd.start(offset, loops);
}
function stop() {
playing = false;
snd.stop();
}
function setVolume(newVolume) {
if (newVolume != null) {
vol = newVolume;
}
snd.setVolume(vol * globalVolume);
}
function getVolume() {
return(snd.getVolume());
}
function getId() {
return(id);
}
function getDuration() {
return(snd.duration);
}
function getCurrentPos() {
return(snd.position);
}
function get isPlaying() {
return(playing);
}
function destroy() {
stop();
snd = null;
}
function toString() {
return(("Song [" + id) + "]");
}
var namespace = new Array("modules", "musicmixer", "Song");
static var useLibraryAssets = false;
static var globalVolume = 1;
var playing = false;
var vol = 100;
}
Symbol 329 MovieClip [__Packages.mx.effects.Tween] Frame 0
class mx.effects.Tween extends Object
{
static var IntervalToken;
var arrayMode, listener, initVal, endVal, startTime, updateFunc, endFunc, ID;
function Tween (listenerObj, init, end, dur) {
super();
if (listenerObj == undefined) {
return;
}
if (typeof(init) != "number") {
arrayMode = true;
}
listener = listenerObj;
initVal = init;
endVal = end;
if (dur != undefined) {
duration = dur;
}
startTime = getTimer();
if (duration == 0) {
endTween();
} else {
AddTween(this);
}
}
static function AddTween(tween) {
tween.ID = ActiveTweens.length;
ActiveTweens.push(tween);
if (IntervalToken == undefined) {
Dispatcher.DispatchTweens = DispatchTweens;
IntervalToken = setInterval(Dispatcher, "DispatchTweens", Interval);
}
}
static function RemoveTweenAt(index) {
var _local2 = ActiveTweens;
if (((index >= _local2.length) || (index < 0)) || (index == undefined)) {
return(undefined);
}
_local2.splice(index, 1);
var _local4 = _local2.length;
var _local1 = index;
while (_local1 < _local4) {
_local2[_local1].ID--;
_local1++;
}
if (_local4 == 0) {
clearInterval(IntervalToken);
delete IntervalToken;
}
}
static function DispatchTweens(Void) {
var _local2 = ActiveTweens;
var _local3 = _local2.length;
var _local1 = 0;
while (_local1 < _local3) {
_local2[_local1].doInterval();
_local1++;
}
updateAfterEvent();
}
function doInterval() {
var _local2 = getTimer() - startTime;
var _local3 = getCurVal(_local2);
if (_local2 >= duration) {
endTween();
} else if (updateFunc != undefined) {
listener[updateFunc](_local3);
} else {
listener.onTweenUpdate(_local3);
}
}
function getCurVal(curTime) {
if (arrayMode) {
var _local3 = new Array();
var _local2 = 0;
while (_local2 < initVal.length) {
_local3[_local2] = easingEquation(curTime, initVal[_local2], endVal[_local2] - initVal[_local2], duration);
_local2++;
}
return(_local3);
}
return(easingEquation(curTime, initVal, endVal - initVal, duration));
}
function endTween() {
if (endFunc != undefined) {
listener[endFunc](endVal);
} else {
listener.onTweenEnd(endVal);
}
RemoveTweenAt(ID);
}
function setTweenHandlers(update, end) {
updateFunc = update;
endFunc = end;
}
function easingEquation(t, b, c, d) {
return(((c / 2) * (Math.sin(Math.PI * ((t / d) - 0.5)) + 1)) + b);
}
static var ActiveTweens = new Array();
static var Interval = 10;
static var Dispatcher = new Object();
var duration = 3000;
}
Symbol 330 MovieClip [__Packages.modules.musicmixer.VolumeTweener] Frame 0
class modules.musicmixer.VolumeTweener extends GameBase
{
var song, callback, myId, sTrace;
function VolumeTweener (song, callback) {
super();
this.song = song;
this.callback = callback;
myId = id++;
}
function onTweenUpdate(val) {
song.setVolume(Math.round(val));
}
function onTweenEnd(val) {
song.setVolume(val);
sTrace((("Fade end: " + song) + " ") + val);
if ((callback != null) && (callback != undefined)) {
callback();
}
callback = null;
}
function toString() {
return(("VolumeTweener [" + myId) + "]");
}
var namespace = new Array("modules", "musicmixer", "VolumeTweener");
static var id = 0;
}
Symbol 331 MovieClip [__Packages.modules.musicmixer.IVolumeHandler] Frame 0
interface modules.musicmixer.IVolumeHandler
{
}
Symbol 332 MovieClip [__Packages.modules.system.Ticker] Frame 0
class modules.system.Ticker extends modules.Module
{
var __get__useRealFPS, __get__FPS, isRunning, intervalId, dispatchEvent;
function Ticker () {
super();
mx.events.EventDispatcher.initialize(this);
}
function set useRealFPS(flag) {
useFrames = flag;
//return(__get__useRealFPS());
}
function set FPS(fps) {
var _local2 = Math.round(1000 / fps);
setTickInterval(_local2);
//return(__get__FPS());
}
function setTickInterval(tickInterval) {
this.tickInterval = tickInterval;
if (isRunning) {
stopTicker();
startTicker();
}
}
function startTicker() {
if (isRunning) {
return(undefined);
}
if (useFrames) {
_root.onEnterFrame = utils.Proxy.create(this, tick);
} else {
intervalId = setInterval(utils.Proxy.create(this, tick), tickInterval);
isRunning = true;
}
}
function stopTicker() {
if (!isRunning) {
return(undefined);
}
clearInterval(intervalId);
delete _root.onEnterFrame;
isRunning = false;
}
function tick() {
dispatchEvent({type:"tick"});
}
var namespace = new Array("modules", "system", "Ticker");
var tickInterval = 40;
var useFrames = false;
}
Symbol 333 MovieClip [__Packages.modules.persistant.Cookie] Frame 0
class modules.persistant.Cookie extends modules.Module
{
var key, sError;
function Cookie () {
super();
}
function read(variableName) {
var _local2 = getCookie();
if (_local2 == null) {
return(null);
}
return(_local2.data[variableName]);
}
function write(variableName, obj) {
var _local4 = getCookie();
if (_local4 == null) {
return(false);
}
_local4.data[variableName] = obj;
_local4.onStatus = function (infoObject) {
var _local3 = "";
for (var _local4 in infoObject) {
_local3 = _local3 + ((_local4 + " ") + infoObject[_local4]);
}
this.sTrace(_local3);
};
var _local5 = _local4.flush();
switch (_local5) {
case "pending" :
break;
case true :
return(true);
case false :
fail("flush failed. User denied request for additional storage");
return(false);
}
}
function clear() {
var _local2 = getCookie();
_local2.clear();
}
function setKey(newKey) {
key = newKey;
}
function getKey() {
if (key == undefined) {
return("salomonsson_se");
}
return(key);
}
function getCookie() {
var _local2 = SharedObject.getLocal(getKey());
if (_local2 == null) {
fail("SWF resides outside domain of the swf...");
return(null);
}
return(_local2);
}
function fail(errorMsg) {
sError(errorMsg);
}
var namespace = new Array("modules", "persistant", "Cookie");
}
Symbol 334 MovieClip [__Packages.modules.screens.ApplicationIntro] Frame 0
class modules.screens.ApplicationIntro extends modules.screens.BaseScreen
{
var clickURL, introClip, sTrace, introTS;
function ApplicationIntro (clickURL) {
super();
this.clickURL = ((clickURL == undefined) ? "http://www.salomonsson.se" : (clickURL));
}
function load(loadTask) {
var _local2 = SConsole.module("screenManager").root;
introClip = _local2.attachMovie(applicationIntroLinkageId, "applicationIntro", _local2.getNextHighestDepth());
introClip._visible = false;
loadTask.completed();
}
function intro(introTask) {
sTrace("starting application intro ");
introClip._visible = true;
introClip.onRelease = utils.Proxy.create(this, onClick);
introClip._x = Math.round((SConsole.module("screenManager").width / 2) - (introClip._width / 2));
introClip._y = Math.round((SConsole.module("screenManager").height / 2) - (introClip._height / 2));
introTS = new synchronizer.TaskSequence();
introTS.addSequentialTask(this, playIntro);
introTS.addSequentialTask(this, destroy);
introTS.addSequentialTask(introTask, introTask.completed);
introTS.execute();
}
function outro(outroTask) {
outroTask.completed();
}
function inactivate() {
}
function destroy(ts) {
introClip.removeMovieClip();
ts.completed();
}
function playIntro(ts) {
var _local2 = utils.Proxy.create(ts, ts.completed);
var _local4 = new utils.FrameProxy(introClip, introClip._totalframes, _local2, true);
introClip._visible = true;
introClip.gotoAndPlay(1);
}
function onClick() {
getURL (clickURL, "_blank");
}
function doTween(toAlpha, dur, ts) {
var _local2 = new mx.transitions.Tween(introClip, "_alpha", mx.transitions.easing.Strong.easeOut, introClip._alpha, toAlpha, dur, true);
_local2.onMotionFinished = utils.Proxy.create(ts, ts.completed);
}
function doDelay(ms, ts) {
utils.Delay.create(ts, ts.completed, ms);
}
var namespace = new Array("modules", "screens", "ApplicationIntro");
static var applicationIntroLinkageId = "intro";
}
Symbol 335 MovieClip [__Packages.utils.FrameProxy] Frame 0
class utils.FrameProxy
{
var mc, frame, cb, haltAtEnd;
function FrameProxy (mc, frame, doneFunc, haltAtEnd) {
this.mc = mc;
this.frame = frame;
cb = doneFunc;
this.haltAtEnd = ((haltAtEnd == undefined) ? true : (haltAtEnd));
setup();
}
function setup() {
mc.onEnterFrame = mx.utils.Delegate.create(this, check);
}
function check() {
if (mc._currentframe == frame) {
if (haltAtEnd) {
mc.stop();
}
delete mc.onEnterFrame;
cb();
}
}
}
Symbol 336 MovieClip [__Packages.mx.utils.Delegate] Frame 0
class mx.utils.Delegate extends Object
{
var func;
function Delegate (f) {
super();
func = f;
}
static function create(obj, func) {
var _local2 = function () {
var _local2 = arguments.callee.target;
var _local3 = arguments.callee.func;
return(_local3.apply(_local2, arguments));
};
_local2.target = obj;
_local2.func = func;
return(_local2);
}
function createDelegate(obj) {
return(create(obj, func));
}
}
Symbol 337 MovieClip [__Packages.modules.screens.MochiLoader] Frame 0
class modules.screens.MochiLoader extends modules.screens.BaseScreen
{
var id, res, isShow, isAd, mochiHolder, sTrace, hideTask;
function MochiLoader (id, res) {
super();
this.id = id;
this.res = res;
isShow = false;
isAd = false;
}
function show(ts) {
isShow = true;
isAd = true;
SConsole.addTickListener(this);
SConsole.startTicker();
var _local5 = modules.screens.ScreenManager.getInstance();
var _local3 = _local5.__get__root();
var _local6 = _local3.createEmptyMovieClip("bgLoader", _local3.getNextHighestDepth());
mochiHolder = _local3.createEmptyMovieClip("mochiLoader", _local3.getNextHighestDepth());
var _local2 = new Object();
_local2.clip = mochiHolder;
_local2.id = id;
_local2.res = res;
_local2.ad_started = null;
_local2.ad_finished = utils.Proxy.create(this, mochiCallback);
MochiAd.showPreGameAd(_local2);
if (loader != null) {
var _local4 = new synchronizer.TaskSequence();
_local4.__set__onCompletion(utils.Proxy.create(ts, ts.completed));
_local4.addSequentialTask(loader, loader.show, [_local6]);
_local4.execute();
} else {
ts.completed();
}
}
function hide(ts) {
sTrace("MochiLoader got hide()");
SConsole.removeTickListener(this);
SConsole.stopTicker();
hideTask = ts;
isShow = false;
var _local2 = new synchronizer.TaskSequence();
if (loader != null) {
_local2.addSequentialTask(loader, loader.hide);
}
if (!isAd) {
_local2.addSequentialTask(this, delayTask);
_local2.addSequentialTask(hideTask, hideTask.completed);
}
_local2.execute();
}
function delayTask(ts) {
utils.Delay.create(ts, ts.completed, 100);
}
function mochiCallback() {
sTrace("MochiLoader.mochiCallback()");
isAd = false;
mochiHolder.removeMovieClip();
if (!isShow) {
utils.Delay.create(hideTask, hideTask.completed, 100);
}
}
function load(mc, loadTask) {
loadTask.completed();
}
function intro(introTask) {
introTask.completed();
}
function outro(outroTask) {
outroTask.completed();
}
function activate() {
}
function inactivate() {
}
function tick() {
if (loader != null) {
var _local3 = _root.getBytesLoaded() / _root.getBytesTotal();
sTrace("progress: " + _local3);
loader.onProgress(_local3);
}
}
var namespace = new Array("modules", "screens", "MochiLoader");
static var loader = null;
}
Symbol 338 MovieClip [__Packages.modules.screens.ILoader] Frame 0
interface modules.screens.ILoader
{
}
Symbol 339 MovieClip [__Packages.se.salomonsson.synchronizer.ITaskStatus] Frame 0
interface se.salomonsson.synchronizer.ITaskStatus
{
}
Symbol 340 MovieClip [__Packages.MochiAd] Frame 0
class MochiAd
{
function MochiAd () {
}
static function getVersion() {
return("2.1");
}
static function showPreGameAd(options) {
var _local26 = {clip:_root, ad_timeout:3000, fadeout_time:250, regpt:"o", method:"showPreloaderAd", color:16747008, background:16777161, outline:13994812, ad_started:function () {
this.clip.stop();
}, ad_finished:function () {
this.clip.play();
}};
options = _parseOptions(options, _local26);
var clip = options.clip;
var _local22 = 11000;
var _local25 = options.ad_timeout;
delete options.ad_timeout;
var fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!load(options)) {
options.ad_finished();
return(undefined);
}
options.ad_started();
var mc = clip._mochiad;
mc.onUnload = function () {
options.ad_finished();
};
var _local14 = _getRes(options);
var _local4 = _local14[0];
var _local13 = _local14[1];
mc._x = _local4 * 0.5;
mc._y = _local13 * 0.5;
var chk = mc.createEmptyMovieClip("_mochiad_wait", 3);
chk._x = _local4 * -0.5;
chk._y = _local13 * -0.5;
var _local7 = chk.createEmptyMovieClip("_mochiad_bar", 4);
_local7._x = 10;
_local7._y = _local13 - 20;
var _local21 = options.color;
delete options.color;
var _local18 = options.background;
delete options.background;
var _local23 = options.outline;
delete options.outline;
var _local5 = _local7.createEmptyMovieClip("_outline", 1);
_local5.beginFill(_local18);
_local5.moveTo(0, 0);
_local5.lineTo(_local4 - 20, 0);
_local5.lineTo(_local4 - 20, 10);
_local5.lineTo(0, 10);
_local5.lineTo(0, 0);
_local5.endFill();
var _local3 = _local7.createEmptyMovieClip("_inside", 2);
_local3.beginFill(_local21);
_local3.moveTo(0, 0);
_local3.lineTo(_local4 - 20, 0);
_local3.lineTo(_local4 - 20, 10);
_local3.lineTo(0, 10);
_local3.lineTo(0, 0);
_local3.endFill();
_local3._xscale = 0;
var _local6 = _local7.createEmptyMovieClip("_outline", 3);
_local6.lineStyle(0, _local23, 100);
_local6.moveTo(0, 0);
_local6.lineTo(_local4 - 20, 0);
_local6.lineTo(_local4 - 20, 10);
_local6.lineTo(0, 10);
_local6.lineTo(0, 0);
chk.ad_msec = _local22;
chk.ad_timeout = _local25;
chk.started = getTimer();
chk.showing = false;
chk.last_pcnt = 0;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function () {
var _local2 = 100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time));
if (_local2 > 0) {
this._parent._alpha = _local2;
} else {
var _local3 = this._parent._parent;
MochiAd.unload(_local3);
delete this.onEnterFrame;
}
};
mc.lc.adLoaded = function (width, height) {
};
mc.lc.adjustProgress = function (msec) {
var _local2 = this.mc._mochiad_wait;
_local2.server_control = true;
_local2.started = getTimer();
_local2.ad_msec = msec;
};
chk.onEnterFrame = function () {
var _local13 = this._parent._parent;
var _local12 = this._parent._mochiad_ctr;
var _local6 = getTimer() - this.started;
var _local4 = false;
var _local5 = _root.getBytesTotal();
var _local8 = _root.getBytesLoaded();
var _local10 = (100 * _local8) / _local5;
var _local11 = (100 * _local6) / chk.ad_msec;
var _local9 = this._mochiad_bar._inside;
var _local3 = Math.min(100, Math.min(_local10 || 0, _local11));
_local3 = Math.max(this.last_pcnt, _local3);
this.last_pcnt = _local3;
_local9._xscale = _local3;
if (!chk.showing) {
var _local7 = _local12.getBytesTotal();
if ((_local7 > 0) || (typeof(_local7) == "undefined")) {
chk.showing = true;
chk.started = getTimer();
} else if (_local6 > chk.ad_timeout) {
_local4 = true;
}
}
if (_local6 > chk.ad_msec) {
_local4 = true;
}
if (((_local5 > 0) && (_local8 >= _local5)) && (_local4)) {
if (this.server_control) {
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = chk.fadeFunction;
}
}
};
}
static function showInterLevelAd(options) {
var _local13 = {clip:_root, ad_timeout:2000, fadeout_time:250, regpt:"o", method:"showTimedAd", ad_started:function () {
this.clip.stop();
}, ad_finished:function () {
this.clip.play();
}};
options = _parseOptions(options, _local13);
var clip = options.clip;
var _local10 = 11000;
var _local12 = options.ad_timeout;
delete options.ad_timeout;
var fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!load(options)) {
options.ad_finished();
return(undefined);
}
options.ad_started();
var mc = clip._mochiad;
mc.onUnload = function () {
options.ad_finished();
};
var _local5 = _getRes(options);
var _local14 = _local5[0];
var _local11 = _local5[1];
mc._x = _local14 * 0.5;
mc._y = _local11 * 0.5;
var chk = mc.createEmptyMovieClip("_mochiad_wait", 3);
chk.ad_msec = _local10;
chk.ad_timeout = _local12;
chk.started = getTimer();
chk.showing = false;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function () {
var _local2 = 100 * (1 - ((getTimer() - this.fadeout_start) / this.fadeout_time));
if (_local2 > 0) {
this._parent._alpha = _local2;
} else {
var _local3 = this._parent._parent;
MochiAd.unload(_local3);
delete this.onEnterFrame;
}
};
mc.lc.adLoaded = function (width, height) {
};
mc.lc.adjustProgress = function (msec) {
var _local2 = this.mc._mochiad_wait;
_local2.server_control = true;
_local2.started = getTimer();
_local2.ad_msec = msec - 250;
};
chk.onEnterFrame = function () {
var _local5 = this._parent._mochiad_ctr;
var _local4 = getTimer() - this.started;
var _local2 = false;
if (!chk.showing) {
var _local3 = _local5.getBytesTotal();
if ((_local3 > 0) || (typeof(_local3) == "undefined")) {
chk.showing = true;
chk.started = getTimer();
} else if (_local4 > chk.ad_timeout) {
_local2 = true;
}
}
if (_local4 > chk.ad_msec) {
_local2 = true;
}
if (_local2) {
if (this.server_control) {
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = this.fadeFunction;
}
}
};
}
static function showTimedAd(options) {
showInterLevelAd(options);
}
static function showPreloaderAd(options) {
showPreGameAd(options);
}
static function _allowDomains(server) {
var _local1 = server.split("/")[2].split(":")[0];
if (System.security) {
if (System.security.allowDomain) {
System.security.allowDomain("*");
System.security.allowDomain(_local1);
}
if (System.security.allowInsecureDomain) {
System.security.allowInsecureDomain("*");
System.security.allowInsecureDomain(_local1);
}
}
return(_local1);
}
static function _loadCommunicator(options) {
var _local26 = {clip:_root, com_server:"http://x.mochiads.com/com/1/", method:"loadCommunicator", depth:10337, id:"_UNKNOWN_"};
options = _parseOptions(options, _local26);
options.swfv = options.clip.getSWFVersion() || 6;
options.mav = getVersion();
var _local18 = options.clip;
var _local20 = "_mochiad_com_" + options.id;
if (!_isNetworkAvailable()) {
return(null);
}
if (_local18[_local20]) {
return(_local18[_local20].lc);
}
var _local21 = options.com_server + options.id;
_allowDomains(_local21);
delete options.id;
delete options.com_server;
var _local25 = options.depth;
delete options.depth;
var _local17 = _local18.createEmptyMovieClip(_local20, _local25);
var _local11 = _local17.createEmptyMovieClip("_mochiad_com", 1);
for (var _local15 in options) {
_local11[_local15] = options[_local15];
}
var _local6 = new LocalConnection();
var _local16 = ["", Math.floor(new Date().getTime()), random(999999)].join("_");
_local6.mc = _local17;
_local6.name = _local16;
_local6.allowDomain = function (d) {
return(true);
};
_local6.allowInsecureDomain = _local6.allowDomain;
_local6.connect(_local16);
_local17.lc = _local6;
_local11.lc = _local16;
_local6._id = 0;
_local6._queue = [];
_local6.rpcResult = function (cb_arg) {
var _local8 = parseInt(cb_arg);
var _local4 = this._callbacks[_local8];
if (!_local4) {
return(undefined);
}
delete this._callbacks[_local8];
var _local5 = [];
var _local3 = 2;
while (_local3 < _local4.length) {
_local5.push(_local4[_local3]);
_local3++;
}
_local3 = 1;
while (_local3 < arguments.length) {
_local5.push(arguments[_local3]);
_local3++;
}
var _local6 = _local4[1];
var _local7 = _local4[0];
if (_local7 && (typeof(_local6) == "string")) {
_local6 = _local7[_local6];
}
if (_local6) {
_local6.apply(_local7, _local5);
}
};
_local6._didConnect = function (endpoint) {
this._endpoint = endpoint;
var _local4 = this._queue;
delete this._queue;
var _local5 = this.doSend;
var _local2 = 0;
while (_local2 < _local4.length) {
var _local3 = _local4[_local2];
_local5.apply(this, _local3);
_local2++;
}
};
_local6.doSend = function (args, cbobj, cbfn) {
if (this._endpoint == null) {
var _local4 = [];
var _local3 = 0;
while (_local3 < arguments.length) {
_local4.push(arguments[_local3]);
_local3++;
}
this._queue.push(_local4);
return(undefined);
}
this._id = this._id + 1;
var _local5 = this._id;
if ((cbfn === undefined) || (cbfn === null)) {
cbfn = cbobj;
}
this._callbacks[_local5] = [cbobj, cbfn];
var _local7 = new LocalConnection();
var _local9 = _local7.send(this._endpoint, "rpc", _local5, args);
};
_local6._callbacks = {};
_local6._callbacks[0] = [_local6, "_didConnect"];
_local11.st = getTimer();
_local11.loadMovie(_local21 + ".swf", "POST");
return(_local6);
}
static function fetchHighScores(options, callbackObj, callbackMethod) {
var _local1 = _loadCommunicator({id:options.id});
if (!_local1) {
return(false);
}
var _local4 = ["fetchHighScores", options];
_local1.doSend(["fetchHighScores", options], callbackObj, callbackMethod);
return(true);
}
static function sendHighScore(options, callbackObj, callbackMethod) {
var _local1 = _loadCommunicator({id:options.id});
if (!_local1) {
return(false);
}
var _local4 = ["sendHighScore", options];
_local1.doSend(["sendHighScore", options], callbackObj, callbackMethod);
return(true);
}
static function load(options) {
var _local13 = {clip:_root, server:"http://x.mochiads.com/srv/1/", method:"load", depth:10333, id:"_UNKNOWN_"};
options = _parseOptions(options, _local13);
options.swfv = options.clip.getSWFVersion() || 6;
options.mav = getVersion();
var _local9 = options.clip;
if (!_isNetworkAvailable()) {
return(null);
}
if (_local9._mochiad_loaded) {
return(null);
}
var _local12 = options.depth;
delete options.depth;
var _local6 = _local9.createEmptyMovieClip("_mochiad", _local12);
var _local11 = _getRes(options);
options.res = (_local11[0] + "x") + _local11[1];
options.server = options.server + options.id;
delete options.id;
_local9._mochiad_loaded = true;
var _local4 = _local6.createEmptyMovieClip("_mochiad_ctr", 1);
for (var _local7 in options) {
_local4[_local7] = options[_local7];
}
var _local10 = _local4.server;
delete _local4.server;
var _local14 = _allowDomains(_local10);
_local6.onEnterFrame = function () {
if (this._mochiad_ctr._url != this._url) {
this.onEnterFrame = function () {
if (!this._mochiad_ctr) {
delete this.onEnterFrame;
MochiAd.unload(this._parent);
}
};
}
};
var _local5 = new LocalConnection();
var _local8 = ["", Math.floor(new Date().getTime()), random(999999)].join("_");
_local5.mc = _local6;
_local5.name = _local8;
_local5.hostname = _local14;
_local5.allowDomain = function (d) {
return(true);
};
_local5.allowInsecureDomain = _local5.allowDomain;
_local5.connect(_local8);
_local6.lc = _local5;
_local4.lc = _local8;
_local4.st = getTimer();
_local4.loadMovie(_local10 + ".swf", "POST");
return(_local6);
}
static function unload(clip) {
if (typeof(clip) == "undefined") {
clip = _root;
}
if (clip.clip && (clip.clip._mochiad)) {
clip = clip.clip;
}
if (!clip._mochiad) {
return(false);
}
clip._mochiad.removeMovieClip();
delete clip._mochiad_loaded;
delete clip._mochiad;
return(true);
}
static function _isNetworkAvailable() {
if (System.security) {
var _local1 = System.security;
if (_local1.sandboxType == "localWithFile") {
return(false);
}
}
return(true);
}
static function _getRes(options) {
var _local3 = options.clip.getBounds();
var _local2 = 0;
var _local1 = 0;
if (typeof(options.res) != "undefined") {
var _local4 = options.res.split("x");
_local2 = parseFloat(_local4[0]);
_local1 = parseFloat(_local4[1]);
} else {
_local2 = _local3.xMax - _local3.xMin;
_local1 = _local3.yMax - _local3.yMin;
}
if ((_local2 == 0) || (_local1 == 0)) {
_local2 = Stage.width;
_local1 = Stage.height;
}
return([_local2, _local1]);
}
static function _parseOptions(options, defaults) {
var _local4 = {};
for (var _local8 in defaults) {
_local4[_local8] = defaults[_local8];
}
if (options) {
for (var _local8 in options) {
_local4[_local8] = options[_local8];
}
}
if (_root.mochiad_options) {
var _local5 = _root.mochiad_options.split("&");
var _local2 = 0;
while (_local2 < _local5.length) {
var _local3 = _local5[_local2].split("=");
_local4[unescape(_local3[0])] = unescape(_local3[1]);
_local2++;
}
}
return(_local4);
}
}
Symbol 341 MovieClip [__Packages.se.salomonsson.loader.MSLoader] Frame 0
class se.salomonsson.loader.MSLoader extends GameBase implements modules.screens.ILoader
{
var linkId, mc, ts;
function MSLoader (linkId) {
super();
this.linkId = linkId;
}
function show(holder, ts) {
mc = holder.attachMovie(linkId, "loader", holder.getNextHighestDepth());
mc._alpha = 0;
mc._x = (modules.screens.ScreenManager.getInstance().__get__width() / 2) - (mc._width / 2);
mc._y = (modules.screens.ScreenManager.getInstance().__get__height() / 2) - (mc._height / 2);
var _local2 = new mx.transitions.Tween(mc, "_alpha", mx.transitions.easing.Strong.easeOut, 0, 100, 1, true);
_local2.onMotionFinished = utils.Proxy.create(ts, ts.completed);
}
function hide(ts) {
this.ts = ts;
var _local2 = new mx.transitions.Tween(mc, "_alpha", mx.transitions.easing.Strong.easeOut, mc._alpha, 0, 1, true);
_local2.onMotionFinished = utils.Proxy.create(this, destroy);
}
function destroy() {
mc.removeMovieClip();
ts.completed();
}
function onProgress(progress) {
var _local2 = Math.round(progress * 100);
mc.load_text.text = _local2 + "%";
}
var namespace = new Array("loader", "MSLoader");
}
Symbol 342 MovieClip [__Packages.se.salomonsson.onlinehiscore.IHiscore] Frame 0
interface se.salomonsson.onlinehiscore.IHiscore
{
}
Symbol 343 MovieClip [__Packages.se.salomonsson.onlinehiscore.MochiLeaderBoard] Frame 0
class se.salomonsson.onlinehiscore.MochiLeaderBoard extends GameBase implements se.salomonsson.onlinehiscore.IHiscore
{
var sTrace, currentKey, recieveTs, recieveCb, SLOT_NAME, SLOT_SCORE, SLOT_DATE;
function MochiLeaderBoard (limit) {
super();
if (limit != null) {
this.limit = limit;
}
mochi.MochiServices.onError = utils.Proxy.create(this, onConnectionError);
mochi.MochiServices.connect(connect_id);
}
function onConnectionError() {
var _local4;
var _local3 = 0;
while (_local3 < arguments.length) {
_local4 = _local4 + (String(arguments[_local3]) + ", ");
_local3++;
}
sTrace("Connection Error! " + _local4);
}
function compare(key, score, limit, callback, ts) {
}
function getScores(key, limit, callback, ts) {
var _local2 = getIdFromKey(key);
mochi.MochiScores.setBoardID(_local2);
currentKey = _local2;
recieveTs = ts;
recieveCb = callback;
sTrace("get scores for " + key);
mochi.MochiScores.setBoardID(_local2);
if (!mochi.MochiServices.__get__isNetworkAvailable()) {
recieveTs.failed();
}
mochi.MochiScores.requestList(this, onScoreRecieved);
}
function sendScore(key, score, name, params, ts) {
if (!mochi.MochiServices.__get__isNetworkAvailable()) {
ts.failed();
}
var _local2 = getIdFromKey(key);
mochi.MochiScores.setBoardID(_local2);
mochi.MochiScores.submit(score, name, this, onScoreSent);
ts.completed();
}
function onScoreRecieved(obj) {
var _local7 = new Array();
var _local9 = new Array();
var _local8 = new Array();
getSlotNumbers(obj.scores.daily.cols);
var _local5 = ((obj.scores.daily.rows.length > limit) ? (limit) : (obj.scores.daily.rows.length));
var _local2 = 0;
while (_local2 < _local5) {
_local7.push(formatScore(obj.scores.daily.rows[_local2]));
_local2++;
}
getSlotNumbers(obj.scores.weekly.cols);
var _local6 = ((obj.scores.weekly.rows.length > limit) ? (limit) : (obj.scores.weekly.rows.length));
_local2 = 0;
while (_local2 < _local6) {
_local9.push(formatScore(obj.scores.weekly.rows[_local2]));
_local2++;
}
getSlotNumbers(obj.scores.monthly.cols);
var _local4 = ((obj.scores.monthly.rows.length > limit) ? (limit) : (obj.scores.monthly.rows.length));
_local2 = 0;
while (_local2 < _local4) {
_local8.push(formatScore(obj.scores.monthly.rows[_local2]));
_local2++;
}
recieveCb({day:_local7, week:_local9, month:_local8});
recieveTs.completed();
}
function onScoreSent(obj) {
sTrace("you got back a rank: " + obj.rank);
var _local2 = obj.rank;
if ((!isNaN(_local2)) && (_local2 >= limit)) {
showHiscoreNotification();
}
}
function getIdFromKey(key) {
switch (key) {
case Constants.LEVEL1 :
return(levelevel1_id);
case Constants.LEVEL2 :
return(levelevel2_id);
case Constants.LEVEL3 :
return(levelevel3_id);
}
}
function showHiscoreNotification() {
sTrace("You have a new Hiscore!!");
}
function getSlotNumbers(a) {
SLOT_NAME = 1;
SLOT_SCORE = 0;
SLOT_DATE = 3;
var _local2 = 0;
while (_local2 < a.length) {
switch (a[_local2]) {
case "name" :
SLOT_NAME = _local2;
break;
case "score" :
SLOT_SCORE = _local2;
break;
case "timestamp" :
SLOT_DATE = _local2;
}
_local2++;
}
}
function formatScore(s) {
var _local2 = new se.salomonsson.onlinehiscore.Entry();
_local2.name = s[SLOT_NAME];
_local2.score = s[SLOT_SCORE];
_local2.date = formatDate(new Date(s[SLOT_DATE]));
return(_local2);
}
function formatDate(d) {
var _local4 = d.getFullYear();
var _local2 = d.getDate();
var _local3 = d.getMonth() + 1;
return((((_local4 + "-") + _local3) + "-") + _local2);
}
var namespace = new Array("onlinehiscore", "MochiLeaderBoard");
var connect_id = "06f51abd473363e8";
var levelevel1_id = "db6fc2adbf1e1cd6";
var levelevel2_id = "29c6818ad30d87f2";
var levelevel3_id = "33f6fea956acfa04";
var limit = 10;
}
Symbol 344 MovieClip [__Packages.mochi.MochiServices] Frame 0
class mochi.MochiServices
{
static var _id, _container, _sendChannelName, _rcvChannelName, __get__comChannelName, onError, _sendChannel, _loader, _loaderListener, _rcvChannel, _listenChannel;
function MochiServices () {
}
static function get id() {
return(_id);
}
static function get clip() {
return(_container);
}
static function getVersion() {
return("1.1");
}
static function allowDomains(server) {
var _local1 = server.split("/")[2].split(":")[0];
if (System.security) {
if (System.security.allowDomain) {
System.security.allowDomain("*");
System.security.allowDomain(_local1);
}
if (System.security.allowInsecureDomain) {
System.security.allowInsecureDomain("*");
System.security.allowInsecureDomain(_local1);
}
}
return(_local1);
}
static function get isNetworkAvailable() {
if (System.security) {
var _local1 = System.security;
if (_local1.sandboxType == "localWithFile") {
return(false);
}
}
return(true);
}
static function set comChannelName(val) {
if (val != undefined) {
if (val.length > 3) {
_sendChannelName = val + "_fromgame";
_rcvChannelName = val;
initComChannels();
}
}
//return(__get__comChannelName());
}
static function get connected() {
return(_connected);
}
static function connect(id, clip, onError) {
if ((!_connected) && (_container == undefined)) {
trace("MochiServices Connecting...");
_connecting = true;
init(id, clip);
}
if (onError != undefined) {
mochi.MochiServices.onError = onError;
} else if (mochi.MochiServices.onError == undefined) {
mochi.MochiServices.onError = function (errorCode) {
trace(errorCode);
};
}
}
static function disconnect() {
if (_connected || (_connecting)) {
_connecting = (_connected = false);
if (_sendChannel._queue != undefined) {
}
if (_container != undefined) {
_container.removeMovieClip();
delete _container;
}
}
}
static function init(id, clip) {
_id = id;
if (clip != undefined) {
_container = clip.createEmptyMovieClip("__mochiservicesMC", clip.getNextHighestDepth());
} else {
_container = _root.createEmptyMovieClip("__mochiservicesMC", _root.getNextHighestDepth());
}
loadCommunicator(id, _container);
}
static function loadCommunicator(id, clip) {
if (!isNetworkAvailable) {
return(undefined);
}
allowDomains(_gatewayURL);
_loader = new MovieClipLoader();
_loaderListener = {};
_loaderListener.onLoadError = function (target_mc, errorCode, httpStatus) {
trace("MochiServices could not load.");
mochi.MochiServices.disconnect();
mochi.MochiServices.onError.apply(null, [errorCode]);
};
_loader.addListener(_loaderListener);
_loader.loadClip(_gatewayURL, clip);
_sendChannel = new LocalConnection();
_sendChannel._queue = [];
_rcvChannel = new LocalConnection();
_rcvChannel.allowDomain = function (d) {
return(true);
};
_rcvChannel.allowInsecureDomain = _rcvChannel.allowDomain;
_rcvChannel._nextcallbackID = 0;
_rcvChannel._callbacks = {};
listen();
}
static function onStatus(infoObject) {
if (!(infoObject.level === "error")) {
} else {
_connected = false;
_listenChannel.connect(_listenChannelName);
}
}
static function listen() {
_listenChannel = new LocalConnection();
_listenChannel.handshake = function (args) {
mochi.MochiServices.__set__comChannelName(args.newChannel);
};
_listenChannel.allowDomain = function (d) {
return(true);
};
_listenChannel.allowInsecureDomain = _listenChannel.allowDomain;
_listenChannel.connect(_listenChannelName);
trace("Waiting for MochiAds services to connect...");
}
static function initComChannels() {
if (!_connected) {
_sendChannel.onStatus = function (infoObject) {
mochi.MochiServices.onStatus(infoObject);
};
_sendChannel.send(_sendChannelName, "onReceive", {methodName:"handshakeDone"});
_sendChannel.send(_sendChannelName, "onReceive", {methodName:"registerGame", id:_id, clip:_container, version:getVersion()});
_rcvChannel.onStatus = function (infoObject) {
mochi.MochiServices.onStatus(infoObject);
};
_rcvChannel.onReceive = function (pkg) {
var _local5 = pkg.callbackID;
var _local4 = this._callbacks[_local5];
if (!_local4) {
return(undefined);
}
var _local2 = _local4.callbackMethod;
var _local3 = _local4.callbackObject;
if (_local3 && (typeof(_local2) == "string")) {
_local2 = _local3[_local2];
}
if (_local2 != undefined) {
_local2.apply(_local3, pkg.args);
}
delete this._callbacks[_local5];
};
_rcvChannel.onError = function () {
mochi.MochiServices.onError.apply(null, ["IOError"]);
};
_rcvChannel.connect(_rcvChannelName);
trace("connected!");
_connecting = false;
_connected = true;
_listenChannel.close();
while (_sendChannel._queue.length > 0) {
_sendChannel.send(_sendChannelName, "onReceive", _sendChannel._queue.shift());
}
}
}
static function send(methodName, args, callbackObject, callbackMethod) {
if (_connected) {
_sendChannel.send(_sendChannelName, "onReceive", {methodName:methodName, args:args, callbackID:_rcvChannel._nextcallbackID});
} else if (_container == undefined) {
onError.apply(null, ["NotConnected"]);
} else {
_sendChannel._queue.push({methodName:methodName, args:args, callbackID:_rcvChannel._nextcallbackID});
}
_rcvChannel._callbacks[_rcvChannel._nextcallbackID] = {callbackObject:callbackObject, callbackMethod:callbackMethod};
_rcvChannel._nextcallbackID++;
}
static var _gatewayURL = "http://www.mochiads.com/static/lib/services/services.swf";
static var _listenChannelName = "__mochiservices";
static var _connecting = false;
static var _connected = false;
}
Symbol 345 MovieClip [__Packages.mochi.MochiScores] Frame 0
class mochi.MochiScores
{
static var boardID, onClose, onError;
function MochiScores () {
}
static function setBoardID(boardID) {
mochi.MochiScores.boardID = boardID;
mochi.MochiServices.send("scores_setBoardID", {boardID:boardID});
}
static function showLeaderboard(options) {
if (options.clip != null) {
if (options.clip.__mochiservicesMC != mochi.MochiServices.__get__clip()) {
mochi.MochiServices.disconnect();
mochi.MochiServices.connect(mochi.MochiServices.__get__id(), options.clip);
}
delete options.clip;
}
if (options.onDisplay != null) {
options.onDisplay();
} else {
mochi.MochiServices.__get__clip().stop();
}
if (options.onClose != null) {
onClose = options.onClose;
} else {
onClose = function () {
if (mochi.MochiServices.__get__clip() == _root.__mochiservicesMC) {
mochi.MochiServices.__get__clip()._parent.play();
} else {
mochi.MochiServices.__get__clip().play();
}
};
}
if (options.onError != null) {
onError = options.onError;
} else {
onError = onClose;
}
if (options.boardID == null) {
if (boardID != null) {
options.boardID = boardID;
}
}
mochi.MochiServices.send("scores_showLeaderboard", {options:options}, null, doClose);
}
static function getPlayerInfo(callbackObj, callbackMethod) {
mochi.MochiServices.send("scores_getPlayerInfo", null, callbackObj, callbackMethod);
}
static function submit(score, name, callbackObj, callbackMethod) {
mochi.MochiServices.send("scores_submit", {score:score, name:name}, callbackObj, callbackMethod);
}
static function requestList(callbackObj, callbackMethod) {
mochi.MochiServices.send("scores_requestList", null, callbackObj, callbackMethod);
}
static function doClose(args) {
if (args.error == true) {
onError.apply(null, [args.errorCode, args.httpStatus]);
} else {
onClose.apply();
}
}
}
Symbol 346 MovieClip [__Packages.Constants] Frame 0
class Constants
{
function Constants () {
}
static var LEVEL1 = "level1";
static var LEVEL2 = "level2";
static var LEVEL3 = "level3";
}
Symbol 347 MovieClip [__Packages.se.salomonsson.onlinehiscore.Entry] Frame 0
class se.salomonsson.onlinehiscore.Entry
{
function Entry () {
}
}
Symbol 348 MovieClip [__Packages.se.salomonsson.onlinehiscore.MindJoltHiscore] Frame 0
class se.salomonsson.onlinehiscore.MindJoltHiscore extends se.salomonsson.onlinehiscore.MochiLeaderBoard
{
var sTrace;
function MindJoltHiscore (limit) {
super(limit);
}
function sendScore(key, score, name, params, ts) {
super.sendScore(key, score, name, params, ts);
sTrace((("sending hiscore to mindjolt: " + getKeyDescription(key)) + ", ") + score);
var _local5 = new LocalConnection();
_local5.send(_root.com_mindjolt_api, getKeyDescription(key), score);
}
function getKeyDescription(key) {
if (key == Constants.LEVEL1) {
return("East.Exit.Altai (Easy)");
}
if (key == Constants.LEVEL2) {
return("Taymyr.Industrial (Medium)");
}
if (key == Constants.LEVEL3) {
return("The.Gysi.Express (Hard)");
}
}
var namespace = new Array("onlinehiscore", "MindJoltHiscore");
}
Symbol 349 MovieClip [__Packages.screens.BackgroundScreen] Frame 0
class screens.BackgroundScreen extends modules.screens.BaseScreen
{
var isVisible, mixer, screenMc, mc, bg, fg, grid, arrows, header, subheader;
function BackgroundScreen () {
super();
isVisible = false;
mixer = modules.musicmixer.MusicMixer(SConsole.module("musicmixer"));
}
function intro(introTask) {
if (isVisible) {
introTask.completed();
return(undefined);
}
isVisible = true;
SConsole.addTickListener(this);
SConsole.startTicker();
screenMc = mc.attachMovie("backgroundScreen", "backgroundScreen", mc.getNextHighestDepth());
mixer.startSong("main", "titleScreen", true);
bg = MovieClip(screenMc.bg);
fg = MovieClip(screenMc.fg);
grid = MovieClip(screenMc.grid);
arrows = MovieClip(screenMc.arrows);
header = MovieClip(screenMc.header);
subheader = MovieClip(screenMc.subheader);
screenMc._alpha = 0;
var _local5 = new mx.transitions.Tween(screenMc, "_alpha", mx.transitions.easing.Strong.easeOut, 0, 100, 1, true);
_local5.onMotionFinished = utils.Proxy.create(introTask, introTask.completed);
var _local7 = SConsole.module("screenManager").width;
var _local2 = String(SConsole.session.getValue("version"));
if ((_local2 == null) || (_local2 == "null")) {
_local2 = "";
}
var _local3 = TextField(screenMc.versionText);
var _local4 = _local3.getTextFormat();
_local4.letterSpacing = 1.5;
_local3.setNewTextFormat(_local4);
_local3.text = _local2;
}
function outro(outroTask) {
if (!isVisible) {
outroTask.completed();
return(undefined);
}
isVisible = false;
SConsole.removeTickListener(this);
SConsole.stopTicker();
var _local2 = new mx.transitions.Tween(screenMc, "_alpha", mx.transitions.easing.Strong.easeOut, 100, 0, 1, true);
_local2.onMotionFinished = utils.Proxy.create(this, onOutroDone, outroTask);
}
function onOutroDone(tweener, ts1, ts2) {
screenMc.removeMovieClip();
SConsole.removeTickListener(this);
isVisible = false;
ts1.completed();
ts2.completed();
}
function tick() {
bg._x = bg._x - 0.2;
fg._x = fg._x - 0.5;
arrows.nextFrame();
if (fg._x < -998) {
fg._x = fg._x + 998;
}
if (bg._x < -994) {
bg._x = bg._x + 994;
}
}
var namespace = new Array("screens", "BackgroundScreen");
}
Symbol 350 MovieClip [__Packages.screens.StartScreen] Frame 0
class screens.StartScreen extends modules.screens.BaseScreen
{
var holder, introTask, screen_mc, outroTask, startMenu, instructions, isActive;
function StartScreen () {
super();
}
function load(mc, loadTask) {
holder = mc;
loadTask.completed();
}
function intro(introTask) {
modules.screens.ScreenManager.__set__backgroundScreen("background");
SConsole.trace(namespace, "Starting screen intro " + holder);
this.introTask = introTask;
var _local2 = holder.getNextHighestDepth();
screen_mc = holder.createEmptyMovieClip("startScreen", _local2);
build();
screen_mc._x = -500;
var _local3 = new mx.transitions.Tween(screen_mc, "_x", mx.transitions.easing.Strong.easeOut, -500, 0, 0.5, true);
_local3.onMotionFinished = utils.Proxy.create(this, activate);
}
function outro(outroTask) {
this.outroTask = outroTask;
screen_mc.onRelease = null;
var _local2 = new mx.transitions.Tween(screen_mc, "_x", mx.transitions.easing.Strong.easeOut, 0, -500, 0.5, true);
_local2.onMotionFinished = utils.Proxy.create(this, inactivate);
}
function inactivate() {
startMenu.removeEventListener("onSelect", this);
startMenu.destroy();
screen_mc.removeMovieClip();
outroTask.completed();
instructions.destroy();
}
function activate() {
isActive = true;
introTask.completed();
}
function build() {
startMenu = new se.salomonsson.menu.Menu(screen_mc, 70, 80);
startMenu.addItem(new se.salomonsson.menu.MenuItem("new.game", "Levels"));
startMenu.addItem(new se.salomonsson.menu.MenuItem("hi.scores", "Hiscore"));
startMenu.addItem(new se.salomonsson.menu.MenuItem("your.top.scores", "LocalScore"));
startMenu.addItem(new se.salomonsson.menu.MenuItem("instructions", "Instructions"));
startMenu.addItem(new se.salomonsson.menu.MenuItem("credits", "Credits"));
startMenu.addEventListener("onSelect", this);
var _local4 = new se.salomonsson.menu.MenuMarker(screen_mc);
_local4.init(startMenu.getItemAt(0));
_local4.setSelectionX(510);
startMenu.setMenuMarker(_local4);
instructions = new se.salomonsson.scrolltext.ScrollText(screen_mc, 244, 95, 190, 115, 2823, 11468743, 1);
var _local5 = "TIP: If you lose keyboard\u00A4focus, click inside the game\u00A4once with the mouse\u00A4 \u00A4Hold SPACE to add thrust\u00A4 \u00A4Press S to toggle sound\u00A4Press P to pause the game";
var _local3 = _local5.split("\u00A4");
var _local2 = 0;
while (_local2 < _local3.length) {
instructions.addItem(new se.salomonsson.scrolltext.ScrollTextRow(_local3[_local2]));
_local2++;
}
instructions.addItem(new se.salomonsson.scrolltext.ScrollTextSpace(140));
instructions.start();
}
function onSelect(evt) {
navigate(evt.id);
}
function navigate(id) {
if (!isActive) {
return(undefined);
}
isActive = false;
SConsole.module("screenManager").openScreen(id);
}
var namespace = new Array("screens", "StartScreen");
}
Symbol 351 MovieClip [__Packages.se.salomonsson.scrolltext.ScrollText] Frame 0
class se.salomonsson.scrolltext.ScrollText extends GameBase
{
var mc, mask, x, y, width, height, fromColor, toColor, originalSpeed, speed, items, colorFade, useArrows, upArrow, dnArrow;
function ScrollText (holder, x, y, width, height, fromColor, toColor, speed, useArrows) {
super();
var _local3 = holder.getNextHighestDepth();
mc = holder.createEmptyMovieClip("scrollText_" + _local3, _local3);
mask = holder.createEmptyMovieClip("scrollMask_" + _local3, _local3 + 1);
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.fromColor = fromColor;
this.toColor = toColor;
originalSpeed = speed;
this.speed = originalSpeed;
items = new Array();
colorFade = new ui.ColorFade(this.fromColor, this.toColor);
this.useArrows = ((useArrows == undefined) ? false : true);
build();
}
function build() {
ui.Draw.rectangle(mask, {_w:width, _h:height}, 16711680, 20);
mask._x = (mc._x = x);
mask._y = (mc._y = y);
mc.setMask(mask);
if (useArrows) {
upArrow = new controls.KeyClickHandler(38);
upArrow.setClickHandler(this, speedUp);
upArrow.setReleaseHandler(this, restoreSpeed);
dnArrow = new controls.KeyClickHandler(40);
dnArrow.setClickHandler(this, speedDown);
dnArrow.setReleaseHandler(this, restoreSpeed);
}
}
function addItem(item) {
if (items.length == 0) {
item.render(mc, 0, height, width);
} else {
var _local4 = se.salomonsson.scrolltext.IScrollTextItem(items[items.length - 1]);
var _local2 = _local4.getBounds();
var _local3 = 0;
item.render(mc, 0, (_local2.y + _local2.height) + _local3, width);
}
items.push(item);
}
function reset() {
items[0].setY(height);
var _local2 = 1;
while (_local2 < items.length) {
var _local4 = se.salomonsson.scrolltext.IScrollTextItem(items[_local2 - 1]);
var _local5 = se.salomonsson.scrolltext.IScrollTextItem(items[_local2]);
var _local3 = _local4.getBounds();
_local5.setY(_local3.y + _local3.height);
_local2++;
}
}
function start() {
SConsole.addTickListener(this);
}
function tick() {
var _local5 = 0;
while (_local5 < items.length) {
var _local4 = se.salomonsson.scrolltext.IScrollTextItem(items[_local5]);
var _local6 = _local4.getBounds();
var _local2 = _local6.y;
_local2 = _local2 - speed;
if ((_local2 + _local6.height) < 0) {
_local2 = getBottomY();
}
_local4.setY(_local2);
var _local7 = _local2 / height;
var _local3 = 20;
_local7 = Math.min(Math.max(_local3, _local2), height - _local3);
var _local8 = colorFade.getValue(1 - (_local7 / (height - _local3)));
_local4.setColor(_local8);
_local5++;
}
}
function getBottomY() {
var _local5 = height;
var _local2 = 0;
while (_local2 < items.length) {
var _local3 = items[_local2].getBounds();
var _local4 = _local3.y + _local3.height;
if (_local4 > _local5) {
_local5 = _local4;
}
_local2++;
}
return(_local5);
}
function stop() {
SConsole.removeTickListener(this);
}
function destroy() {
stop();
var _local2 = 0;
while (_local2 < items.length) {
items[_local2].destroy();
_local2++;
}
mask.removeMovieClip();
mc.removeMovieClip();
upArrow.destroy();
dnArrow.destroy();
}
function speedUp() {
speed = originalSpeed * 4;
}
function speedDown() {
speed = 0;
}
function restoreSpeed() {
speed = originalSpeed;
}
var namespace = new Array("scrolltext", "ScrollText");
}
Symbol 352 MovieClip [__Packages.ui.ColorFade] Frame 0
class ui.ColorFade
{
var _fromColor, _toColor, _color_diff, _caller, _callback, _tweener, _colorTween;
function ColorFade (fromColor, toColor) {
_fromColor = hexToRgb(fromColor);
_toColor = hexToRgb(toColor);
_color_diff = new Object();
_color_diff.r = _fromColor.r - _toColor.r;
_color_diff.g = _fromColor.g - _toColor.g;
_color_diff.b = _fromColor.b - _toColor.b;
}
function start(caller, callback, duration) {
_caller = caller;
_callback = callback;
_tweener = new Object();
_tweener.val = 0;
_colorTween = new mx.transitions.Tween(_tweener, "val", mx.transitions.easing.None.easeNone, 0, 1, duration, true);
_colorTween.onMotionChanged = utils.Proxy.create(this, onChange);
}
function abort() {
_colorTween.stop();
}
function onChange() {
var _local2 = getValue(_tweener.val);
utils.Proxy.create(_caller, _callback, _local2)();
}
function getValue(val) {
var _local2 = new Object();
_local2.r = _fromColor.r - (_color_diff.r * val);
_local2.g = _fromColor.g - (_color_diff.g * val);
_local2.b = _fromColor.b - (_color_diff.b * val);
var _local4 = rgbToHex(_local2);
return(_local4);
}
function hexToRgb(_col) {
var _local1 = new Object();
_local1.r = _col >> 16;
_local1.g = (_col & 65280) >> 8;
_local1.b = _col & 255;
return(_local1);
}
function rgbToHex(_rgb) {
var _local1 = ((_rgb.r << 16) | (_rgb.g << 8)) | _rgb.b;
return(_local1);
}
}
Symbol 353 MovieClip [__Packages.controls.KeyClickHandler] Frame 0
class controls.KeyClickHandler
{
var keyCode, isDown, callback, releaseCallback;
function KeyClickHandler (keyCode) {
this.keyCode = keyCode;
isDown = false;
Key.addListener(this);
}
function setClickHandler(callObj, callFunc) {
callback = utils.Proxy.create(callObj, callFunc);
}
function setReleaseHandler(callObj, callFunc) {
releaseCallback = utils.Proxy.create(callObj, callFunc);
}
function destroy() {
Key.removeListener(this);
}
function onKeyDown() {
if (Key.isDown(keyCode)) {
if (!isDown) {
isDown = true;
if (callback != null) {
callback();
}
}
}
}
function onKeyUp() {
if (isDown) {
if (!Key.isDown(keyCode)) {
isDown = false;
if (releaseCallback != null) {
releaseCallback();
}
}
}
}
}
Symbol 354 MovieClip [__Packages.se.salomonsson.scrolltext.IScrollTextItem] Frame 0
interface se.salomonsson.scrolltext.IScrollTextItem
{
}
Symbol 355 MovieClip [__Packages.se.salomonsson.menu.Menu] Frame 0
class se.salomonsson.menu.Menu extends GameBase
{
var mc, x, y, isActive, items, inputHandlers, selectedItem, marker, mixer, isVisible, dispatchEvent;
function Menu (holder, x, y) {
super();
mx.events.EventDispatcher.initialize(this);
var _local3 = holder.getNextHighestDepth();
mc = holder.createEmptyMovieClip("menu_" + _local3, _local3);
this.x = x;
this.y = y;
isActive = true;
items = new Array();
inputHandlers = new Array();
selectedItem = 0;
marker = null;
mixer = modules.musicmixer.MusicMixer(SConsole.module("musicmixer"));
setup();
}
function setMenuMarker(marker) {
this.marker = marker;
}
function setup() {
var _local4 = new controls.KeyClickHandler(40);
var _local2 = new controls.KeyClickHandler(38);
var _local3 = new controls.KeyClickHandler(32);
var _local5 = new controls.KeyClickHandler(13);
_local4.setClickHandler(this, next);
_local2.setClickHandler(this, prev);
_local3.setClickHandler(this, select);
_local5.setClickHandler(this, select);
inputHandlers = [_local4, _local2, _local3, _local5];
}
function addItem(item) {
var _local4 = se.salomonsson.menu.IMenuItem(items[items.length - 1]);
if (_local4 == null) {
item.render(mc, x, y, true);
marker.onMark(item);
} else {
var _local3 = _local4.getBounds();
item.render(mc, x, _local3.y + _local3.height, false);
}
item.addEventListener("onSelect", this);
items.push(item);
}
function show() {
isVisible = true;
mc._visible = false;
}
function hide() {
isVisible = false;
mc._visible = false;
}
function getItemAt(n) {
return(items[n]);
}
function destroy() {
var _local2 = 0;
while (_local2 < items.length) {
items[_local2].destroy();
_local2++;
}
_local2 = 0;
while (_local2 < inputHandlers.length) {
inputHandlers[_local2].destroy();
_local2++;
}
}
function next() {
if (!isActive) {
return(undefined);
}
if (selectedItem < (items.length - 1)) {
markItem(selectedItem + 1);
mixer.startFX("nav", 1, 55);
}
}
function prev() {
if (!isActive) {
return(undefined);
}
if (selectedItem > 0) {
markItem(selectedItem - 1);
mixer.startFX("nav", 1, 55);
}
}
function markItem(n) {
if (!isActive) {
return(undefined);
}
if (selectedItem == n) {
return(undefined);
}
selectedItem = n;
unselectAll();
var _local2 = se.salomonsson.menu.IMenuItem(items[selectedItem]);
_local2.mark();
marker.onMark(_local2);
}
function select() {
if (!isActive) {
return(undefined);
}
isActive = false;
var _local2 = se.salomonsson.menu.IMenuItem(items[selectedItem]);
var _local3 = new se.salomonsson.synchronizer.TaskSequence();
_local3.addParallelTask(marker, marker.onSelection, [_local2]);
_local3.addParallelTask(this, hideMenu);
_local3.addSequentialTask(_local2, _local2.select);
_local3.execute();
if (_local2.getId() == "StartScreen") {
mixer.startFX("back", 1, 60);
} else {
mixer.startFX("selection", 1, 60);
}
}
function unselectAll() {
var _local2 = 0;
while (_local2 < items.length) {
se.salomonsson.menu.IMenuItem(items[_local2]).unmark();
_local2++;
}
}
function hideMenu(ts) {
var _local3 = new se.salomonsson.synchronizer.TaskSequence();
var _local2 = 0;
while (_local2 < items.length) {
_local3.addParallelTask(this, delayCall, [items[_local2], _local2 * 200]);
_local2++;
}
_local3.addSequentialTask(ts, ts.completed);
_local3.execute();
}
function delayCall(item, delay, ts) {
utils.Delay.create(item, item.hide, delay, ts);
}
function onSelect(evt) {
dispatchEvent(evt);
}
var namespace = new Array("menu", "Menu");
}
Symbol 356 MovieClip [__Packages.se.salomonsson.menu.IMenuMarker] Frame 0
interface se.salomonsson.menu.IMenuMarker
{
}
Symbol 357 MovieClip [__Packages.se.salomonsson.menu.IMenuItem] Frame 0
interface se.salomonsson.menu.IMenuItem
{
}
Symbol 358 MovieClip [__Packages.se.salomonsson.synchronizer.Task] Frame 0
class se.salomonsson.synchronizer.Task implements se.salomonsson.synchronizer.ITaskStatus
{
var namespace, targetObject, targetMethod, targetMethodParameters, done, completionHandler, __get__onCompletion, failureHandler, __get__onFailure, abortionHandler, __get__onAbortion, taskOwner, id;
function Task (targetObject, targetMethod, targetMethodParameters) {
namespace = new Array("Core", "Synchronizer", "Task");
this.targetObject = targetObject;
this.targetMethod = targetMethod;
this.targetMethodParameters = targetMethodParameters;
done = false;
}
function set onCompletion(handler) {
completionHandler = handler;
//return(__get__onCompletion());
}
function set onFailure(handler) {
failureHandler = handler;
//return(__get__onFailure());
}
function set onAbortion(handler) {
abortionHandler = handler;
//return(__get__onAbortion());
}
function completed(Void) {
if (!done) {
done = true;
if (taskOwner != undefined) {
taskOwner.subTaskCompleted(id);
}
if (completionHandler != undefined) {
completionHandler.apply(undefined);
delete completionHandler;
}
}
}
function aborted(Void) {
if (!done) {
done = true;
if (taskOwner != undefined) {
taskOwner.subTaskAborted(id);
}
if (abortionHandler != undefined) {
abortionHandler.apply(undefined);
delete abortionHandler;
}
}
}
function failed(Void) {
if (!done) {
done = true;
if ((!taskOwner) != undefined) {
taskOwner.subTaskFailed(id);
}
if (failureHandler != undefined) {
failureHandler.apply(undefined);
delete failureHandler;
}
}
}
function setTaskID(id) {
this.id = id;
}
function setTaskOwner(owner) {
taskOwner = owner;
}
function execute(Void) {
if (!done) {
try {
if (targetMethodParameters == undefined) {
targetMethodParameters = new Array();
}
targetMethodParameters.push(this);
targetMethod.apply(targetObject, targetMethodParameters);
} catch(e:Error) {
trace("*** Catching error in Task.execute() ***");
failed();
}
}
}
var sequential = true;
}
Symbol 359 MovieClip [__Packages.se.salomonsson.synchronizer.TaskSequence] Frame 0
class se.salomonsson.synchronizer.TaskSequence extends se.salomonsson.synchronizer.Task
{
static var queue, processID;
var namespace, waiting, active, totalItems, done, aborted, failed, completed;
function TaskSequence () {
super();
namespace = new Array("Core", "Synchronizer", "TaskSequence");
waiting = new Array();
active = new Array();
active.items = 0;
totalItems = 0;
}
function addTask(task) {
task.setTaskOwner(this);
waiting.push(task);
totalItems++;
}
function addSequentialTask(targetObject, targetMethod, targetMethodParameters) {
var _local2 = new se.salomonsson.synchronizer.Task(targetObject, targetMethod, targetMethodParameters);
_local2.sequential = true;
addTask(_local2);
}
function addParallelTask(targetObject, targetMethod, targetMethodParameters) {
var _local2 = new se.salomonsson.synchronizer.Task(targetObject, targetMethod, targetMethodParameters);
_local2.sequential = false;
addTask(_local2);
}
function subTaskCompleted(id) {
if (active[id] != undefined) {
delete active[id];
active.items--;
}
if (!done) {
post(this);
}
}
function subTaskAborted(id) {
delete waiting;
delete active;
aborted();
}
function subTaskFailed(id) {
delete waiting;
delete active;
failed();
}
function execute(Void) {
try {
if (!done) {
var _local2;
var _local4;
if ((waiting.length == 0) && (active.items == 0)) {
completed();
} else {
while (waiting.length > 0) {
if ((active.items > 0) && (waiting[0].sequential)) {
break;
}
_local2 = waiting.shift();
var _local3 = ++active.items;
_local2.setTaskID(_local3);
active[_local3] = _local2;
_local2.execute();
}
}
}
} catch(e:Error) {
trace("*** Catching error in TaskSequence.execute() ***");
failed();
}
}
static function post(t) {
if (queue == undefined) {
queue = new Array();
}
queue.push(t);
startProcessing();
}
static function startProcessing(Void) {
if (processID == undefined) {
processID = setInterval(process, 10);
}
}
static function stopProcessing(Void) {
if (processID != undefined) {
clearInterval(processID);
processID = undefined;
}
}
static function process(Void) {
if (queue.length > 0) {
var _local2;
var _local3 = queue.length;
var _local1 = 0;
while (_local1 < _local3) {
_local2 = queue.shift();
_local2.execute.apply(_local2);
_local1++;
}
} else {
stopProcessing();
}
}
}
Symbol 360 MovieClip [__Packages.se.salomonsson.menu.MenuItem] Frame 0
class se.salomonsson.menu.MenuItem extends GameBase implements se.salomonsson.menu.IMenuItem
{
var text, id, type, yMargin, mc, isMarked, height, y, dispatchEvent, t;
function MenuItem (text, id, type) {
super();
mx.events.EventDispatcher.initialize(this);
this.text = text;
this.id = id;
this.type = type;
}
function setYMargin(m) {
yMargin = m;
}
function render(holder, x, y, marked) {
var _local2 = holder.getNextHighestDepth();
mc = holder.createEmptyMovieClip("menuItem_" + _local2, _local2);
mc._x = x;
mc._y = y;
isMarked = ((mark == undefined) ? false : (marked));
if (type == "extraY") {
mc._y = mc._y + 15;
}
build();
if (isMarked) {
mark();
} else {
unmark();
}
height = mc._height;
this.y = mc._y;
}
function mark() {
isMarked = true;
mc._alpha = 100;
}
function unmark() {
isMarked = false;
mc._alpha = 40;
}
function select() {
dispatchEvent({type:"onSelect", text:text, id:id, target:this});
}
function getBounds() {
var _local2 = (y + yMargin) + 8;
var _local3 = height - 8;
return(new flash.geom.Rectangle(mc._x, _local2, mc._width, _local3));
}
function show(ts) {
mc._visible = true;
ts.completed();
}
function hide(ts) {
var _local3 = [[40, false], [80, true], [120, false], [160, true], [200, false]];
var _local2 = 0;
while (_local2 < _local3.length) {
utils.Delay.create(this, setVisibility, _local3[_local2][0], _local3[_local2][1]);
_local2++;
}
utils.Delay.create(ts, ts.completed, 210);
}
function setVisibility(flag) {
mc._visible = flag;
}
function getId() {
return(id);
}
function build() {
if (yMargin == null) {
yMargin = -13;
}
t = new ui.Text(mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 30, 1098394);
t.__get__textFormat().bold = true;
t.__set___text(text);
}
function addEventListener(type, listener) {
}
function removeEventListener(type, listener) {
}
var namespace = new Array("menu", "MenuItem");
}
Symbol 361 MovieClip [__Packages.ui.Text] Frame 0
class ui.Text
{
var mc, tf, fmt;
function Text (holder, width, height, singleLine, autoSize, embedded, font, size, color) {
var _local2 = holder.getNextHighestDepth();
mc = holder.createEmptyMovieClip("text_" + _local2, _local2);
tf = mc.createTextField("tf", 1, 0, 0, width, height);
tf.multiline = !singleLine;
tf.wordWrap = !singleLine;
tf.autoSize = autoSize;
tf.embedFonts = embedded;
tf.selectable = false;
fmt = new TextFormat();
fmt.font = font;
fmt.size = size;
fmt.color = color;
tf.setNewTextFormat(fmt);
}
function set _text(str) {
tf.text = str;
//return(_text);
}
function get _text() {
return(tf.text);
}
function get textFormat() {
return(fmt);
}
function get textField() {
return(tf);
}
function get movieClip() {
return(mc);
}
}
Symbol 362 MovieClip [__Packages.se.salomonsson.menu.MenuMarker] Frame 0
class se.salomonsson.menu.MenuMarker extends GameBase implements se.salomonsson.menu.IMenuMarker
{
var mc, selectionTask;
function MenuMarker (holder) {
super();
var _local3 = holder.getNextHighestDepth();
mc = holder.createEmptyMovieClip("menuMarker", _local3);
SConsole.addTickListener(this);
}
function setSelectionX(x) {
selectionX = x;
}
function init(item, fromX, fromY) {
var _local2 = item.getBounds();
var _local3 = _local2.height / 2;
var _local4 = _local3 - 3;
draw(_local4, _local3);
var _local6 = _local2.x - _local4;
var _local5 = ((_local2.y + _local2.height) - _local3) + 2;
mc._x = ((fromX == null) ? (_local6) : (fromX));
mc._y = ((fromY == null) ? (_local5) : (fromY));
onMark(item);
}
function onMark(newItem) {
var _local2 = newItem.getBounds();
var _local3 = _local2.height / 2;
var _local4 = _local3 - 3;
draw(_local4, _local3);
var _local6 = _local2.x - _local4;
var _local5 = ((_local2.y + _local2.height) - _local3) + 2;
var _local7 = new mx.transitions.Tween(mc, "_x", mx.transitions.easing.Strong.easeOut, mc._x, _local6, 0.2, true);
_local7 = new mx.transitions.Tween(mc, "_y", mx.transitions.easing.Strong.easeOut, mc._y, _local5, 0.2, true);
}
function onSelection(item, ts) {
SConsole.removeTickListener(this);
mc._visible = true;
selectionTask = ts;
var _local2 = new mx.transitions.Tween(mc, "_x", mx.transitions.easing.Strong.easeOut, mc._x, selectionX, 0.6, true);
_local2.onMotionFinished = utils.Proxy.create(this, onSelectionComplete, ts);
}
function onSelectionComplete(tweener, ts) {
mc._visible = false;
ts.completed();
}
function destroy() {
SConsole.removeTickListener(this);
}
function draw(w, h) {
mc.clear();
ui.Draw.rectangle(mc, {_w:w, _h:h}, 1032858, 100);
}
function tick() {
cnt++;
if (cnt > 4) {
mc._visible = true;
cnt = 0;
} else if (cnt > 2) {
mc._visible = false;
} else {
mc._visible = true;
}
}
var namespace = new Array("menu", "MenuMarker");
var cnt = 0;
var selectionX = -30;
}
Symbol 363 MovieClip [__Packages.se.salomonsson.scrolltext.ScrollTextRow] Frame 0
class se.salomonsson.scrolltext.ScrollTextRow implements se.salomonsson.scrolltext.IScrollTextItem
{
var data, mc, col;
function ScrollTextRow (data, linkageID) {
if (linkageID != null) {
this.linkageID = linkageID;
}
this.data = data;
}
function render(holder, x, y, width) {
var _local2 = holder.getNextHighestDepth();
mc = holder.attachMovie(linkageID, "textRow_" + _local2, _local2);
mc._x = x;
mc._y = y;
this.y = y;
col = new Color(mc);
setData();
}
function setData() {
mc.text.text = data;
}
function setY(y) {
this.y = y;
mc._y = Math.round(this.y);
}
function setColor(c) {
col.setRGB(c);
}
function getBounds() {
return(new flash.geom.Rectangle(mc._x, y, mc._width, mc._height - 5));
}
function destroy() {
mc.removeMovieClip();
}
var linkageID = "hiscore_header";
var y = 0;
}
Symbol 364 MovieClip [__Packages.se.salomonsson.scrolltext.ScrollTextSpace] Frame 0
class se.salomonsson.scrolltext.ScrollTextSpace extends se.salomonsson.scrolltext.ScrollTextRow
{
var height, mc, y, col;
function ScrollTextSpace (height) {
super();
this.height = height;
}
function setData() {
ui.Draw.rectangle(mc, {_w:5, _h:height}, 16711680, 0);
}
function render(holder, x, y, width) {
var _local2 = holder.getNextHighestDepth();
mc = holder.createEmptyMovieClip("space_" + _local2, _local2);
this.y = y;
mc._x = x;
mc._y = y;
col = new Color(mc);
setData();
}
}
Symbol 365 MovieClip [__Packages.screens.BaseMenuScreen] Frame 0
class screens.BaseMenuScreen extends modules.screens.BaseScreen
{
var holder, screen_mc, outroTask, menu, isActive, introTask;
function BaseMenuScreen () {
super();
}
function load(mc, loadTask) {
holder = mc;
loadTask.completed();
}
function intro(introTask) {
var _local2 = holder.getNextHighestDepth();
screen_mc = holder.createEmptyMovieClip("screen", _local2);
build();
screen_mc._x = fromX;
var _local3 = new mx.transitions.Tween(screen_mc, "_x", mx.transitions.easing.Strong.easeOut, fromX, 0, 0.5, true);
_local3.onMotionFinished = utils.Proxy.create(this, activate);
}
function outro(outroTask) {
this.outroTask = outroTask;
var _local2 = new mx.transitions.Tween(screen_mc, "_x", mx.transitions.easing.Strong.easeOut, 0, fromX, 0.5, true);
_local2.onMotionFinished = utils.Proxy.create(this, inactivate);
}
function inactivate() {
menu.removeEventListener("onSelect", this);
menu.destroy();
screen_mc.removeMovieClip();
outroTask.completed();
}
function activate() {
isActive = true;
introTask.completed();
}
function build() {
menu = new se.salomonsson.menu.Menu(screen_mc, 70, 165);
menu.addItem(new se.salomonsson.menu.MenuItem("back", "StartScreen"));
menu.addEventListener("onSelect", this);
var _local2 = new se.salomonsson.menu.MenuMarker(screen_mc);
_local2.init(menu.getItemAt(0));
_local2.setSelectionX(510);
menu.setMenuMarker(_local2);
}
function onSelect(evt) {
var _local2 = evt.id;
if (_local2.indexOf("http") != -1) {
getURL (_local2, "_blank");
navigate("StartScreen");
return(undefined);
}
navigate(evt.id);
}
function navigate(id) {
if (!isActive) {
return(undefined);
}
isActive = false;
SConsole.module("screenManager").openScreen(id);
}
var namespace = new Array("screens", "BaseMenuScreen");
var fromX = 500;
}
Symbol 366 MovieClip [__Packages.screens.LocalScoreScreen] Frame 0
class screens.LocalScoreScreen extends screens.BaseMenuScreen
{
var manager, screen_mc, hiscore1;
function LocalScoreScreen () {
super();
manager = modules.persistant.Cookie(SConsole.module("cookie"));
}
function build() {
super.build();
buildHiscore();
var _local3 = new ui.Text(screen_mc, 270, 0, false, true, true, "SF Theramin Gothic Condensed", 14, 412989);
_local3.__get__textFormat().leading = -6;
_local3.__get__textField().setNewTextFormat(_local3.__get__textFormat());
_local3.__set___text("TIP: Control scroll speed with arrows UP/DOWN");
_local3.__get__movieClip()._x = 225;
_local3.__get__movieClip()._y = 273;
}
function buildHiscore() {
hiscore1 = new se.salomonsson.scrolltext.ScrollText(screen_mc, 170, 80, 300, 150, 2823, 11468743, 1, true);
addLevelItems(hiscore1, "Your.Top.Scores East.Exit.Altai", Constants.LEVEL1);
addLevelItems(hiscore1, "Your.Top.Scores Taymyr.Industrial", Constants.LEVEL2);
addLevelItems(hiscore1, "Your.Top.Scores The.Gysi.Express", Constants.LEVEL3);
hiscore1.addItem(new se.salomonsson.scrolltext.ScrollTextSpace(40));
hiscore1.start();
}
function addLevelItems(scrolltext, header, levelKey) {
scrolltext.addItem(new se.salomonsson.scrolltext.ScrollTextRow(header));
var _local3 = getHiscore(levelKey);
if (_local3.length == 0) {
scrolltext.addItem(new se.salomonsson.scrolltext.ScrollTextRow("[NO ENTRIES]"));
} else {
var _local2 = 0;
while (_local2 < _local3.length) {
var _local4 = ((_local2 + 1) + ". ") + _local3[_local2].name;
scrolltext.addItem(new se.salomonsson.scrolltext.ScrollTextScore([_local4, _local3[_local2].score, _local3[_local2].date]));
_local2++;
}
}
scrolltext.addItem(new se.salomonsson.scrolltext.ScrollTextSpace(20));
}
function getHiscore(key) {
var _local2 = manager.read(key);
if ((_local2.length == 0) || (_local2 == undefined)) {
se.salomonsson.grav.Highscore.setDefaultScores(key);
_local2 = manager.read(key);
}
var _local4 = _local2.slice();
return(_local4);
}
function inactivate() {
hiscore1.destroy();
super.inactivate();
}
var namespace = new Array("screens", "LocalScoreScreen");
}
Symbol 367 MovieClip [__Packages.se.salomonsson.scrolltext.ScrollTextScore] Frame 0
class se.salomonsson.scrolltext.ScrollTextScore extends se.salomonsson.scrolltext.ScrollTextRow
{
var data, mc;
function ScrollTextScore (data, linkageID) {
super();
if (linkageID != null) {
this.linkageID = linkageID;
}
this.data = data;
}
function setData() {
mc.name.htmlText = data[0];
mc.dots.text = data[2] + " ..........................................";
mc.score.text = data[1];
}
var linkageID = "hiscore_score";
}
Symbol 368 MovieClip [__Packages.se.salomonsson.grav.Highscore] Frame 0
class se.salomonsson.grav.Highscore extends GameBase
{
static var instance;
var manager, sTrace;
function Highscore () {
super();
manager = modules.persistant.Cookie(SConsole.module("cookie"));
}
static function saveHighscore(name, score, levelKey) {
if (instance == null) {
instance = new se.salomonsson.grav.Highscore();
}
if (levelKey == null) {
levelKey = Constants.LEVEL1;
}
instance.submit(name, score, levelKey);
}
static function isHighscore(score, levelKey) {
if (score < 500) {
return(false);
}
return(true);
}
static function setDefaultScores(key) {
if (instance == null) {
instance = new se.salomonsson.grav.Highscore();
}
instance.saveDefaultScores(key);
}
function saveDefaultScores(key) {
var _local2 = defaultScores;
_local2.sort(sortEntries);
_local2 = _local2.slice(0, MAX_ENTRIES);
manager.write(key, _local2);
}
function checkHighscore(score, levelKey) {
var _local2 = manager.read(levelKey);
if (_local2 == null) {
_local2 = defaultScores;
}
if (_local2.length < MAX_ENTRIES) {
return(true);
}
if (_local2[MAX_ENTRIES - 1].score < score) {
return(true);
}
return(false);
}
function submit(name, score, levelKey) {
var _local2 = manager.read(levelKey);
if (_local2 == null) {
_local2 = defaultScores.slice();
}
sTrace((("SUBMITTING HISCORE! date=" + _local2[0].date) + " with key = ") + levelKey);
if ((name == undefined) || (name == "")) {
name = "YOU";
}
var _local6 = formatDate();
var _local4 = {name:name, score:score, date:_local6};
_local2.push(_local4);
_local2.sort(sortEntries);
_local2 = _local2.slice(0, MAX_ENTRIES);
manager.write(levelKey, _local2);
}
function sortEntries(a, b) {
var _local2 = Number(a.score);
var _local1 = Number(b.score);
if (_local2 > _local1) {
return(-1);
}
return(1);
}
function formatDate() {
var _local1 = new Date();
var _local4 = _local1.getFullYear();
var _local2 = _local1.getDate();
var _local3 = _local1.getMonth() + 1;
return((((_local4 + "-") + _local3) + "-") + _local2);
}
var namespace = new Array("grav", "Highscore");
var MAX_ENTRIES = 5;
var defaultScores = [];
}
Symbol 369 MovieClip [__Packages.screens.HiscoreScreen] Frame 0
class screens.HiscoreScreen extends screens.BaseMenuScreen
{
var manager, screen_mc, statusText, scores, fetchSequence, hiscore1;
function HiscoreScreen (hiscoreManager) {
super();
manager = hiscoreManager;
}
function build() {
super.build();
var _local3 = new ui.Text(screen_mc, 270, 0, false, true, true, "SF Theramin Gothic Condensed", 14, 412989);
_local3.__get__textFormat().leading = -6;
_local3.__get__textField().setNewTextFormat(_local3.__get__textFormat());
_local3.__set___text("TIP: Control scroll speed with arrows UP/DOWN");
_local3.__get__movieClip()._x = 225;
_local3.__get__movieClip()._y = 273;
statusText = new ui.Text(screen_mc, 250, 30, true, true, true, "SF Theramin Gothic Condensed", 22, 412989);
statusText.__get__movieClip()._y = 130;
fetch();
}
function fetch() {
scores = new Array();
fetchSequence = new synchronizer.TaskSequence();
fetchSequence.__set__onFailure(utils.Proxy.create(this, error));
fetchSequence.__set__onCompletion(utils.Proxy.create(this, buildHiscore));
fetchSequence.addSequentialTask(this, hold, [true]);
fetchSequence.addSequentialTask(manager, manager.getScores, [Constants.LEVEL1, 10, utils.Proxy.create(this, onData)]);
fetchSequence.addSequentialTask(manager, manager.getScores, [Constants.LEVEL2, 10, utils.Proxy.create(this, onData)]);
fetchSequence.addSequentialTask(manager, manager.getScores, [Constants.LEVEL3, 10, utils.Proxy.create(this, onData)]);
fetchSequence.addSequentialTask(this, hold, [false]);
fetchSequence.execute();
}
function onData(data) {
scores.push(data);
}
function hold(flag, ts) {
if (flag) {
statusText.__set___text("Fetching hiscores...");
statusText.__get__movieClip()._x = (SConsole.module("screenManager").width / 2) - (statusText.__get__movieClip()._width / 2);
} else {
statusText.__set___text("");
}
ts.completed();
}
function error() {
statusText.__set___text("Could not connect to server");
statusText.__get__movieClip()._x = (SConsole.module("screenManager").width / 2) - (statusText.__get__movieClip()._width / 2);
}
function buildHiscore() {
hiscore1 = new se.salomonsson.scrolltext.ScrollText(screen_mc, 170, 80, 300, 150, 2823, 11468743, 1, true);
addLevelItems(hiscore1, "High.Scores East.Exit.Altai", Constants.LEVEL1);
addLevelItems(hiscore1, "High.Scores Taymyr.Industrial", Constants.LEVEL2);
addLevelItems(hiscore1, "High.Scores The.Gysi.Express", Constants.LEVEL3);
hiscore1.addItem(new se.salomonsson.scrolltext.ScrollTextSpace(40));
hiscore1.start();
}
function addLevelItems(scrolltext, header, levelKey) {
scrolltext.addItem(new se.salomonsson.scrolltext.ScrollTextRow(header));
var _local3 = scores.shift();
if (_local3.length == 0) {
scrolltext.addItem(new se.salomonsson.scrolltext.ScrollTextRow("[NO ENTRIES]"));
} else {
var _local2 = 0;
while (_local2 < _local3.length) {
var _local4 = ((_local2 + 1) + ". ") + _local3[_local2].name;
scrolltext.addItem(new se.salomonsson.scrolltext.ScrollTextScore([_local4, _local3[_local2].score, _local3[_local2].date]));
_local2++;
}
}
scrolltext.addItem(new se.salomonsson.scrolltext.ScrollTextSpace(20));
}
function outro(outroTask) {
fetchSequence.aborted();
super.outro(outroTask);
}
function inactivate() {
hiscore1.destroy();
super.inactivate();
}
var namespace = new Array("screens", "HiscoreScreen");
}
Symbol 370 MovieClip [__Packages.screens.MultipleHiscoreScreen] Frame 0
class screens.MultipleHiscoreScreen extends screens.HiscoreScreen
{
var dayScores, weekScores, monthScores, holderDay, screen_mc, holderWeek, holderMonth, hiscore1, hiscore2, hiscore3, scores, currentHiscore, hiscores, hiscoreHolders, addLevelItems, sTrace, clickLeft, clickRight;
function MultipleHiscoreScreen (hiscoreManager) {
super(hiscoreManager);
}
function build() {
dayScores = new Array();
weekScores = new Array();
monthScores = new Array();
super.build();
}
function buildHiscore() {
holderDay = screen_mc.createEmptyMovieClip("holderDay", screen_mc.getNextHighestDepth());
holderWeek = screen_mc.createEmptyMovieClip("holderWeek", screen_mc.getNextHighestDepth());
holderMonth = screen_mc.createEmptyMovieClip("holderMonth", screen_mc.getNextHighestDepth());
hiscore1 = new se.salomonsson.scrolltext.ScrollText(holderDay, 180, 105, 300, 150, 2823, 11468743, 1, true);
hiscore2 = new se.salomonsson.scrolltext.ScrollText(holderWeek, 180, 105, 300, 150, 2823, 11468743, 1, true);
hiscore3 = new se.salomonsson.scrolltext.ScrollText(holderMonth, 180, 105, 300, 150, 2823, 11468743, 1, true);
constructHiscoreTable(holderDay, hiscore1, dayScores, "SCORE.OF.THE.DAY");
constructHiscoreTable(holderWeek, hiscore2, weekScores, "SCORE.OF.THE.WEEK");
constructHiscoreTable(holderMonth, hiscore3, monthScores, "SCORE.OF.THE.MONTH");
scores = null;
holderWeek._x = 1000;
holderMonth._x = 1000;
hiscore1.start();
currentHiscore = 0;
hiscores = [hiscore1, hiscore2, hiscore3];
hiscoreHolders = [holderDay, holderWeek, holderMonth];
var _local2 = new ui.Text(screen_mc, 100, 0, false, true, true, "SF Theramin Gothic Condensed", 14, 412989);
_local2.__get__movieClip()._x = 70;
_local2.__get__movieClip()._y = 80;
_local2.__get__textFormat().leading = -6;
_local2.__get__textField().setNewTextFormat(_local2.__get__textFormat());
_local2.__set___text("Switch between the different high score types using the arrows LEFT/RIGHT");
initControls();
}
function constructHiscoreTable(holder, hiscore, _scores, header) {
scores = _scores;
var _local2 = new ui.Text(holder, 100, 30, true, true, true, "SF Theramin Gothic Condensed", 18, 1032858);
_local2.__set___text(header);
_local2.__get__movieClip()._x = 180;
_local2.__get__movieClip()._y = 80;
addLevelItems(hiscore, "High.Scores East.Exit.Altai", Constants.LEVEL1);
addLevelItems(hiscore, "High.Scores Taymyr.Industrial", Constants.LEVEL2);
addLevelItems(hiscore, "High.Scores The.Gysi.Express", Constants.LEVEL3);
hiscore.addItem(new se.salomonsson.scrolltext.ScrollTextSpace(40));
}
function onData(scoreData) {
sTrace("Got hiscore data from server");
dayScores.push(scoreData.day);
weekScores.push(scoreData.week);
monthScores.push(scoreData.month);
}
function initControls() {
clickLeft = new controls.KeyClickHandler(37);
clickRight = new controls.KeyClickHandler(39);
clickLeft.setClickHandler(this, prev);
clickRight.setClickHandler(this, next);
}
function prev() {
cycleHiscore(-1);
}
function next() {
cycleHiscore(1);
}
function cycleHiscore(dir) {
var _local6 = -1000 * dir;
var _local7 = 1000 * dir;
var _local2 = 0;
while (_local2 < hiscores.length) {
hiscores[_local2].stop();
_local2++;
}
var _local3 = hiscoreHolders[currentHiscore];
currentHiscore = currentHiscore + dir;
if (currentHiscore >= hiscores.length) {
currentHiscore = 0;
} else if (currentHiscore < 0) {
currentHiscore = hiscores.length - 1;
}
hiscores[currentHiscore].reset();
hiscores[currentHiscore].start();
var _local4 = hiscoreHolders[currentHiscore];
var _local9 = new mx.transitions.Tween(_local3, "_x", mx.transitions.easing.Strong.easeOut, _local3._x, _local6, 0.8, true);
var _local8 = new mx.transitions.Tween(_local4, "_x", mx.transitions.easing.Strong.easeOut, _local7, 0, 0.8, true);
}
function inactivate() {
hiscore1.destroy();
hiscore2.destroy();
hiscore3.destroy();
clickLeft.destroy();
clickRight.destroy();
super.inactivate();
}
var namespace = new Array("screens", "MultipleHiscoreScreen");
}
Symbol 371 MovieClip [__Packages.screens.CreditsScreen] Frame 0
class screens.CreditsScreen extends screens.BaseMenuScreen
{
var texts, menu, screen_mc;
function CreditsScreen () {
super();
texts = new Array();
}
function build() {
menu = new se.salomonsson.menu.Menu(screen_mc, 0, 0);
var _local6 = new se.salomonsson.menu.PositionedMenuItem("Tommy Salomonsson", "http://www.salomonsson.se", 70, 95);
var _local5 = new se.salomonsson.menu.PositionedMenuItem("Simon St\u00E5lenhag", "http://www.simonstalenhag.se", 70, 142);
var _local4 = new se.salomonsson.menu.PositionedMenuItem("Andreas Lagergren", "http://www.nicedog.se", 70, 189);
var _local3 = new se.salomonsson.menu.PositionedMenuItem("back", "StartScreen", 70, 223);
menu.addItem(_local6);
menu.addItem(_local5);
menu.addItem(_local4);
menu.addItem(_local3);
menu.addEventListener("onSelect", this);
var _local2 = new se.salomonsson.menu.MenuMarker(screen_mc);
_local2.init(menu.getItemAt(0));
_local2.setSelectionX(510);
menu.setMenuMarker(_local2);
addText("Code and Game Construction", 70, 80);
addText("Art and Music", 70, 129);
addText("Video Intro", 70, 176);
addText("salomonsson.se", 275, 101);
addText("simonstalenhag.se", 275, 147);
addText("nicedog.se", 275, 195);
}
function addText(s, x, y) {
var _local2 = new ui.Text(screen_mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 18, 1098394);
_local2.__get__movieClip()._x = x;
_local2.__get__movieClip()._y = y;
_local2.__set___text(s);
texts.push(_local2);
}
function inactivate() {
menu.destroy();
super.inactivate();
}
var namespace = new Array("screens", "CreditsScreen");
}
Symbol 372 MovieClip [__Packages.se.salomonsson.menu.PositionedMenuItem] Frame 0
class se.salomonsson.menu.PositionedMenuItem extends se.salomonsson.menu.MenuItem
{
var x, y, t, text, height, mc, yMargin;
function PositionedMenuItem (text, id, x, y) {
super(text, id);
this.x = x;
this.y = y;
}
function render(holder, x_dontuse, y_dontuse, marked) {
super.render(holder, x, y, marked);
t.__get__textFormat().bold = false;
t.__get__textFormat().size = 24;
t.__set___text(text);
height = mc._height + 8;
y = y - 6;
}
function build() {
if (yMargin == null) {
yMargin = -13;
}
t = new ui.Text(mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 24, 1098394);
t.__set___text(text);
}
}
Symbol 373 MovieClip [__Packages.screens.InstructionScreen] Frame 0
class screens.InstructionScreen extends screens.BaseMenuScreen
{
var instructions, screen_mc;
function InstructionScreen () {
super();
}
function build() {
super.build();
instructions = new se.salomonsson.scrolltext.ScrollText(screen_mc, 140, 80, 400, 150, 2823, 11468743, 1, true);
var _local6 = "INSTRUCTIONS\u00A4To navigate through the Siberia Underground\u00A4you need to watch out for the tricky gravity.\u00A4Press SPACE BAR to add thrust to your\u00A4vehicle and release it before hitting the\u00A4roof. Thats really all you need to do...\u00A4sounds easy? Remember to watch out for\u00A4obstacles in the way!\u00A4\u00A4\u00A4A few hints\u00A4Press the button S whenever you wish to\u00A4toggle the sound\u00A4\u00A4Press the button P to pause or unpause\u00A4the game\u00A4\u00A4Looking for a good score? While trying\u00A4to fly as straight as possible is a bit\u00A4easier, it will not result in such a high\u00A4score. Try to do some daring manouvers\u00A4to recieve some extra distance.\u00A4\u00A4Good luck!";
var _local4 = _local6.split("\u00A4");
var _local3 = 0;
while (_local3 < _local4.length) {
instructions.addItem(new se.salomonsson.scrolltext.ScrollTextRow(_local4[_local3]));
_local3++;
}
instructions.addItem(new se.salomonsson.scrolltext.ScrollTextSpace(140));
instructions.start();
var _local5 = new ui.Text(screen_mc, 270, 0, false, true, true, "SF Theramin Gothic Condensed", 14, 412989);
_local5.__get__textFormat().leading = -6;
_local5.__get__textField().setNewTextFormat(_local5.__get__textFormat());
_local5.__set___text("TIP: Control scroll speed with arrows UP/DOWN");
_local5.__get__movieClip()._x = 225;
_local5.__get__movieClip()._y = 273;
}
function inactivate() {
instructions.destroy();
super.inactivate();
}
var namespace = new Array("screens", "InstructionScreen");
}
Symbol 374 MovieClip [__Packages.screens.LevelScreen] Frame 0
class screens.LevelScreen extends screens.BaseMenuScreen
{
var menu, screen_mc, isActive;
function LevelScreen () {
super();
}
function build() {
menu = new se.salomonsson.menu.Menu(screen_mc, 70, 80);
var _local6 = new se.salomonsson.menu.MenuItem("East.Exit.Altai", Constants.LEVEL1);
var _local5 = new se.salomonsson.menu.MenuItem("Taymyr.Industrial", Constants.LEVEL2);
var _local3 = new se.salomonsson.menu.MenuItem("The.Gysi.Express", Constants.LEVEL3);
menu.addItem(_local6);
menu.addItem(_local5);
menu.addItem(_local3);
menu.addItem(new se.salomonsson.menu.MenuItem("back", "StartScreen", "extraY"));
menu.addEventListener("onSelect", this);
var _local7 = new se.salomonsson.menu.MenuMarker(screen_mc);
_local7.init(menu.getItemAt(0));
_local7.setSelectionX(510);
menu.setMenuMarker(_local7);
var _local4 = new ui.Text(screen_mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 20, 534818);
_local4.__set___text("Easy");
_local4.__get__movieClip()._x = _local6.getBounds().right + 10;
_local4.__get__movieClip()._y = _local6.getBounds().y + 15;
var _local2 = new ui.Text(screen_mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 20, 534818);
_local2.__set___text("Medium");
_local2.__get__movieClip()._x = _local5.getBounds().right + 10;
_local2.__get__movieClip()._y = _local5.getBounds().y + 15;
var _local8 = new ui.Text(screen_mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 20, 534818);
_local8.__set___text("Hard");
_local8.__get__movieClip()._x = _local3.getBounds().right + 10;
_local8.__get__movieClip()._y = _local3.getBounds().y + 15;
}
function navigate(id) {
if (!isActive) {
return(undefined);
}
isActive = false;
if (((id == Constants.LEVEL1) || (id == Constants.LEVEL2)) || (id == Constants.LEVEL3)) {
SConsole.session.addValue("level", id);
SConsole.module("screenManager").openScreen("Game");
} else {
SConsole.module("screenManager").openScreen(id);
}
}
var namespace = new Array("screens", "LevelScreen");
var fromX = -500;
}
Symbol 375 MovieClip [__Packages.screens.GameScreen] Frame 0
class screens.GameScreen extends modules.screens.BaseScreen
{
var model, mixer, clickHandler, screenManager, isRunning, gamePaused, holder, levelData, sTrace, introTask, tweenMc, outroTask, pause_mc, gameVolume;
function GameScreen () {
super();
model = se.salomonsson.grav.Model.getInstance();
mixer = modules.musicmixer.MusicMixer(SConsole.module("musicmixer"));
clickHandler = new controls.KeyClickHandler(80);
screenManager = modules.screens.ScreenManager(SConsole.module("screenManager"));
isRunning = false;
gamePaused = false;
clickHandler.setClickHandler(this, onPause);
}
function load(mc, loadTask) {
holder = mc;
SConsole.trace(namespace, "*******Start loading loadgamescreen");
if (levelData == null) {
var _local5 = new se.salomonsson.data.LevelParser();
var _local4 = new se.salomonsson.data.LevelParser();
var _local3 = new se.salomonsson.data.LevelParser();
levelData = new Array();
levelData.push(_local5);
levelData.push(_local4);
levelData.push(_local3);
var _local2 = new se.salomonsson.synchronizer.TaskSequence();
_local2.addSequentialTask(_local5, _local5.parseData, [Constants.LEVEL1]);
_local2.addSequentialTask(_local4, _local4.parseData, [Constants.LEVEL2]);
_local2.addSequentialTask(_local3, _local3.parseData, [Constants.LEVEL3]);
_local2.addSequentialTask(this, test);
_local2.addSequentialTask(loadTask, loadTask.completed);
_local2.execute();
} else {
loadTask.completed();
}
}
function test(ts) {
sTrace("GameScreen.loadComplete()");
ts.completed();
}
function intro(introTask) {
this.introTask = introTask;
var _local3 = modules.screens.ScreenManager.__get__backgroundScreen();
var _local4 = model.getTimeLine();
_local4._visible = false;
if (tweenMc != null) {
tweenMc.removeMovieClip();
}
tweenMc = screenManager.__get__root().createEmptyMovieClip("tweenMc", screenManager.__get__root().getNextHighestDepth());
tweenMc._alpha = 0;
ui.Draw.rectangle(tweenMc, {_w:screenManager.__get__width(), _h:screenManager.__get__height()}, 0, 100);
var _local2 = new se.salomonsson.synchronizer.TaskSequence();
_local2.__set__onCompletion(utils.Proxy.create(this, activate));
_local2.addSequentialTask(_local3, _local3.outro);
_local2.addSequentialTask(this, removeBgScreen);
_local2.addSequentialTask(this, show);
_local2.addSequentialTask(this, removeTweenMc);
_local2.execute();
}
function loadError() {
sTrace("LOAD ERROR!");
}
function show(ts) {
var _local3 = String(SConsole.session.getValue("level"));
var _local4 = constructLevel(_local3);
var _local5 = model.getTimeLine();
model.startGame(_local4);
tweenMc._alpha = 100;
_local5._visible = true;
var _local2 = new mx.transitions.Tween(tweenMc, "_alpha", mx.transitions.easing.Strong.easeOut, 100, 0, 1.5, true);
_local2.onMotionFinished = utils.Proxy.create(ts, ts.completed);
isRunning = true;
}
function removeBgScreen(ts) {
modules.screens.ScreenManager.__set__backgroundScreen(null);
ts.completed();
}
function removeTweenMc(ts) {
tweenMc.removeMovieClip();
ts.completed();
}
function outro(outroTask) {
this.outroTask = outroTask;
isRunning = false;
var _local5 = model.getTimeLine();
if (tweenMc != null) {
tweenMc.removeMovieClip();
}
tweenMc = screenManager.__get__root().createEmptyMovieClip("tweenMc", screenManager.__get__root().getNextHighestDepth());
tweenMc._alpha = 0;
ui.Draw.rectangle(tweenMc, {_w:screenManager.__get__width(), _h:screenManager.__get__height()}, 0, 100);
var _local2 = new mx.transitions.Tween(tweenMc, "_alpha", mx.transitions.easing.Strong.easeOut, 0, 100, 0.5, true);
_local2.onMotionFinished = utils.Proxy.create(this, inactivate);
}
function inactivate() {
model.destroy();
removeTweenMc();
outroTask.completed();
}
function activate() {
SConsole.startTicker();
introTask.completed();
}
function onPause() {
if (!isRunning) {
return(undefined);
}
if (!model.pauseGame(!gamePaused)) {
return(undefined);
}
gamePaused = !gamePaused;
if (gamePaused) {
SConsole.stopTicker();
pause_mc = screenManager.__get__root().createEmptyMovieClip("pause_mc", screenManager.__get__root().getNextHighestDepth());
ui.Draw.rectangle(pause_mc, {_w:screenManager.__get__width(), _h:screenManager.__get__height()}, 0, 30);
var _local3 = new ui.Text(pause_mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 24, 1098394);
_local3.__set___text("PAUSE");
_local3.__get__movieClip()._x = (screenManager.__get__width() / 2) - (_local3.__get__movieClip()._width / 2);
_local3.__get__movieClip()._y = ((screenManager.__get__height() / 2) - (_local3.__get__movieClip()._height / 2)) - 10;
var _local5 = new ui.Text(pause_mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 16, 1098394);
_local5.__set___text("Press P to resume");
_local5.__get__movieClip()._x = (screenManager.__get__width() / 2) - (_local5.__get__movieClip()._width / 2);
_local5.__get__movieClip()._y = (_local3.__get__movieClip()._y + _local3.__get__movieClip()._height) - 5;
var _local4 = new ui.Text(pause_mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 14, 1098394);
_local4.__set___text("(If P doesn't work, click with the mouse inside the game and try again)");
_local4.__get__movieClip()._x = (screenManager.__get__width() / 2) - (_local4.__get__movieClip()._width / 2);
_local4.__get__movieClip()._y = screenManager.__get__height() - _local4.__get__movieClip()._height;
_local4.__get__movieClip()._alpha = 70;
modules.musicmixer.Mute.setEnabled(false);
gameVolume = modules.musicmixer.Song.globalVolume;
modules.musicmixer.Song.globalVolume = 0;
var _local6 = new Sound(_root);
_local6.setVolume(0);
Mouse.show();
} else {
SConsole.startTicker();
pause_mc.removeMovieClip();
modules.musicmixer.Mute.setEnabled(true);
modules.musicmixer.Song.globalVolume = gameVolume;
var _local6 = new Sound(_root);
_local6.setVolume(gameVolume * 100);
Mouse.hide();
}
}
function constructLevel(levelKey) {
var _local2;
switch (levelKey) {
case Constants.LEVEL1 :
_local2 = [levelData[0], levelData[1], levelData[2]];
break;
case Constants.LEVEL2 :
_local2 = [levelData[1], levelData[2]];
break;
case Constants.LEVEL3 :
_local2 = [levelData[2]];
}
sTrace(" constructLevel(): " + _local2.length);
return(_local2);
}
var namespace = new Array("screens", "GameScreen");
var mc_id = "game_mc";
}
Symbol 376 MovieClip [__Packages.se.salomonsson.grav.Model] Frame 0
class se.salomonsson.grav.Model extends GameBase
{
var mixer, tl, spriteName, isRunning, ySpeed, y, speed, targetSpeed, angle, levelData, currentLevel, x, views, controllers, gameView, backgroundView, wallView, guiView, distance, sTrace;
function Model (_tl) {
super();
mixer = modules.musicmixer.MusicMixer(SConsole.module("musicmixer"));
}
static function getInstance() {
if (instance == null) {
instance = new se.salomonsson.grav.Model();
}
return(instance);
}
function setup(timeline, spriteId) {
if (arguments.length != 2) {
trace("WRONG NUMBER OF ARGUMENTS IN MODEL SETUP!!");
}
if (tl != null) {
return(undefined);
}
spriteName = spriteId;
Stage.scaleMode = "noScale";
tl = timeline.createEmptyMovieClip("gameHolder", timeline.getNextHighestDepth());
isRunning = false;
SConsole.addTickListener(this);
}
function tick() {
if (isRunning) {
gameLoop();
sendUpdate({subject:"enterFrame", value:null});
}
}
function gameLoop() {
if (boost) {
ySpeed = ySpeed - gravity;
} else {
ySpeed = ySpeed + gravity;
}
if (ySpeed < (-maxYspeed)) {
ySpeed = -maxYspeed;
} else if (ySpeed > maxYspeed) {
ySpeed = maxYspeed;
}
y = y + ySpeed;
if (targetSpeed != speed) {
var _local3 = (targetSpeed - speed) * 0.2;
speed = speed + _local3;
if (Math.abs(targetSpeed - speed) < 0.5) {
speed = targetSpeed;
}
sendUpdate({subject:"speed", value:speed});
}
var _local2 = Math.atan2(ySpeed, speed);
angle = (_local2 / Math.PI) * 180;
}
function startGame(levelData) {
isRunning = true;
this.levelData = levelData;
currentLevel = -1;
x = w / 3;
y = h / 2;
angle = 0;
ySpeed = 0;
speed = 0;
targetSpeed = 0;
views = new Array();
controllers = new Array();
gameView = new se.salomonsson.grav.GameView(this, new se.salomonsson.grav.GameController());
backgroundView = new se.salomonsson.grav.BackgroundView(this, null);
wallView = new se.salomonsson.grav.WallView(this, null);
guiView = new se.salomonsson.grav.GUIView(this, null);
addView(gameView);
addView(backgroundView);
addView(wallView);
addView(guiView);
wallView.setLevelData(levelData);
levelUpdate();
setSpeed(6);
setGravity(0.2);
Mouse.hide();
}
function endGame() {
isRunning = false;
speed = 0;
gravity = 0.15;
Mouse.show();
var _local2 = modules.screens.ScreenManager(SConsole.module("screenManager"));
var _local3 = String(SConsole.session.getValue("level"));
SConsole.stopTicker();
if (se.salomonsson.grav.Highscore.isHighscore(distance, _local3)) {
SConsole.session.addValue("hiscore", String(distance));
_local2.openScreen("Submit");
} else {
_local2.openScreen("StartScreen");
}
}
function pauseGame(flag) {
if (isRunning) {
sTrace("Pause game = " + flag);
sendUpdate({subject:"pause", value:flag});
return(true);
}
return(false);
}
function destroy() {
sendUpdate({subject:"destroy"});
delete gameView;
delete backgroundView;
delete wallView;
delete guiView;
delete views;
delete controllers;
}
function checkCollision(x, y) {
x = x + tl._parent._x;
y = y + tl._parent._y;
if (wallView.checkCollision(x, y)) {
isRunning = false;
gameView.die();
message(gameOverMessage);
return(true);
}
return(false);
}
function message(msg) {
sendUpdate({subject:"message", value:msg});
}
function levelUpdate() {
currentLevel++;
if (levelData[currentLevel] == null) {
return(undefined);
}
var _local2 = se.salomonsson.data.LevelParser(levelData[currentLevel]);
var _local3 = _local2.__get__data().tiles.getValue("0");
if (currentLevel == 0) {
var _local5 = _local2.__get__key();
mixer.startSong("main", levelData[currentLevel].key, true);
}
sendUpdate({subject:"changeBg", value:_local3});
sendUpdate({subject:"levelUp", value:currentLevel});
}
function onLevelWrapped() {
var _local2 = se.salomonsson.data.LevelParser(levelData[currentLevel]);
var _local4 = _local2.__get__key();
mixer.startSong("main", levelData[currentLevel].key, true);
if (currentLevel == 0) {
return(undefined);
}
_local2 = se.salomonsson.data.LevelParser(levelData[currentLevel]);
sendUpdate({subject:"onLevelWrapped", value:_local2});
}
function setBoost(_state) {
boost = _state;
}
function getSprite() {
return(spriteName);
}
function getGravity() {
return(gravity);
}
function setGravity(_g) {
gravity = _g;
sendUpdate({subject:"gravity", value:gravity});
}
function setBgTile(tileId) {
sendUpdate({subject:"changeBg", value:tileId});
}
function setGameOverMessage(s) {
if (s == undefined) {
return(undefined);
}
gameOverMessage = s;
}
function setScore(s) {
distance = s;
}
function setSpeed(_num) {
targetSpeed = _num;
}
function getSpeed() {
return(targetSpeed);
}
function getTimeLine() {
return(tl);
}
function getDepth(_d) {
switch (_d) {
case "bg" :
return(1);
case "smoke" :
return(2);
case "enemies" :
return(3);
case "walls" :
return(4);
case "sprite" :
return(5);
case "fg" :
return(6);
case "hiscore" :
return(7);
case "gui" :
return(8);
case "splashscreen" :
return(9);
case "fakeMask" :
return(10);
}
}
function addView(_v) {
var _local2 = 0;
while (_local2 < views.length) {
if (views[_local2] == _v) {
return(false);
}
_local2++;
}
views.push(_v);
return(true);
}
function addController(_c) {
var _local2 = 0;
while (_local2 < controllers.length) {
if (controllers[_local2] == _c) {
return(false);
}
_local2++;
}
controllers.push(_c);
return(true);
}
function sendUpdate(_obj) {
var _local2 = views.length;
while (_local2 >= 0) {
views[_local2].update(_obj, this);
_local2--;
}
}
var namespace = new Array("grav", "model");
var w = 500;
var h = 300;
var gravity = 0.15;
var gameOverMessage = "Oops, bye bye!";
var boost = false;
var boostSpeed = 0.4;
var maxYspeed = 4;
static var instance = null;
}
Symbol 377 MovieClip [__Packages.se.salomonsson.grav.View] Frame 0
class se.salomonsson.grav.View extends GameBase
{
var myModel, myController;
function View (_model, _controller) {
super();
trace("View called: " + _controller);
myModel = _model;
myController = _controller;
myController.setModel(myModel);
myController.setView(this);
}
function update(_infoObj, _m) {
}
var namespace = new Array("grav", "View");
}
Symbol 378 MovieClip [__Packages.se.salomonsson.grav.Controller] Frame 0
class se.salomonsson.grav.Controller
{
var myModel, myView;
function Controller () {
}
function setModel(_m) {
myModel = _m;
}
function setView(_v) {
trace("View set to: " + _v);
myView = _v;
}
}
Symbol 379 MovieClip [__Packages.se.salomonsson.grav.GameView] Frame 0
class se.salomonsson.grav.GameView extends se.salomonsson.grav.View
{
var myModel, smokes, hero, heroH, heroW, smokeHolder, explosionBitmap, explosionParticles, explosionTimer, myController;
function GameView (_model, _controller) {
super(_model, _controller);
myModel.getTimeLine().gotoAndStop("game");
smokes = new Array();
createPlayer();
createSmoke();
}
function createPlayer() {
var _local2 = myModel.getSprite();
var _local3 = myModel.getDepth("sprite");
var _local4 = myModel.getTimeLine();
hero = _local4.attachMovie(_local2, _local2, _local3);
heroH = hero._height;
heroW = hero._width;
render();
}
function createSmoke() {
var _local2 = myModel.getDepth("smoke");
var _local3 = myModel.getTimeLine();
smokeHolder = _local3.createEmptyMovieClip("smokeHolder", _local2);
}
function onSpriteEnterFrame() {
setSmoke();
render();
checkCollision();
}
function render() {
hero._x = myModel.x;
hero._y = myModel.y;
hero._rotation = myModel.angle;
}
function checkCollision() {
var _local12 = myModel.angle;
var _local2 = (_local12 * Math.PI) / 180;
var _local6 = myModel.x;
var _local5 = myModel.y;
var _local4 = Math.cos;
var _local3 = Math.sin;
var _local11 = _local6 + (_local4(_local2) * 15);
var _local9 = _local5 + (_local3(_local2) * 15);
if (myModel.checkCollision(_local11, _local9)) {
return(undefined);
}
var _local10 = _local6 + (_local4(3.700098 + _local2) * 8);
var _local7 = _local5 + (_local3(3.700098 + _local2) * 8);
if (myModel.checkCollision(_local10, _local7)) {
return(undefined);
}
var _local8 = _local6 + (_local4(2.5830873 + _local2) * 8);
var _local13 = _local5 + (_local3(2.5830873 + _local2) * 8);
if (myModel.checkCollision(_local8, _local13)) {
return(undefined);
}
}
function setSpeed(_num) {
speed = _num;
}
function setSmoke() {
if (((++smokeCounter) % 4) == 0) {
var _local4 = smokeHolder.getNextHighestDepth();
var _local3 = smokeHolder.attachMovie("smoke", "smoke" + _local4, _local4);
_local3._x = myModel.x;
_local3._y = myModel.y;
smokes.push(_local3);
}
if ((smokes[0]._currentframe == smokes[0]._totalframes) || (smokes[0]._x < -10)) {
smokes[0].removeMovieClip();
smokes.shift();
}
var _local2 = smokes.length;
while (_local2 >= 0) {
smokes[_local2]._x = smokes[_local2]._x - speed;
_local2--;
}
}
function setScore() {
distanceCounter = distanceCounter + speed;
}
function die() {
var _local2 = new Color(hero);
_local2.setRGB(1032858);
se.salomonsson.utils.Delay.create(this, explodeShip, 20);
}
function explodeShip() {
var _local12 = modules.musicmixer.MusicMixer(SConsole.module("musicmixer"));
_local12.startFX("explode", 1, 60);
hero = myModel.getTimeLine().createEmptyMovieClip("explosion", myModel.getDepth("sprite"));
var _local11 = 200;
var _local10 = 200;
explosionBitmap = new flash.display.BitmapData(_local11, _local10, true, 1032858);
hero.attachBitmap(explosionBitmap, 1);
var _local15 = 2;
var _local14 = 2;
var _local13 = 2;
hero._x = myModel.x - (_local11 / 2);
hero._y = myModel.y - (_local10 / 2);
var _local9 = _local11 / 2;
var _local8 = _local10 / 2;
explosionParticles = new Array();
var _local3 = 400;
while (_local3 >= 0) {
var _local2 = new Object();
var _local7 = (Math.random() * Math.PI) * 2;
var _local5 = (Math.random() * 6) + 4;
var _local6 = Math.cos(_local7);
var _local4 = Math.sin(_local7);
_local2.speed = Math.random() * 5;
_local2.xSpeed = _local6;
_local2.ySpeed = _local4;
_local2.x = _local6 * _local5;
_local2.y = _local4 * _local5;
_local2.life = random(10) + 10;
explosionBitmap.setPixel32(_local2.x + _local9, _local2.y + _local8, 4279222938);
explosionParticles.push(_local2);
_local3--;
}
explosionTimer = setInterval(mx.utils.Delegate.create(this, explodeLoop), 20);
}
function explodeLoop() {
explosionBitmap.fillRect(new flash.geom.Rectangle(0, 0, 200, 200), 0);
if (explosionParticles.length == 0) {
trace("Explosion done");
clearInterval(explosionTimer);
se.salomonsson.utils.Delay.create(myModel, myModel.endGame, 1200);
}
var _local3 = explosionParticles.length;
while (_local3 >= 0) {
var _local2 = explosionParticles[_local3];
_local2.speed = _local2.speed * 0.93;
_local2.x = _local2.x + (_local2.xSpeed * _local2.speed);
_local2.y = _local2.y + (_local2.ySpeed * _local2.speed);
_local2.life--;
explosionBitmap.setPixel32(_local2.x + 100, _local2.y + 100, 4279222938);
if (_local2.life <= 0) {
explosionParticles.splice(_local3, 1);
}
_local3--;
}
}
function setPause(flag) {
var _local2 = 0;
while (_local2 < smokes.length) {
if (flag) {
smokes[_local2].stop();
} else {
smokes[_local2].play();
}
_local2++;
}
}
function update(_infoObj, _m) {
switch (_infoObj.subject) {
case "speed" :
setSpeed(_infoObj.value);
break;
case "enterFrame" :
onSpriteEnterFrame();
break;
case "gravity" :
myModel.getGravity();
break;
case "destroy" :
destroy();
break;
case "pause" :
setPause(_infoObj.value);
}
}
function destroy() {
hero.removeMovieClip();
smokeHolder.removeMovieClip();
var _local2 = myController;
_local2.destroy();
}
var speed = 0;
var distanceCounter = 0;
var smokeCounter = 0;
}
Symbol 380 MovieClip [__Packages.se.salomonsson.utils.Delay] Frame 0
class se.salomonsson.utils.Delay
{
var intervalId;
function Delay () {
}
function getInstance() {
return(new se.salomonsson.utils.Delay());
}
static function create(caller, callback, delay) {
if (arguments.length < 3) {
return(undefined);
}
var _local2 = new se.salomonsson.utils.Delay();
_local2.setup(arguments);
}
function setup(arg) {
var _local2 = arg[2];
intervalId = setInterval(se.salomonsson.utils.Proxy.create(this, callDelay), _local2, arg);
}
function callDelay(arg) {
if (abort) {
return(undefined);
}
var _local4 = arg[0];
var _local3 = arg[1];
var _local5 = arg.slice(3, arg.length + 1);
_local3.apply(_local4, _local5);
clearInterval(intervalId);
}
static var abort = false;
}
Symbol 381 MovieClip [__Packages.se.salomonsson.utils.Proxy] Frame 0
class se.salomonsson.utils.Proxy
{
function Proxy () {
}
static function create(callTarget, callFunction) {
var parameters = new Array();
var _local2 = 2;
while (_local2 < arguments.length) {
parameters.push(arguments[_local2]);
_local2++;
}
var _local4 = function () {
var _local2 = arguments.concat(parameters);
_local2.push(arguments.callee);
callFunction.apply(callTarget, _local2);
};
return(_local4);
}
static function exec(callTarget, callFunction) {
var parameters = new Array();
var _local2 = 2;
while (_local2 < arguments.length) {
parameters.push(arguments[_local2]);
_local2++;
}
var _local4 = function () {
var _local2 = arguments.concat(parameters);
_local2.push(arguments.callee);
callFunction.apply(callTarget, _local2);
};
_local4();
}
}
Symbol 382 MovieClip [__Packages.se.salomonsson.grav.BackgroundView] Frame 0
class se.salomonsson.grav.BackgroundView extends se.salomonsson.grav.View
{
var w, myModel, h, firstRun, tiles, scrollContainer, sTrace, tileX;
function BackgroundView (_model, _controller) {
super(_model, _controller);
w = myModel.w;
h = myModel.h;
firstRun = true;
}
function init() {
tiles = new Array();
var _local2 = myModel.getTimeLine();
var _local3 = myModel.getDepth("bg");
scrollContainer = _local2.createEmptyMovieClip("backgroundContainer", _local3);
sTrace("init with currentTile " + currentTileId);
if (currentTileId == null) {
currentTileId = "tile1";
}
tileX = 0;
while (scrollContainer._width < w) {
addTile();
}
}
function setSpeed(s) {
speed = s;
}
function setTile(tileId) {
currentTileId = tileId;
}
function addTile() {
var _local3 = scrollContainer.getNextHighestDepth();
var _local2 = scrollContainer.createEmptyMovieClip("bg_" + _local3, _local3);
var _local4 = flash.display.BitmapData.loadBitmap(currentTileId);
_local2._x = tileX;
_local2.attachBitmap(_local4, 1);
tileX = tileX + _local4.width;
tiles.push(_local2);
}
function removeTile() {
var _local2 = MovieClip(tiles.shift());
_local2.removeMovieClip();
}
function scrollBg() {
scrollContainer._x = scrollContainer._x - (speed / 2);
if (tileX < ((-scrollContainer._x) + w)) {
addTile();
}
var _local2 = tiles[0];
if ((_local2._x + _local2._width) < (-scrollContainer._x)) {
removeTile();
}
}
function fade(dir) {
var _local2 = ((dir == "in") ? 0 : 100);
var _local3 = ((dir == "in") ? 100 : 0);
var _local4 = new mx.transitions.Tween(scrollContainer, "_alpha", mx.transitions.easing.None.easeNone, _local2, _local3, 1, true);
}
function update(infoObj, m) {
switch (infoObj.subject) {
case "speed" :
setSpeed(infoObj.value);
break;
case "enterFrame" :
scrollBg();
break;
case "changeBg" :
setTile(infoObj.value);
break;
case "levelUp" :
if (firstRun) {
scrollContainer.removeMovieClip();
init();
firstRun = false;
} else {
fade("out");
}
break;
case "onLevelWrapped" :
init();
fade("in");
break;
case "destroy" :
destroy();
}
}
function destroy() {
scrollContainer.removeMovieClip();
}
var namespace = new Array("grav", "BackgroundView");
var currentTileId = "tile1";
var speed = 0;
}
Symbol 383 MovieClip [__Packages.se.salomonsson.grav.WallView] Frame 0
class se.salomonsson.grav.WallView extends se.salomonsson.grav.View
{
var w, myModel, h, roofH, floorH, currentRoofY, currentFloorY, up_mcs, dn_mcs, en_mcs, wallMc, scrollContainer, wallStroke, enemyHolder, wallFill, levelUpWrapX, levelData, piecesOnScreen, sTrace, level, up, dn, en_objArr, grav_objArr, speed_objArr, msg_objArr, tile_objArr;
function WallView (_model, _controller) {
super(_model, _controller);
w = myModel.w;
h = myModel.h;
roofH = {top:10, bottom:100};
floorH = {top:290, bottom:300};
currentRoofY = roofH.top;
currentFloorY = floorH.top;
up_mcs = new Array();
dn_mcs = new Array();
en_mcs = new Array();
wallMc = myModel.getTimeLine().createEmptyMovieClip("wall", myModel.getDepth("walls"));
scrollContainer = wallMc.createEmptyMovieClip("scrollContainer", wallMc.getNextHighestDepth());
wallStroke = scrollContainer.createEmptyMovieClip("wallStroke", scrollContainer.getNextHighestDepth());
enemyHolder = scrollContainer.createEmptyMovieClip("enemyHolder", scrollContainer.getNextHighestDepth());
wallFill = scrollContainer.createEmptyMovieClip("wallFill", scrollContainer.getNextHighestDepth());
levelUpWrapX = null;
}
function setLevelData(levelData) {
this.levelData = levelData;
onLevelUp(0);
piecesOnScreen = Math.ceil(w / splitW) + 1;
var _local2 = 0;
while (_local2 < piecesOnScreen) {
buildWall(_local2 * splitW);
_local2++;
}
}
function onLevelUp(l) {
sTrace("parse new level: " + l);
level = l;
var _local2 = levelData[level].levelData;
up = _local2.up;
dn = _local2.dn;
en_objArr = se.salomonsson.collections.ObjectArray(_local2.en);
grav_objArr = se.salomonsson.collections.ObjectArray(_local2.gravitys);
speed_objArr = se.salomonsson.collections.ObjectArray(_local2.speeds);
msg_objArr = se.salomonsson.collections.ObjectArray(_local2.texts);
tile_objArr = se.salomonsson.collections.ObjectArray(_local2.tiles);
var _local3 = up_mcs[up_mcs.length - 1][0];
levelUpWrapX = _local3._x + _local3._width;
myModel.setGameOverMessage(_local2.data.getValue("gameOverText"));
var _local4 = tile_objArr.getValue("0");
if (_local4 != null) {
myModel.setBgTile(_local4);
}
}
function getWallMc() {
return(wallMc);
}
function buildWall(x, forceStart) {
var _local5 = wallFill.getNextHighestDepth();
var _local7 = wallFill.createEmptyMovieClip("r_" + _local5, _local5);
var _local8 = wallFill.createEmptyMovieClip("f_" + (_local5 + 1), _local5 + 1);
var _local10 = wallStroke.createEmptyMovieClip("r_" + _local5, _local5);
var _local9 = wallStroke.createEmptyMovieClip("r_" + (_local5 + 1), _local5 + 1);
var _local13 = Math.floor(x / splitW) - levelOffset;
var _local19 = String(_local13);
var _local12 = String(_local13 - piecesOnScreen);
_local7._x = (_local8._x = (_local10._x = (_local9._x = x)));
var _local14;
var _local11;
if (forceStart) {
_local14 = roofH.top;
_local11 = floorH.top;
} else {
_local14 = up[_local13];
_local11 = dn[_local13];
}
_local7.beginFill(0, 100);
_local7.moveTo(0, 0);
_local7.lineTo(0, currentRoofY);
_local7.lineTo(splitW, _local14);
_local7.lineTo(splitW, 0);
_local7.lineTo(0, 0);
_local7.endFill();
_local8.beginFill(0, 100);
_local8.moveTo(0, h);
_local8.lineTo(0, currentFloorY);
_local8.lineTo(splitW, _local11);
_local8.lineTo(splitW, h);
_local8.lineTo(0, h);
_local8.endFill();
_local10.lineStyle(5, drawCol, 100);
_local10.moveTo(0, currentRoofY);
_local10.lineTo(splitW, _local14);
_local9.lineStyle(5, drawCol, 100);
_local9.moveTo(0, currentFloorY);
_local9.lineTo(splitW, _local11);
up_mcs.push([_local7, _local10]);
dn_mcs.push([_local8, _local9]);
var _local6 = en_objArr.getValue(_local19);
if (_local6 != null) {
var _local4 = 0;
while (_local4 < _local6.length) {
var _local3 = se.salomonsson.grav.Enemy(_local6[_local4]);
_local5 = enemyHolder.getNextHighestDepth();
var _local2 = enemyHolder.attachMovie("enemy" + _local3.type, "enemy_" + _local5, _local5);
_local2._x = ((Number(_local3.x) + 1) + levelOffset) * splitW;
_local2._y = _local3.y;
_local2.gotoAndStop(1);
en_mcs.push(_local2);
_local4++;
}
}
var _local18 = msg_objArr.getValue(_local12);
if (_local18 != null) {
myModel.message(_local18);
}
var _local17 = grav_objArr.getValue(_local12);
if (_local17 != null) {
myModel.setGravity(Number(_local17));
}
var _local16 = speed_objArr.getValue(_local12);
if (_local16 != null) {
myModel.setSpeed(Number(_local16));
}
currentRoofY = _local14;
currentFloorY = _local11;
var _local15 = String(tile_objArr.getValue(_local12));
if ((_local15 != null) && (_local15 != "null")) {
myModel.setBgTile(_local15);
}
}
function scrollWalls() {
scrollContainer._x = scrollContainer._x - speed;
if (levelUpWrapX != null) {
if (scrollContainer._x <= (-levelUpWrapX)) {
myModel.onLevelWrapped();
levelUpWrapX = null;
}
}
var _local2 = up_mcs[up_mcs.length - 1][0];
var _local7 = up_mcs[0][0];
var _local8 = (_local2._x + splitW) + scrollContainer._x;
if (_local8 < w) {
buildWall(_local2._x + splitW);
}
_local8 = (_local7._x + splitW) + scrollContainer._x;
if (_local8 < 0) {
var _local6 = up_mcs.shift();
var _local5 = dn_mcs.shift();
_local6[0].removeMovieClip();
_local6[1].removeMovieClip();
_local5[0].removeMovieClip();
_local5[1].removeMovieClip();
}
if (en_mcs.length > 0) {
var _local4 = en_mcs[0];
if (((_local4._x + _local4._width) + scrollContainer._x) < 0) {
_local4.removeMovieClip();
en_mcs.shift();
}
}
var _local3 = (Math.floor(_local2._x / splitW) - levelOffset) + 1;
if ((up.length <= _local3) || (dn.length <= _local3)) {
levelOffset = levelOffset + _local3;
myModel.levelUpdate();
}
}
function checkCollision(x, y) {
if (wallMc.hitTest(x, y, true)) {
return(true);
}
return(false);
}
function setSpeed(_num) {
speed = _num;
}
function update(_infoObj, _m) {
switch (_infoObj.subject) {
case "speed" :
setSpeed(_infoObj.value);
break;
case "enterFrame" :
scrollWalls();
animateEnemies();
break;
case "levelUp" :
onLevelUp(_infoObj.value);
break;
case "destroy" :
destroy();
}
}
function animateEnemies() {
var _local2 = en_mcs.length - 1;
while (_local2 >= 0) {
en_mcs[_local2].nextFrame();
_local2--;
}
}
function destroy() {
var _local2 = 0;
while (_local2 < up_mcs.length) {
up_mcs[_local2][0].removeMovieClip();
up_mcs[_local2][1].removeMovieClip();
dn_mcs[_local2][0].removeMovieClip();
dn_mcs[_local2][1].removeMovieClip();
_local2++;
}
_local2 = 0;
while (_local2 < en_mcs.length) {
en_mcs[_local2].removeMovieClip();
_local2++;
}
delete up_mcs;
delete dn_mcs;
delete en_mcs;
scrollContainer.removeMovieClip();
wallMc.removeMovieClip();
}
var namespace = new Array("grav", "WallView");
var levelCnt = 1;
var levelOffset = 0;
var speed = 0;
var drawCol = 1032858;
var splitW = 40;
}
Symbol 384 MovieClip [__Packages.se.salomonsson.collections.ObjectArray] Frame 0
class se.salomonsson.collections.ObjectArray
{
var len, data;
function ObjectArray () {
clear();
}
function clear() {
len = 0;
data = new Object();
}
function addValue(key, value) {
if (data[key] == undefined) {
len++;
}
data[key] = value;
}
function getValue(key) {
if (data[key] != undefined) {
return(data[key]);
}
return(null);
}
function deleteValue(key) {
if (data[key] != undefined) {
delete data[key];
len--;
return(true);
}
return(false);
}
function count() {
return(len);
}
function getKey(index) {
var _local2 = new Array();
for (var _local3 in data) {
_local2.push(_local3);
}
return(_local2[index]);
}
}
Symbol 385 MovieClip [__Packages.se.salomonsson.grav.Enemy] Frame 0
class se.salomonsson.grav.Enemy
{
var x, y, type;
function Enemy (x, y, type) {
this.x = x;
this.y = y;
this.type = type;
}
}
Symbol 386 MovieClip [__Packages.se.salomonsson.grav.GUIView] Frame 0
class se.salomonsson.grav.GUIView extends se.salomonsson.grav.View
{
var myModel, guiHolder, dist, msg, writingMessag, messageCountdown, messageString, intervalId;
function GUIView (_model, _controller) {
super(_model, _controller);
initGUI();
}
function initGUI() {
var _local2 = myModel.getDepth("gui");
var _local5 = myModel.getTimeLine();
guiHolder = _local5.createEmptyMovieClip("gui", _local2);
var _local11 = 2;
var _local4 = 5;
var _local3 = 279;
var _local10 = 320;
var _local9 = 20;
dist = new ui.Text(guiHolder, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 14, 16777215);
dist.__get__movieClip()._x = _local4;
dist.__get__movieClip()._y = _local3;
score = 0;
var _local8 = 3;
var _local7 = 5;
var _local6 = 0;
var _local12 = 0;
var _local13 = 0;
msg = new ui.Text(guiHolder, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 16, 16777215);
msg.__get__movieClip()._x = _local7;
msg.__get__movieClip()._y = _local6;
writingMessag = false;
dist.__set___text("Distance: 0");
}
function onSpriteEnterFrame() {
var _local3 = Math.abs((myModel.angle / 180) * Math.PI);
var _local4 = speed / Math.cos(_local3 * 1.7);
score = score + _local4;
var _local2 = int(score / 10);
myModel.setScore(_local2);
dist.__set___text("Distance: " + _local2);
}
function chechMessage() {
if (writingMessag) {
messageLoop();
}
}
function startMessage() {
writingMessag = true;
messageCountdown = 100;
msg.__set___text("");
startTextInterval();
}
function messageLoop() {
var _local2 = msg.__get___text().length;
if (_local2 == messageString.length) {
if ((--messageCountdown) == 0) {
endMessage();
}
} else {
msg.__set___text(messageString.substr(0, _local2 + 1));
}
}
function endMessage() {
msg.__set___text("");
messageString = "";
writingMessag = false;
clearInterval(intervalId);
}
function startTextInterval() {
clearInterval(intervalId);
intervalId = setInterval(utils.Proxy.create(this, chechMessage), 28.5714285714286);
}
function setPause(flag) {
if (flag) {
clearInterval(intervalId);
} else if (writingMessag) {
startTextInterval();
}
}
function update(_infoObj, _m) {
switch (_infoObj.subject) {
case "speed" :
speed = _infoObj.value;
break;
case "enterFrame" :
onSpriteEnterFrame();
break;
case "destroy" :
destroy();
break;
case "message" :
messageString = _infoObj.value;
startMessage();
break;
case "pause" :
setPause(_infoObj.value);
}
}
function destroy() {
endMessage();
guiHolder.removeMovieClip();
}
var distCounter = 0;
var speed = 0;
var score = 0;
}
Symbol 387 MovieClip [__Packages.se.salomonsson.grav.GameController] Frame 0
class se.salomonsson.grav.GameController extends se.salomonsson.grav.Controller
{
var k, myModel;
function GameController () {
super();
k = new Object();
k.onKeyDown = mx.utils.Delegate.create(this, spaceDown);
k.onKeyUp = mx.utils.Delegate.create(this, spaceUp);
Key.addListener(k);
}
function spaceDown() {
if (Key.getCode() == 32) {
myModel.setBoost(true);
}
}
function spaceUp() {
if (!Key.isDown(32)) {
myModel.setBoost(false);
}
}
function destroy() {
Key.removeListener(k);
}
}
Symbol 388 MovieClip [__Packages.se.salomonsson.data.LevelParser] Frame 0
class se.salomonsson.data.LevelParser extends GameBase
{
var src, taskStatus, sTrace;
function LevelParser () {
super();
levelData = new Object();
}
function get data() {
return(levelData);
}
function get key() {
return(src);
}
function parseData(src, taskStatus) {
generateLevel(src, taskStatus);
}
function generateLevel(src, taskStatus) {
this.src = src;
this.taskStatus = taskStatus;
switch (this.src) {
case Constants.LEVEL1 :
onDataSet(LevelData.__get__level1());
break;
case Constants.LEVEL2 :
onDataSet(LevelData.__get__level2());
break;
case Constants.LEVEL3 :
onDataSet(LevelData.__get__level3());
}
}
function onDataSet(ds) {
if (ds == null) {
levelData = null;
taskStatus.completed();
return(undefined);
}
var _local9 = new Array();
var _local10 = new Array();
var _local8 = new se.salomonsson.collections.ObjectArray();
var _local14 = new se.salomonsson.collections.ObjectArray();
var _local13 = new se.salomonsson.collections.ObjectArray();
var _local12 = new se.salomonsson.collections.ObjectArray();
var _local11 = new se.salomonsson.collections.ObjectArray();
var _local15 = new se.salomonsson.collections.ObjectArray();
parseNode(_local14, ds.data.texts[0].text, "texts");
parseNode(_local13, ds.data.speeds[0].speed, "speeds");
parseNode(_local12, ds.data.gravitys[0].gravity, "gravitys");
parseNode(_local15, ds.data.tiles[0].tile, "tiles");
var _local3 = 0;
while (_local3 < ds.data.walls[0].x.length) {
_local9.push(Number(ds.data.walls[0].x[_local3].up));
_local10.push(Number(ds.data.walls[0].x[_local3].dn));
_local3++;
}
_local3 = 0;
while (_local3 < ds.data.enemies[0].enemy.length) {
var _local5 = ds.data.enemies[0].enemy[_local3].x;
var _local6 = ds.data.enemies[0].enemy[_local3].y;
var _local7 = ds.data.enemies[0].enemy[_local3].type;
var _local4 = _local8.getValue(String(_local5));
if (_local4 == null) {
_local4 = new Array();
}
_local4.push(new se.salomonsson.grav.Enemy(_local5, _local6, _local7));
_local8.addValue(String(_local5), _local4);
_local3++;
}
_local11.addValue("splitNum", Number(ds.data.data[0].splitNum[0].value));
_local11.addValue("gameOverText", ds.data.data[0].gameovertext[0].value);
levelData = new Object();
levelData.up = _local9;
levelData.dn = _local10;
levelData.en = _local8;
levelData.texts = _local14;
levelData.speeds = _local13;
levelData.gravitys = _local12;
levelData.data = _local11;
levelData.src = src;
levelData.tiles = _local15;
sTrace("**LevelParser.parseCompleted**");
taskStatus.completed();
}
function parseNode(objArray, node, tmpStr) {
var _local1 = 0;
while (_local1 < node.length) {
objArray.addValue(node[_local1].x, node[_local1].value);
_local1++;
}
}
var namespace = new Array("data", "LevelParser");
var levelData = null;
static var success = true;
}
Symbol 389 MovieClip [__Packages.LevelData] Frame 0
class LevelData extends GameBase
{
static var _level1, _level2, _level3, _parsedLevel1, _parsedLevel2, _parsedLevel3;
function LevelData () {
super();
_level1 = new Object();
_level1.gameovertext = "Ouch... Practice makes perfect?";
_level1.texts = "Approaching Taymyr Industrial. Get ready!%617%\u00A4Wow, you completed the first course!%604%\u00A4You have done really well so far!%453%\u00A4Aah, look... Droids! How cute!%272%\u00A4Avoid crashing into them... %84%\u00A4East Altai is known for it's cubic buildings%67%\u00A4Beware of falling spikes!%163%\u00A4Hold SPACE BAR to add thrust%0%\u00A4Spikes again, and droids! Keep low!%340%\u00A4East Altai is one of the easier routes of Siberia...%31%\u00A4Now it's getting a bit narrow, keep your head cool%118%\u00A4Although, nothing is really EASY in Siberia..%47%\u00A4Cubic inferno%486";
_level1.speeds = "6%0";
_level1.gravitys = "0.2%0";
_level1.walls = "247%42%\u00A4252%44%\u00A4251%48%\u00A4251%41%\u00A4246%41%\u00A4246%40%\u00A4258%35%\u00A4258%37%\u00A4241%58%\u00A4245%45%\u00A4243%43%\u00A4237%50%\u00A4253%47%\u00A4253%47%\u00A4241%50%\u00A4213%89%\u00A4247%55%\u00A4247%48%\u00A4232%55%\u00A4233%60%\u00A4233%59%\u00A4248%48%\u00A4248%48%\u00A4203%78%\u00A4236%55%\u00A4217%50%\u00A4215%43%\u00A4232%57%\u00A4232%59%\u00A4270%53%\u00A4270%54%\u00A4280%39%\u00A4282%22%\u00A4282%21%\u00A4279%36%\u00A4259%57%\u00A4269%63%\u00A4248%64%\u00A4231%49%\u00A4241%30%\u00A4241%45%\u00A4259%31%\u00A4249%31%\u00A4218%59%\u00A4246%57%\u00A4256%39%\u00A4230%46%\u00A4248%75%\u00A4241%75%\u00A4267%72%\u00A4238%60%\u00A4266%42%\u00A4245%63%\u00A4265%51%\u00A4284%130%\u00A4283%124%\u00A4275%65%\u00A4264%23%\u00A4246%14%\u00A4290%11%\u00A4292%11%\u00A4294%11%\u00A4293%11%\u00A4292%13%\u00A4283%22%\u00A4267%50%\u00A4255%125%\u00A4263%84%\u00A4277%43%\u00A4262%25%\u00A4282%16%\u00A4283%13%\u00A4282%13%\u00A4281%12%\u00A4281%13%\u00A4281%15%\u00A4280%20%\u00A4273%33%\u00A4260%82%\u00A4253%109%\u00A4266%87%\u00A4275%55%\u00A4277%44%\u00A4277%45%\u00A4273%49%\u00A4270%60%\u00A4261%79%\u00A4240%121%\u00A4206%127%\u00A4237%93%\u00A4255%88%\u00A4261%91%\u00A4259%107%\u00A4241%115%\u00A4223%98%\u00A4221%78%\u00A4242%69%\u00A4246%65%\u00A4243%62%\u00A4239%61%\u00A4233%65%\u00A4225%75%\u00A4212%80%\u00A4210%79%\u00A4243%52%\u00A4269%31%\u00A4271%31%\u00A4258%41%\u00A4222%110%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%16%\u00A4280%20%\u00A4204%92%\u00A4204%92%\u00A4204%92%\u00A4204%92%\u00A4195%58%\u00A4235%70%\u00A4196%88%\u00A4254%60%\u00A4205%100%\u00A4206%100%\u00A4243%87%\u00A4200%65%\u00A4248%74%\u00A4231%100%\u00A4231%98%\u00A4194%84%\u00A4193%83%\u00A4195%82%\u00A4197%81%\u00A4190%87%\u00A4165%93%\u00A4182%105%\u00A4175%108%\u00A4175%101%\u00A4197%112%\u00A4181%109%\u00A4181%107%\u00A4185%101%\u00A4189%101%\u00A4189%108%\u00A4190%102%\u00A4176%104%\u00A4195%104%\u00A4211%129%\u00A4199%134%\u00A4189%121%\u00A4190%111%\u00A4192%119%\u00A4196%119%\u00A4181%119%\u00A4191%116%\u00A4205%128%\u00A4221%146%\u00A4215%142%\u00A4241%155%\u00A4248%173%\u00A4247%172%\u00A4260%172%\u00A4253%172%\u00A4241%171%\u00A4241%159%\u00A4219%142%\u00A4224%147%\u00A4213%128%\u00A4194%103%\u00A4268%95%\u00A4283%94%\u00A4281%68%\u00A4274%64%\u00A4273%51%\u00A4277%43%\u00A4276%42%\u00A4277%43%\u00A4284%84%\u00A4291%100%\u00A4291%103%\u00A4289%95%\u00A4283%86%\u00A4290%59%\u00A4263%37%\u00A4186%24%\u00A4139%20%\u00A4127%20%\u00A4127%20%\u00A4131%20%\u00A4147%20%\u00A4270%20%\u00A4269%20%\u00A4270%20%\u00A4270%20%\u00A4271%21%\u00A4270%31%\u00A4270%81%\u00A4271%161%\u00A4267%178%\u00A4259%175%\u00A4259%171%\u00A4275%179%\u00A4271%159%\u00A4273%166%\u00A4265%167%\u00A4262%169%\u00A4259%176%\u00A4252%176%\u00A4249%171%\u00A4249%165%\u00A4248%149%\u00A4267%22%\u00A4271%24%\u00A4217%98%\u00A4272%30%\u00A4273%29%\u00A4266%173%\u00A4269%29%\u00A4263%27%\u00A4257%31%\u00A4182%68%\u00A4260%38%\u00A4241%38%\u00A4249%146%\u00A4242%77%\u00A4242%47%\u00A4226%53%\u00A4226%89%\u00A4199%117%\u00A4200%120%\u00A4203%123%\u00A4195%122%\u00A4203%120%\u00A4204%117%\u00A4203%116%\u00A4207%117%\u00A4207%117%\u00A4209%118%\u00A4209%118%\u00A4209%118%\u00A4254%79%\u00A4254%79%\u00A4254%79%\u00A4254%79%\u00A4254%79%\u00A4254%79%\u00A4254%79%\u00A4209%124%\u00A4209%124%\u00A4209%124%\u00A4209%82%\u00A4168%39%\u00A4151%39%\u00A4151%39%\u00A4151%20%\u00A4151%20%\u00A4151%20%\u00A4151%20%\u00A4150%40%\u00A4162%40%\u00A4206%40%\u00A4223%120%\u00A4238%132%\u00A4267%120%\u00A4267%120%\u00A4267%120%\u00A4267%120%\u00A4267%120%\u00A4251%138%\u00A4251%138%\u00A4270%117%\u00A4240%71%\u00A4254%89%\u00A4240%28%\u00A4259%32%\u00A4226%28%\u00A4254%57%\u00A4185%23%\u00A4231%28%\u00A4214%39%\u00A4170%66%\u00A4238%62%\u00A4261%80%\u00A4233%75%\u00A4260%51%\u00A4253%56%\u00A4211%34%\u00A4257%46%\u00A4234%39%\u00A4219%100%\u00A4240%48%\u00A4228%65%\u00A4258%65%\u00A4218%121%\u00A4246%53%\u00A4219%25%\u00A4252%73%\u00A4213%99%\u00A4250%76%\u00A4235%33%\u00A4248%71%\u00A4184%69%\u00A4151%24%\u00A4133%39%\u00A4133%32%\u00A4170%39%\u00A4145%20%\u00A4158%20%\u00A4133%37%\u00A4159%65%\u00A4149%48%\u00A4196%89%\u00A4217%63%\u00A4244%104%\u00A4240%111%\u00A4264%163%\u00A4279%112%\u00A4279%88%\u00A4238%105%\u00A4279%161%\u00A4279%158%\u00A4234%100%\u00A4265%78%\u00A4184%84%\u00A4162%52%\u00A4178%53%\u00A4146%89%\u00A4152%77%\u00A4136%61%\u00A4135%70%\u00A4135%58%\u00A4280%56%\u00A4242%85%\u00A4241%79%\u00A4168%79%\u00A4246%79%\u00A4265%55%\u00A4234%55%\u00A4235%73%\u00A4261%69%\u00A4261%82%\u00A4235%78%\u00A4239%54%\u00A4225%54%\u00A4225%85%\u00A4246%85%\u00A4255%41%\u00A4247%35%\u00A4278%35%\u00A4273%48%\u00A4272%46%\u00A4276%46%\u00A4276%43%\u00A4257%77%\u00A4271%62%\u00A4276%54%\u00A4249%48%\u00A4271%74%\u00A4271%62%\u00A4269%47%\u00A4273%38%\u00A4275%53%\u00A4265%72%\u00A4280%44%\u00A4264%67%\u00A4276%39%\u00A4276%47%\u00A4276%45%\u00A4269%45%\u00A4252%73%\u00A4269%48%\u00A4266%32%\u00A4250%16%\u00A4271%15%\u00A4268%12%\u00A4280%20%\u00A4280%44%\u00A4280%31%\u00A4262%27%\u00A4242%27%\u00A4232%27%\u00A4176%23%\u00A4183%58%\u00A4191%76%\u00A4188%77%\u00A4188%77%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4275%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4268%27%\u00A4241%51%\u00A4188%113%\u00A4187%112%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4272%52%\u00A4267%95%\u00A4280%115%\u00A4280%121%\u00A4267%120%\u00A4245%104%\u00A4216%49%\u00A4146%20%\u00A4126%20%\u00A4143%47%\u00A4280%74%\u00A4280%73%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4209%77%\u00A4209%108%\u00A4209%107%\u00A4191%90%\u00A4162%65%\u00A4134%35%\u00A4109%23%\u00A4112%22%\u00A4155%43%\u00A4203%66%\u00A4205%89%\u00A4205%112%\u00A4281%17%\u00A4281%16%\u00A4282%15%\u00A4282%15%\u00A4280%15%\u00A4282%17%\u00A4282%18%\u00A4282%15%\u00A4280%16%\u00A4280%15%\u00A4280%14%\u00A4280%14%\u00A4280%16%\u00A4280%14%\u00A4280%12%\u00A4280%13%\u00A4280%14%\u00A4280%13%\u00A4280%15%\u00A4280%14%\u00A4280%13%\u00A4280%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4278%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%14%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%13%\u00A4280%28%\u00A4280%66%\u00A4280%95%\u00A4280%106%\u00A4280%106%\u00A4280%106%\u00A4280%106%\u00A4280%106%\u00A4280%106%\u00A4280%106%\u00A4280%106%\u00A4280%107%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%34%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%34%\u00A4280%37%\u00A4280%47%\u00A4280%20%\u00A4280%20%\u00A4280%56%\u00A4142%57%\u00A4142%57%\u00A4142%20%\u00A4116%20%\u00A4142%20%\u00A4142%63%\u00A4187%63%\u00A4188%100%\u00A4186%100%\u00A4185%112%\u00A4198%95%\u00A4228%69%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20";
_level1.enemies = "171%67%432%\u00A4143%6%431%\u00A4168%71%431%\u00A4128%29%455%\u00A4173%67%455%\u00A4127%29%433%\u00A4171%67%433%\u00A4150%29%451%\u00A4150%29%437%\u00A4173%29%447%\u00A4173%29%441%\u00A4189%6%445%\u00A4208%69%445%\u00A4156%70%445%\u00A4157%68%442%\u00A4214%71%442%\u00A4169%63%443%\u00A4147%5%443%\u00A4110%5%443%\u00A4145%66%443%\u00A4147%66%443%\u00A4150%67%443%\u00A4217%67%443%\u00A420%66%443%\u00A440%5%443%\u00A4169%63%444%\u00A4147%5%444%\u00A4110%5%444%\u00A4145%66%444%\u00A4147%66%444%\u00A4150%67%444%\u00A4217%67%444%\u00A420%66%444%\u00A420%66%444%\u00A440%5%444%\u00A4144%6%453%\u00A4185%69%453%\u00A4166%6%449%\u00A4209%69%449%\u00A4189%6%439%\u00A4214%71%439%\u00A4166%6%435%\u00A4191%71%435%\u00A4260%70%430%\u00A4230%70%429%\u00A4256%66%429%\u00A4269%66%429%\u00A4254%67%429%\u00A4198%70%428%\u00A4229%66%428%\u00A4257%66%428%\u00A4269%66%428%\u00A4224%67%428%\u00A4254%67%428%\u00A428%69%428%\u00A4192%67%427%\u00A4224%67%427%\u00A4254%67%427%\u00A437%67%427%\u00A4191%67%425%\u00A4213%63%425%\u00A439%66%419%\u00A472%66%419%\u00A4101%71%419%\u00A473%71%419%\u00A444%71%419%\u00A420%71%419%\u00A437%67%419%\u00A4240%63%419%\u00A4206%68%419%\u00A4235%66%419%\u00A4266%66%419%\u00A4242%11%402%\u00A445%67%402%\u00A452%4%413%\u00A424%4%413%\u00A437%67%424%\u00A4191%67%424%\u00A4225%67%424%\u00A4254%67%424%\u00A437%67%423%\u00A4191%67%423%\u00A4255%67%423%\u00A4250%63%423%\u00A4232%68%423%\u00A4265%66%423%\u00A4273%66%423%\u00A437%67%422%\u00A4177%63%422%\u00A4237%66%422%\u00A4270%66%422%\u00A4254%67%422%\u00A437%67%421%\u00A4242%63%421%\u00A4198%68%421%\u00A4233%66%421%\u00A4265%66%421%\u00A437%67%420%\u00A4108%4%420%\u00A480%4%420%\u00A452%4%420%\u00A426%4%420%\u00A4187%63%420%\u00A4246%66%420%\u00A4266%66%420%\u00A4260%68%420%\u00A437%67%418%\u00A437%67%417%\u00A4250%63%417%\u00A442%67%411%\u00A4242%63%411%\u00A442%67%408%\u00A442%67%407%\u00A427%66%409%\u00A450%71%409%\u00A442%67%409%\u00A423%63%415%\u00A439%71%405%\u00A420%66%405%\u00A4129%4%405%\u00A4100%4%405%\u00A470%4%405%\u00A442%4%405%\u00A439%66%396%\u00A459%71%396%\u00A436%69%404%\u00A421%66%404%\u00A433%71%404%\u00A461%71%404%\u00A492%71%404%\u00A4121%71%404%\u00A427%66%404%\u00A458%66%404%\u00A489%66%404%\u00A445%67%403%\u00A445%67%401%\u00A442%71%398%\u00A420%66%398%\u00A425%71%398%\u00A451%71%398%\u00A477%71%398%\u00A445%67%399%\u00A486%4%399%\u00A460%4%399%\u00A432%4%399%\u00A431%63%400%\u00A428%63%406%\u00A4234%13%406%\u00A4218%11%410%\u00A438%63%410%\u00A442%67%410%\u00A4113%26%374%\u00A420%63%205%\u00A4162%67%199%\u00A4203%68%199%\u00A4229%66%199%\u00A4234%67%199%\u00A478%71%203%\u00A444%66%203%\u00A437%66%203%\u00A434%67%203%\u00A4242%63%203%\u00A435%67%201%\u00A4213%68%201%\u00A4244%66%201%\u00A4255%66%201%\u00A4234%67%201%\u00A4271%1%202%\u00A420%63%202%\u00A434%66%110%\u00A464%71%110%\u00A431%67%110%\u00A467%71%119%\u00A434%66%119%\u00A431%67%119%\u00A464%71%116%\u00A432%66%116%\u00A431%67%116%\u00A481%71%113%\u00A448%66%113%\u00A435%66%113%\u00A431%67%113%\u00A428%71%112%\u00A428%71%109%\u00A473%63%100%\u00A451%66%100%\u00A472%63%98%\u00A450%66%98%\u00A487%67%103%\u00A463%71%104%\u00A478%69%104%\u00A451%66%104%\u00A487%67%102%\u00A487%67%101%\u00A487%67%99%\u00A472%63%96%\u00A449%66%96%\u00A4211%11%97%\u00A486%67%97%\u00A482%67%86%\u00A482%67%85%\u00A482%67%84%\u00A453%67%80%\u00A482%67%83%\u00A444%69%83%\u00A452%67%77%\u00A452%67%76%\u00A452%67%75%\u00A4228%11%74%\u00A440%63%74%\u00A444%69%72%\u00A422%66%72%\u00A439%69%68%\u00A448%67%67%\u00A448%67%65%\u00A448%67%64%\u00A448%67%63%\u00A448%67%62%\u00A448%67%61%\u00A435%63%60%\u00A440%63%71%\u00A469%63%82%\u00A453%67%82%\u00A452%63%105%\u00A4215%63%105%\u00A430%66%105%\u00A4274%66%105%\u00A483%71%95%\u00A4226%68%89%\u00A4252%66%89%\u00A488%71%89%\u00A4252%68%89%\u00A450%71%73%\u00A428%66%73%\u00A450%71%70%\u00A424%66%70%\u00A4229%68%30%\u00A477%71%30%\u00A4266%66%30%\u00A448%66%30%\u00A445%71%31%\u00A4261%68%31%\u00A420%66%31%\u00A480%67%31%\u00A4222%67%31%\u00A4228%4%479%\u00A483%4%479%\u00A486%4%473%\u00A4230%4%473%\u00A4220%48%157%\u00A4265%22%414%\u00A434%71%414%\u00A4180%10%412%\u00A433%69%412%\u00A421%66%412%\u00A445%71%412%\u00A420%71%412%\u00A4215%63%412%\u00A4157%26%346%\u00A4163%26%341%\u00A4119%26%327%\u00A440%26%316%\u00A4193%26%308%\u00A478%26%305%\u00A4189%26%297%\u00A481%26%294%\u00A454%26%287%\u00A4163%26%285%\u00A465%26%283%\u00A4164%24%108%\u00A4234%13%81%\u00A479%71%81%\u00A448%66%81%\u00A453%67%81%\u00A4227%10%69%\u00A4223%11%59%\u00A445%71%59%\u00A422%66%59%\u00A4170%4%254%\u00A4171%4%252%\u00A4172%4%250%\u00A485%4%266%\u00A485%4%264%\u00A4152%4%276%\u00A4152%4%274%\u00A4221%17%115%\u00A428%71%115%\u00A420%1%111%\u00A4255%21%111%\u00A443%1%114%\u00A420%1%117%\u00A486%25%181%\u00A471%25%182%\u00A460%25%183%\u00A457%25%184%\u00A457%25%185%\u00A474%25%186%\u00A4101%25%187%\u00A4203%1%200%\u00A432%71%200%\u00A431%1%204%\u00A4152%26%357%\u00A4137%26%359%\u00A4162%26%361%\u00A456%25%361%\u00A4139%26%363%\u00A4175%26%365%\u00A4141%26%367%\u00A444%25%356%\u00A469%25%364%\u00A455%25%368%\u00A450%25%372%\u00A442%25%375%\u00A464%25%379%\u00A424%25%382%\u00A4179%26%370%\u00A4148%26%377%\u00A4108%26%381%\u00A4228%23%386%\u00A4131%24%394%\u00A4230%12%397%\u00A448%63%397%\u00A426%66%397%\u00A4210%13%416%\u00A437%67%416%\u00A4231%63%416%\u00A453%4%32%\u00A485%4%32%\u00A4258%4%32%\u00A4227%4%32%\u00A420%1%120%\u00A4231%15%120%\u00A4230%15%118%\u00A428%71%118%\u00A4232%15%122%\u00A476%2%140%\u00A4206%2%140%\u00A496%4%90%\u00A4249%4%90%\u00A4224%4%90%\u00A4196%48%144%\u00A485%49%147%\u00A437%1%496%\u00A4280%1%496%\u00A4102%4%498%\u00A475%4%498%\u00A448%4%498%\u00A4215%4%498%\u00A4242%4%498%\u00A4273%4%498%\u00A4159%4%500%\u00A4259%4%500%\u00A446%4%500%\u00A4160%4%501%\u00A4258%4%501%\u00A446%4%501%\u00A4258%4%502%\u00A445%4%502%\u00A4257%4%503%\u00A4229%4%503%\u00A446%4%503%\u00A474%4%503%\u00A437%4%506%\u00A436%4%513%\u00A460%4%513%\u00A4177%4%513%\u00A4236%4%513%\u00A4207%4%513%\u00A4265%4%513%\u00A460%4%514%\u00A486%4%514%\u00A4177%4%514%\u00A4206%4%514%\u00A4235%4%514%\u00A433%4%514%\u00A4264%4%514%\u00A487%4%515%\u00A460%4%515%\u00A4176%4%515%\u00A4205%4%515%\u00A4235%4%515%\u00A4264%4%515%\u00A430%4%515%\u00A459%4%516%\u00A491%4%516%\u00A4203%4%516%\u00A4235%4%516%\u00A4265%4%516%\u00A429%4%516%\u00A492%4%517%\u00A4202%4%517%\u00A4234%4%517%\u00A4265%4%517%\u00A458%4%517%\u00A429%4%517%\u00A459%4%518%\u00A4234%4%518%\u00A430%4%518%\u00A4266%4%518%\u00A431%4%519%\u00A4261%4%519%\u00A431%4%524%\u00A431%4%526%\u00A4259%4%526%\u00A4228%4%526%\u00A460%4%526%\u00A431%4%525%\u00A4260%4%525%\u00A461%4%525%\u00A460%4%527%\u00A432%4%527%\u00A4204%4%527%\u00A4235%4%527%\u00A4266%4%527%\u00A4204%4%528%\u00A4177%4%528%\u00A4233%4%528%\u00A4263%4%528%\u00A432%4%528%\u00A428%4%546%\u00A453%4%546%\u00A479%4%546%\u00A4213%4%546%\u00A4242%4%546%\u00A4276%4%546%\u00A4213%4%544%\u00A427%4%544%\u00A4214%4%543%\u00A427%4%543%\u00A4213%4%545%\u00A454%4%545%\u00A428%4%545%\u00A4142%4%548%\u00A4208%4%548%\u00A481%4%548%\u00A452%4%548%\u00A425%4%548%\u00A4241%4%548%\u00A4276%4%548%\u00A4142%4%549%\u00A4208%4%549%\u00A480%4%549%\u00A448%4%549%\u00A420%4%549%\u00A4244%4%549%\u00A4275%4%549%\u00A4141%4%550%\u00A469%4%550%\u00A435%4%550%\u00A4208%4%550%\u00A4244%4%550%\u00A4276%4%550%\u00A4142%4%551%\u00A449%4%551%\u00A420%4%551%\u00A4237%4%551%\u00A4275%4%551%\u00A4129%4%552%\u00A427%4%552%\u00A4251%4%552%\u00A4280%4%552%\u00A4158%4%552%\u00A4183%4%557%\u00A4153%4%557%\u00A4122%4%557%\u00A4222%12%580%\u00A436%4%580%\u00A4125%4%580%\u00A4217%1%596%\u00A4143%66%596%\u00A4181%66%596%\u00A4219%66%596%\u00A4256%66%596%\u00A4272%66%596%\u00A4162%69%434%\u00A4185%69%436%\u00A4208%69%440%\u00A4215%71%448%\u00A4191%71%452%\u00A4164%69%457%\u00A4173%67%456%\u00A4170%71%454%\u00A4157%6%474%\u00A484%4%476%\u00A4230%4%476%\u00A478%71%472%\u00A4232%68%472%\u00A447%66%472%\u00A439%66%472%\u00A4263%66%472%\u00A476%71%475%\u00A4232%68%475%\u00A444%66%475%\u00A435%66%475%\u00A4262%66%475%\u00A475%71%478%\u00A4230%68%478%\u00A445%66%478%\u00A435%66%478%\u00A4260%66%478%\u00A495%63%482%\u00A436%63%482%\u00A4222%63%482%\u00A439%66%482%\u00A473%66%482%\u00A440%66%481%\u00A4106%71%481%\u00A476%66%481%\u00A4246%68%481%\u00A4273%66%481%\u00A442%69%483%\u00A425%66%483%\u00A4239%67%483%\u00A4239%67%484%\u00A4226%12%504%\u00A467%4%504%\u00A437%4%504%\u00A4224%13%509%\u00A4147%63%509%\u00A4136%70%509%\u00A4155%70%509%\u00A4189%66%509%\u00A4225%66%509%\u00A4259%66%509%\u00A4269%66%509%\u00A448%4%505%\u00A4146%3%520%\u00A4146%3%522%\u00A4103%3%521%\u00A4187%3%521%\u00A4204%4%529%\u00A4234%4%529%\u00A4264%4%529%\u00A430%4%529%\u00A459%4%529%\u00A4265%4%530%\u00A4238%4%530%\u00A431%4%530%\u00A459%4%530%\u00A4265%4%532%\u00A4116%4%532%\u00A487%4%532%\u00A459%4%532%\u00A430%4%532%\u00A4266%4%533%\u00A490%4%533%\u00A458%4%533%\u00A427%4%533%\u00A4266%4%534%\u00A4241%4%534%\u00A426%4%534%\u00A457%4%534%\u00A485%4%534%\u00A424%4%535%\u00A452%4%535%\u00A479%4%535%\u00A4219%4%535%\u00A4247%4%535%\u00A4278%4%535%\u00A4189%4%536%\u00A4217%4%536%\u00A4245%4%536%\u00A4274%4%536%\u00A471%4%536%\u00A442%4%536%\u00A4188%4%537%\u00A4217%4%537%\u00A4246%4%537%\u00A4270%4%537%\u00A433%4%537%\u00A466%4%537%\u00A4154%4%537%\u00A4124%63%508%\u00A4181%68%508%\u00A4185%66%508%\u00A4218%66%508%\u00A4253%66%508%\u00A4277%66%508%\u00A4145%68%507%\u00A4180%66%507%\u00A4213%66%507%\u00A4247%66%507%\u00A4273%66%507%\u00A4169%70%510%\u00A4207%66%510%\u00A4240%66%510%\u00A4274%66%510%\u00A4258%4%499%\u00A446%4%499%\u00A476%4%499%\u00A4227%4%499%\u00A436%4%512%\u00A4265%4%531%\u00A459%4%531%\u00A487%4%531%\u00A431%4%531%\u00A4154%4%541%\u00A4185%4%541%\u00A4213%4%541%\u00A4243%4%541%\u00A4272%4%541%\u00A466%4%541%\u00A431%4%541%\u00A4186%4%542%\u00A4216%4%542%\u00A4245%4%542%\u00A4276%4%542%\u00A429%4%542%\u00A4198%41%538%\u00A4114%4%553%\u00A4142%4%553%\u00A4174%4%553%\u00A4267%4%553%\u00A499%4%554%\u00A4129%4%554%\u00A4158%4%554%\u00A4188%4%554%\u00A478%4%555%\u00A4110%4%555%\u00A4142%4%555%\u00A4179%4%555%\u00A4211%4%555%\u00A498%4%556%\u00A4133%4%556%\u00A4162%4%556%\u00A4194%4%556%\u00A4134%4%558%\u00A4168%4%558%\u00A4155%4%559%\u00A4265%4%559%\u00A4265%4%560%\u00A4265%4%561%\u00A4238%4%561%\u00A4265%4%562%\u00A4238%4%562%\u00A4210%4%562%\u00A4265%4%563%\u00A4237%4%563%\u00A4208%4%563%\u00A4181%4%563%\u00A4266%4%564%\u00A4237%4%564%\u00A4208%4%564%\u00A4180%4%564%\u00A4265%4%565%\u00A4237%4%565%\u00A4208%4%565%\u00A4180%4%565%\u00A4265%4%566%\u00A4236%4%566%\u00A4206%4%566%\u00A4179%4%566%\u00A4265%4%567%\u00A4238%4%567%\u00A4206%4%567%\u00A4179%4%567%\u00A4265%4%568%\u00A4236%4%568%\u00A4207%4%568%\u00A4177%4%568%\u00A4265%4%569%\u00A4236%4%569%\u00A4206%4%569%\u00A4177%4%569%\u00A4265%4%570%\u00A4236%4%570%\u00A4207%4%570%\u00A4179%4%570%\u00A4168%68%570%\u00A4196%66%570%\u00A4222%66%570%\u00A4258%66%570%\u00A4265%4%572%\u00A4238%4%572%\u00A4170%63%572%\u00A4157%70%572%\u00A4178%70%572%\u00A4208%66%572%\u00A4237%66%572%\u00A4272%66%572%\u00A436%4%572%\u00A466%4%572%\u00A4265%4%573%\u00A4186%67%573%\u00A4254%68%573%\u00A4279%66%573%\u00A436%4%573%\u00A465%4%573%\u00A4233%63%574%\u00A4173%63%574%\u00A4212%72%574%\u00A4250%72%574%\u00A437%4%574%\u00A466%4%574%\u00A4204%63%575%\u00A4192%70%575%\u00A4224%66%575%\u00A4260%66%575%\u00A438%4%575%\u00A466%4%575%\u00A4167%63%577%\u00A4244%63%577%\u00A4206%72%577%\u00A4246%72%577%\u00A467%4%577%\u00A434%4%577%\u00A4187%63%578%\u00A4226%72%578%\u00A4259%72%578%\u00A436%4%578%\u00A4226%70%576%\u00A4259%66%576%\u00A4188%68%576%\u00A4208%64%576%\u00A4225%72%576%\u00A4252%72%576%\u00A437%4%576%\u00A466%4%576%\u00A495%4%576%\u00A4264%4%571%\u00A4237%4%571%\u00A4208%4%571%\u00A4181%4%571%\u00A4147%63%571%\u00A4186%72%571%\u00A4225%72%571%\u00A4252%72%571%\u00A439%4%571%\u00A467%4%571%\u00A4199%70%579%\u00A4215%70%579%\u00A4254%66%579%\u00A4267%66%579%\u00A436%4%579%\u00A4226%10%588%\u00A4213%11%593%\u00A4125%4%581%\u00A434%4%581%\u00A4117%4%582%\u00A435%4%582%\u00A4118%4%583%\u00A435%4%583%\u00A446%6%592%\u00A4112%6%592%\u00A4122%72%592%\u00A4159%72%592%\u00A4194%72%592%\u00A4234%72%592%\u00A4249%72%592%\u00A4238%11%585%\u00A4139%6%587%\u00A424%6%587%\u00A4149%72%587%\u00A4188%72%587%\u00A4227%72%587%\u00A4249%72%587%\u00A4149%72%589%\u00A4186%72%589%\u00A4224%72%589%\u00A4258%72%589%\u00A4122%72%594%\u00A4158%72%594%\u00A4198%72%594%\u00A4238%72%594%\u00A4170%66%591%\u00A4206%66%591%\u00A4242%66%591%\u00A4268%66%591%\u00A430%25%221%\u00A453%25%235";
_level1.tiles = "tile1%0";
_level2 = new Object();
_level2.gameovertext = "Your mind is wandering. Pay attention.";
_level2.texts = "Entering The Gysi Express%656%\u00A4Warning... gravity disruptors ahead!!!%230";
_level2.speeds = "7%270%\u00A43%281%\u00A46%313%\u00A46%0";
_level2.gravitys = "0.3%339%\u00A40.3%265%\u00A40.8%241%\u00A40.2%0";
_level2.walls = "280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%26%\u00A4280%26%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%40%\u00A4280%69%\u00A4280%69%\u00A4280%68%\u00A4281%69%\u00A4277%81%\u00A4233%81%\u00A4233%45%\u00A4233%48%\u00A4233%53%\u00A4234%52%\u00A4235%51%\u00A4233%85%\u00A4236%85%\u00A4235%85%\u00A4236%69%\u00A4232%48%\u00A4180%48%\u00A4141%48%\u00A4141%48%\u00A4141%48%\u00A4141%48%\u00A4141%48%\u00A4280%48%\u00A4280%48%\u00A4280%48%\u00A4280%49%\u00A4280%123%\u00A4280%123%\u00A4280%123%\u00A4280%123%\u00A4280%123%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%19%\u00A4280%19%\u00A4281%19%\u00A4281%19%\u00A4281%19%\u00A4280%19%\u00A4280%19%\u00A4280%19%\u00A4280%19%\u00A4280%19%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4281%20%\u00A4281%20%\u00A4281%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4247%20%\u00A4249%20%\u00A4250%20%\u00A4251%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4148%20%\u00A4147%20%\u00A4147%20%\u00A4147%20%\u00A4147%20%\u00A4147%20%\u00A4147%20%\u00A4147%20%\u00A4147%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%95%\u00A4280%95%\u00A4280%95%\u00A4280%95%\u00A4280%95%\u00A4280%95%\u00A4280%74%\u00A4280%66%\u00A4280%64%\u00A4280%68%\u00A4280%83%\u00A4280%116%\u00A4280%170%\u00A4281%170%\u00A4281%170%\u00A4280%170%\u00A4280%170%\u00A4280%170%\u00A4280%170%\u00A4280%170%\u00A4280%170%\u00A4280%170%\u00A4280%170%\u00A4281%117%\u00A4237%128%\u00A4249%33%\u00A4264%33%\u00A4263%31%\u00A4263%34%\u00A4273%27%\u00A4273%28%\u00A4264%28%\u00A4254%29%\u00A4250%27%\u00A4245%29%\u00A4243%83%\u00A4229%117%\u00A4260%162%\u00A4280%169%\u00A4280%160%\u00A4280%126%\u00A4280%107%\u00A4280%94%\u00A4280%84%\u00A4280%83%\u00A4280%84%\u00A4280%93%\u00A4280%85%\u00A4280%85%\u00A4280%86%\u00A4280%86%\u00A4280%86%\u00A4280%86%\u00A4280%86%\u00A4237%86%\u00A4237%86%\u00A4237%86%\u00A4237%87%\u00A4224%87%\u00A4197%28%\u00A4156%28%\u00A4156%28%\u00A4157%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4250%77%\u00A4250%78%\u00A4250%78%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%130%\u00A4280%81%\u00A4227%28%\u00A4177%28%\u00A4177%28%\u00A4230%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4281%27%\u00A4263%27%\u00A4245%27%\u00A4223%30%\u00A4199%39%\u00A4166%47%\u00A4144%53%\u00A4132%51%\u00A4127%40%\u00A4130%31%\u00A4223%30%\u00A4235%20%\u00A4237%20%\u00A4237%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%23%\u00A4280%23%\u00A4280%23%\u00A4280%23%\u00A4280%23%\u00A4280%23%\u00A4280%23%\u00A4280%23%\u00A4280%23%\u00A4280%23%\u00A4280%20%\u00A4187%20%\u00A4190%20%\u00A4189%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4268%20%\u00A4269%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4267%20%\u00A4267%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4275%20%\u00A4281%20%\u00A4280%20%\u00A4278%20%\u00A4276%20%\u00A4276%20%\u00A4273%20%\u00A4272%20%\u00A4276%20%\u00A4273%20%\u00A4273%20%\u00A4272%20%\u00A4272%20%\u00A4275%20%\u00A4278%20%\u00A4278%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4276%20";
_level2.enemies = "20%64%647%\u00A427%64%646%\u00A420%64%646%\u00A425%64%630%\u00A420%64%630%\u00A420%64%629%\u00A420%64%628%\u00A420%64%625%\u00A420%64%624%\u00A426%64%624%\u00A420%64%622%\u00A428%64%622%\u00A436%64%621%\u00A421%64%621%\u00A423%64%620%\u00A420%64%620%\u00A420%64%611%\u00A430%64%611%\u00A425%64%610%\u00A420%64%610%\u00A420%64%609%\u00A432%64%607%\u00A420%64%607%\u00A4135%67%602%\u00A438%64%602%\u00A420%64%602%\u00A4182%68%623%\u00A4212%66%623%\u00A4248%66%623%\u00A4269%66%623%\u00A420%64%623%\u00A4260%70%654%\u00A4163%70%653%\u00A4192%66%653%\u00A4218%66%653%\u00A4255%66%653%\u00A4263%66%653%\u00A4254%67%653%\u00A420%64%653%\u00A435%64%653%\u00A4157%67%652%\u00A420%64%652%\u00A429%64%652%\u00A4157%67%651%\u00A439%64%651%\u00A420%64%651%\u00A4157%67%650%\u00A4108%67%650%\u00A420%64%650%\u00A4157%67%649%\u00A4221%67%649%\u00A4115%68%649%\u00A4146%66%649%\u00A4185%66%649%\u00A4221%66%649%\u00A4252%66%649%\u00A4266%66%649%\u00A428%64%649%\u00A420%64%649%\u00A4157%67%648%\u00A4228%68%648%\u00A4259%66%648%\u00A4264%66%648%\u00A435%64%648%\u00A421%64%648%\u00A4224%70%645%\u00A4257%66%645%\u00A4263%66%645%\u00A420%64%645%\u00A4218%67%644%\u00A429%64%644%\u00A420%64%644%\u00A4218%67%643%\u00A420%64%643%\u00A4218%67%642%\u00A429%64%642%\u00A420%64%642%\u00A4218%67%641%\u00A438%64%641%\u00A420%64%641%\u00A4218%67%640%\u00A4140%70%640%\u00A4171%66%640%\u00A4205%66%640%\u00A4227%66%640%\u00A4255%66%640%\u00A4271%66%640%\u00A444%64%640%\u00A420%64%640%\u00A433%64%640%\u00A4197%70%639%\u00A4215%71%639%\u00A420%64%639%\u00A438%64%639%\u00A4191%67%638%\u00A431%64%638%\u00A420%64%638%\u00A4191%67%637%\u00A420%64%637%\u00A4191%67%636%\u00A430%64%636%\u00A420%64%636%\u00A4191%67%635%\u00A420%64%635%\u00A4191%67%634%\u00A428%64%634%\u00A420%64%634%\u00A4191%67%633%\u00A420%64%633%\u00A4191%67%632%\u00A423%64%632%\u00A420%64%632%\u00A4267%66%631%\u00A4239%66%631%\u00A4221%66%631%\u00A4198%68%631%\u00A434%64%631%\u00A420%64%631%\u00A4230%68%626%\u00A4263%66%626%\u00A4202%70%626%\u00A426%64%626%\u00A420%64%626%\u00A4269%68%627%\u00A4223%67%627%\u00A420%64%627%\u00A4150%67%619%\u00A4196%67%619%\u00A4265%68%619%\u00A420%64%619%\u00A4150%67%618%\u00A4196%67%618%\u00A426%64%618%\u00A420%64%618%\u00A4150%67%617%\u00A4196%67%617%\u00A420%64%617%\u00A4150%67%616%\u00A4196%67%616%\u00A429%64%616%\u00A420%64%616%\u00A4157%68%614%\u00A4190%66%614%\u00A4221%66%614%\u00A4255%66%614%\u00A4272%66%614%\u00A444%64%614%\u00A432%64%614%\u00A420%64%614%\u00A4150%67%615%\u00A4203%68%615%\u00A4236%66%615%\u00A4266%66%615%\u00A438%64%615%\u00A420%64%615%\u00A4154%67%608%\u00A4241%67%608%\u00A420%64%608%\u00A4228%70%613%\u00A4265%66%613%\u00A449%64%613%\u00A437%64%613%\u00A421%64%613%\u00A4222%67%612%\u00A420%64%612%\u00A435%64%612%\u00A444%64%612%\u00A4135%67%606%\u00A4161%68%606%\u00A4195%66%606%\u00A4233%66%606%\u00A4265%66%606%\u00A4278%66%606%\u00A4194%67%606%\u00A4240%67%606%\u00A420%64%606%\u00A4135%67%605%\u00A4201%68%605%\u00A4235%66%605%\u00A4271%66%605%\u00A4241%67%605%\u00A436%64%605%\u00A420%64%605%\u00A4135%67%604%\u00A4248%68%604%\u00A4274%66%604%\u00A431%64%604%\u00A422%64%604%\u00A4135%67%603%\u00A442%64%603%\u00A431%64%603%\u00A420%64%603%\u00A4135%67%601%\u00A442%64%601%\u00A420%64%601%\u00A431%64%601%\u00A4135%67%600%\u00A430%64%600%\u00A420%64%600%\u00A4135%67%599%\u00A425%64%599%\u00A420%64%599%\u00A4265%66%598%\u00A4230%66%598%\u00A4201%66%598%\u00A4169%66%598%\u00A4142%68%598%\u00A434%64%598%\u00A420%64%598%\u00A4199%87%590%\u00A4139%67%590%\u00A4178%67%590%\u00A4229%67%590%\u00A4233%4%590%\u00A421%63%590%\u00A4184%70%597%\u00A4214%66%597%\u00A4241%66%597%\u00A4265%66%597%\u00A420%63%597%\u00A4178%67%596%\u00A4183%4%596%\u00A420%63%596%\u00A4178%67%595%\u00A420%63%595%\u00A4145%70%594%\u00A4178%67%594%\u00A4182%66%594%\u00A4212%66%594%\u00A4238%66%594%\u00A4261%66%594%\u00A4276%66%594%\u00A420%63%594%\u00A4139%67%593%\u00A4178%67%593%\u00A420%63%593%\u00A4139%67%592%\u00A4178%67%592%\u00A4235%70%592%\u00A4268%66%592%\u00A4178%67%592%\u00A421%63%592%\u00A4139%67%591%\u00A4178%67%591%\u00A4229%67%591%\u00A4178%67%591%\u00A4183%4%591%\u00A4144%4%591%\u00A421%63%591%\u00A4235%68%587%\u00A4262%66%587%\u00A420%63%587%\u00A4185%68%588%\u00A4214%66%588%\u00A4242%66%588%\u00A4271%66%588%\u00A4228%67%588%\u00A427%63%588%\u00A421%63%588%\u00A4146%68%589%\u00A4183%66%589%\u00A4213%66%589%\u00A4245%66%589%\u00A4272%66%589%\u00A4178%67%589%\u00A4228%67%589%\u00A421%63%589%\u00A4269%64%586%\u00A420%63%586%\u00A4275%29%576%\u00A4265%22%573%\u00A4253%19%569%\u00A4258%20%564%\u00A4226%39%561%\u00A4264%39%559%\u00A4255%39%556%\u00A4261%72%555%\u00A4241%72%555%\u00A4229%72%555%\u00A4223%64%555%\u00A4255%72%554%\u00A4241%72%554%\u00A4229%64%554%\u00A4245%72%553%\u00A4261%72%553%\u00A4236%64%553%\u00A4234%72%552%\u00A4251%72%552%\u00A4229%64%552%\u00A4224%72%551%\u00A4252%72%551%\u00A4221%64%551%\u00A4254%72%550%\u00A4232%72%550%\u00A4216%72%550%\u00A4210%64%550%\u00A4249%72%549%\u00A4225%72%549%\u00A4221%64%549%\u00A4263%64%537%\u00A4270%64%536%\u00A4265%64%535%\u00A4271%64%534%\u00A488%88%533%\u00A4267%64%533%\u00A420%61%575%\u00A4275%29%575%\u00A463%71%538%\u00A432%66%538%\u00A4270%64%538%\u00A466%67%539%\u00A4266%64%539%\u00A466%67%540%\u00A4256%64%540%\u00A4267%65%540%\u00A466%67%541%\u00A4268%72%541%\u00A4252%72%541%\u00A4252%64%541%\u00A442%69%548%\u00A422%66%548%\u00A4220%72%548%\u00A4248%72%548%\u00A4216%64%548%\u00A451%67%547%\u00A4249%72%547%\u00A4239%72%547%\u00A4232%64%547%\u00A451%67%546%\u00A4263%72%546%\u00A4229%72%546%\u00A4226%64%546%\u00A449%71%543%\u00A428%66%543%\u00A420%61%543%\u00A457%3%545%\u00A4267%72%545%\u00A4254%72%545%\u00A4244%72%545%\u00A4241%64%545%\u00A457%3%544%\u00A451%69%585%\u00A431%66%585%\u00A4227%72%585%\u00A4252%72%585%\u00A4255%72%585%\u00A4221%64%585%\u00A460%67%584%\u00A4220%72%584%\u00A4241%72%584%\u00A4258%72%584%\u00A4214%64%584%\u00A460%67%583%\u00A4215%72%583%\u00A4235%72%583%\u00A4251%72%583%\u00A4210%64%583%\u00A460%67%582%\u00A4212%72%582%\u00A4237%72%582%\u00A4247%72%582%\u00A4206%64%582%\u00A460%67%581%\u00A4245%72%581%\u00A4224%72%581%\u00A4217%72%581%\u00A4210%64%581%\u00A460%67%580%\u00A4244%72%580%\u00A4233%72%580%\u00A4225%64%580%\u00A457%71%577%\u00A428%66%577%\u00A4259%72%577%\u00A4245%64%577%\u00A460%67%578%\u00A4254%72%578%\u00A4242%64%578%\u00A445%63%579%\u00A4245%72%579%\u00A4237%64%579%\u00A439%66%560%\u00A439%66%570%\u00A439%66%574%\u00A4275%29%574%\u00A433%71%558%\u00A457%69%542%\u00A435%66%542%\u00A451%67%530%\u00A477%71%530%\u00A429%66%530%\u00A4280%62%530%\u00A480%67%531%\u00A451%67%531%\u00A4104%71%531%\u00A471%66%531%\u00A441%66%531%\u00A430%66%531%\u00A4280%62%531%\u00A4125%71%532%\u00A493%66%532%\u00A456%66%532%\u00A439%66%532%\u00A4107%67%532%\u00A480%67%532%\u00A451%67%532%\u00A4273%64%532%\u00A4270%72%526%\u00A449%72%526%\u00A420%72%526%\u00A4268%72%525%\u00A420%72%525%\u00A447%72%525%\u00A4266%72%524%\u00A438%72%524%\u00A422%72%524%\u00A420%72%524%\u00A4265%72%523%\u00A445%72%523%\u00A420%72%523%\u00A4268%72%522%\u00A420%72%522%\u00A440%72%522%\u00A449%72%522%\u00A4269%72%521%\u00A451%72%521%\u00A420%72%521%\u00A4263%72%520%\u00A445%72%520%\u00A420%72%520%\u00A4267%72%519%\u00A438%72%519%\u00A420%72%519%\u00A4268%72%506%\u00A4267%72%508%\u00A4268%72%509%\u00A4261%72%510%\u00A446%72%518%\u00A420%72%518%\u00A420%72%518%\u00A4272%72%518%\u00A420%72%517%\u00A432%72%517%\u00A4270%72%517%\u00A423%72%516%\u00A420%72%516%\u00A4266%72%516%\u00A438%72%515%\u00A420%72%515%\u00A4267%72%515%\u00A420%72%514%\u00A436%72%514%\u00A442%72%514%\u00A4269%72%514%\u00A420%72%512%\u00A428%72%512%\u00A4265%72%512%\u00A420%72%511%\u00A4264%72%511%\u00A4245%63%497%\u00A4147%63%497%\u00A4186%72%497%\u00A4217%72%497%\u00A4254%72%497%\u00A420%63%495%\u00A4245%63%495%\u00A4160%70%529%\u00A4194%66%529%\u00A4227%66%529%\u00A4250%66%529%\u00A4268%66%529%\u00A448%71%529%\u00A420%66%529%\u00A4154%67%528%\u00A455%72%528%\u00A420%72%528%\u00A4267%72%528%\u00A4154%67%527%\u00A442%72%527%\u00A420%72%527%\u00A4269%72%527%\u00A4156%68%513%\u00A4193%66%513%\u00A4229%66%513%\u00A4259%66%513%\u00A4268%66%513%\u00A420%72%513%\u00A438%72%513%\u00A447%72%513%\u00A4271%72%513%\u00A4229%68%504%\u00A4263%66%504%\u00A4229%66%503%\u00A4266%66%503%\u00A4193%85%505%\u00A4131%66%507%\u00A4161%66%507%\u00A4185%66%507%\u00A4216%66%507%\u00A4256%66%507%\u00A4265%66%507%\u00A4270%72%507%\u00A4124%86%503%\u00A4263%63%481%\u00A4250%63%483%\u00A420%63%483%\u00A4245%63%484%\u00A420%63%484%\u00A4245%63%486%\u00A420%63%486%\u00A4245%63%487%\u00A420%63%487%\u00A460%63%487%\u00A4245%63%488%\u00A420%63%488%\u00A460%63%488%\u00A4100%63%488%\u00A4245%63%489%\u00A421%63%489%\u00A460%63%489%\u00A4100%63%489%\u00A4245%63%491%\u00A420%63%491%\u00A460%63%491%\u00A4100%63%491%\u00A4245%63%492%\u00A460%63%492%\u00A420%63%492%\u00A4245%63%493%\u00A420%63%493%\u00A4245%63%494%\u00A420%63%494%\u00A420%63%494%\u00A420%63%494%\u00A4245%63%496%\u00A420%63%496%\u00A4169%63%496%\u00A4208%72%496%\u00A4244%72%496%\u00A4245%63%498%\u00A4125%63%498%\u00A4164%72%498%\u00A4196%72%498%\u00A4223%72%498%\u00A4245%72%498%\u00A4245%63%499%\u00A4159%81%501%\u00A4245%63%501%\u00A4159%81%500%\u00A4245%63%500%\u00A4250%80%490%\u00A4234%80%490%\u00A4245%63%490%\u00A421%63%490%\u00A460%63%490%\u00A4100%63%490%\u00A4250%80%485%\u00A4245%63%485%\u00A420%63%485%\u00A4190%41%482%\u00A4258%63%482%\u00A420%63%482%\u00A453%67%459%\u00A463%64%459%\u00A4106%82%459%\u00A420%65%459%\u00A4231%45%459%\u00A444%69%480%\u00A424%66%480%\u00A4267%63%480%\u00A453%67%479%\u00A464%64%479%\u00A420%65%479%\u00A4201%39%479%\u00A4271%63%479%\u00A453%67%478%\u00A428%67%478%\u00A430%66%478%\u00A453%67%477%\u00A463%64%477%\u00A420%65%477%\u00A453%67%476%\u00A428%67%476%\u00A453%67%475%\u00A463%64%475%\u00A420%65%475%\u00A453%67%474%\u00A428%67%474%\u00A453%67%473%\u00A463%64%473%\u00A420%65%473%\u00A4257%30%473%\u00A453%67%472%\u00A428%67%472%\u00A453%67%471%\u00A463%64%471%\u00A420%65%471%\u00A4236%66%471%\u00A4263%66%471%\u00A453%67%470%\u00A428%67%470%\u00A431%66%470%\u00A4214%72%470%\u00A4249%72%470%\u00A4179%4%470%\u00A4199%4%470%\u00A453%67%469%\u00A463%64%469%\u00A420%65%469%\u00A453%67%468%\u00A428%67%468%\u00A4236%66%468%\u00A4264%66%468%\u00A4199%4%468%\u00A4179%4%468%\u00A453%67%467%\u00A463%64%467%\u00A420%65%467%\u00A4215%72%467%\u00A4248%72%467%\u00A4205%29%467%\u00A453%67%466%\u00A428%67%466%\u00A4205%29%466%\u00A453%67%465%\u00A463%64%465%\u00A420%65%465%\u00A4235%66%465%\u00A4265%66%465%\u00A4205%29%465%\u00A453%67%464%\u00A428%67%464%\u00A4214%72%464%\u00A4248%72%464%\u00A453%67%463%\u00A463%64%463%\u00A420%65%463%\u00A4217%27%463%\u00A4235%66%463%\u00A4260%66%463%\u00A4200%28%463%\u00A453%67%462%\u00A428%67%462%\u00A453%67%461%\u00A463%64%461%\u00A420%65%461%\u00A4263%22%461%\u00A453%67%460%\u00A428%67%460%\u00A432%66%460%\u00A4253%44%460%\u00A450%71%458%\u00A430%66%458%\u00A438%66%457%\u00A468%66%457%\u00A487%66%457%\u00A430%66%455%\u00A444%66%455%\u00A462%73%455%\u00A431%66%452%\u00A455%66%452%\u00A483%66%452%\u00A428%66%450%\u00A446%73%450%\u00A429%66%449%\u00A448%73%449%\u00A435%66%448%\u00A450%73%448%\u00A429%66%446%\u00A462%66%446%\u00A428%66%445%\u00A448%73%445%\u00A433%66%443%\u00A453%73%443%\u00A439%66%437%\u00A458%66%437%\u00A439%66%436%\u00A448%66%436%\u00A435%67%430%\u00A4150%67%440%\u00A435%66%440%\u00A454%66%440%\u00A476%66%440%\u00A4156%70%454%\u00A4190%66%454%\u00A4213%66%454%\u00A4241%66%454%\u00A4263%66%454%\u00A4267%66%454%\u00A432%66%454%\u00A446%66%454%\u00A463%73%454%\u00A4211%66%456%\u00A4243%66%456%\u00A4271%66%456%\u00A429%66%456%\u00A450%66%456%\u00A468%66%456%\u00A485%73%456%\u00A4255%21%451%\u00A435%66%451%\u00A457%66%451%\u00A4180%6%453%\u00A4190%72%453%\u00A4230%72%453%\u00A4243%72%453%\u00A4150%67%453%\u00A456%66%453%\u00A433%66%453%\u00A4227%68%406%\u00A4253%67%406%\u00A4260%66%406%\u00A440%71%406%\u00A420%66%406%\u00A455%67%406%\u00A4186%68%407%\u00A4211%69%407%\u00A4253%67%407%\u00A4242%68%407%\u00A4264%66%407%\u00A443%67%407%\u00A461%70%407%\u00A481%71%407%\u00A4253%34%358%\u00A4252%31%356%\u00A4252%31%354%\u00A4253%31%352%\u00A4253%31%350%\u00A4140%65%403%\u00A4166%65%403%\u00A4192%65%403%\u00A4218%65%403%\u00A4244%65%403%\u00A4270%65%403%\u00A4166%65%402%\u00A4218%65%402%\u00A4140%65%401%\u00A4166%65%401%\u00A4192%65%401%\u00A4218%65%401%\u00A4245%65%401%\u00A4271%65%401%\u00A4148%27%392%\u00A4168%27%392%\u00A4187%27%392%\u00A4206%27%392%\u00A4226%27%392%\u00A4245%27%392%\u00A4263%27%392%\u00A420%9%399%\u00A420%9%396%\u00A420%9%393%\u00A420%9%390%\u00A420%9%387%\u00A4220%63%382%\u00A4237%65%382%\u00A4252%72%382%\u00A4220%63%380%\u00A4238%65%380%\u00A4252%72%380%\u00A431%65%375%\u00A425%63%374%\u00A425%63%376%\u00A429%69%377%\u00A434%71%373%\u00A4237%64%370%\u00A4238%64%368%\u00A4226%63%371%\u00A4280%71%371%\u00A4226%63%369%\u00A4280%71%369%\u00A4226%63%367%\u00A4280%71%367%\u00A444%69%364%\u00A421%69%364%\u00A429%66%364%\u00A430%67%362%\u00A453%67%362%\u00A436%63%363%\u00A420%65%363%\u00A436%63%361%\u00A420%65%361%\u00A4241%68%347%\u00A4270%66%347%\u00A4249%68%345%\u00A4276%66%345%\u00A4246%34%348%\u00A4255%34%346%\u00A4236%34%344%\u00A420%75%378%\u00A430%75%365%\u00A4277%56%384%\u00A4277%56%372%\u00A4280%56%359%\u00A421%75%353%\u00A420%75%343%\u00A4231%68%343%\u00A4259%66%343%\u00A460%3%324%\u00A4256%3%324%\u00A444%69%325%\u00A428%66%325%\u00A4257%70%325%\u00A4279%69%325%\u00A451%71%321%\u00A420%66%321%\u00A4230%66%321%\u00A4208%68%321%\u00A454%67%323%\u00A4279%66%323%\u00A4257%68%323%\u00A4243%4%323%\u00A440%63%322%\u00A420%65%322%\u00A4270%66%322%\u00A4246%68%322%\u00A4205%4%322%\u00A4202%67%318%\u00A476%71%287%\u00A445%66%287%\u00A430%66%287%\u00A4243%68%287%\u00A4274%66%287%\u00A421%78%285%\u00A4175%77%285%\u00A4208%70%319%\u00A4238%66%319%\u00A4262%66%319%\u00A4129%77%319%\u00A420%78%319%\u00A420%69%317%\u00A4128%63%317%\u00A4167%72%317%\u00A4204%72%317%\u00A4240%72%317%\u00A4250%72%317%\u00A4202%67%317%\u00A429%67%316%\u00A4179%63%316%\u00A4218%72%316%\u00A4250%72%316%\u00A4144%67%316%\u00A452%69%316%\u00A426%66%316%\u00A429%67%315%\u00A4230%63%315%\u00A4128%63%315%\u00A4167%72%315%\u00A4205%72%315%\u00A4245%72%315%\u00A4201%67%315%\u00A447%63%315%\u00A425%66%315%\u00A447%69%314%\u00A436%68%314%\u00A4178%63%314%\u00A4218%72%314%\u00A4252%72%314%\u00A4144%67%314%\u00A456%67%313%\u00A421%69%313%\u00A4230%63%313%\u00A4128%63%313%\u00A4167%72%313%\u00A4203%72%313%\u00A4243%72%313%\u00A4202%67%313%\u00A456%67%312%\u00A428%64%312%\u00A438%69%312%\u00A420%66%312%\u00A4179%63%312%\u00A4218%72%312%\u00A4250%72%312%\u00A4159%68%312%\u00A474%69%311%\u00A463%68%311%\u00A428%71%311%\u00A447%67%311%\u00A4230%63%311%\u00A4268%72%311%\u00A4209%68%311%\u00A483%67%310%\u00A444%64%310%\u00A432%65%310%\u00A434%69%310%\u00A420%66%310%\u00A4236%70%310%\u00A4268%66%310%\u00A4119%63%310%\u00A476%72%310%\u00A437%72%310%\u00A420%72%310%\u00A483%67%309%\u00A444%71%309%\u00A420%66%309%\u00A488%69%309%\u00A470%70%309%\u00A443%67%309%\u00A4222%65%309%\u00A4247%72%309%\u00A4132%71%309%\u00A4108%66%309%\u00A4117%69%308%\u00A490%68%308%\u00A440%64%308%\u00A428%65%308%\u00A441%66%308%\u00A461%71%308%\u00A497%67%308%\u00A4253%69%308%\u00A4238%68%308%\u00A4262%74%308%\u00A4202%63%306%\u00A4241%72%306%\u00A4123%71%306%\u00A489%70%306%\u00A4109%73%306%\u00A435%64%306%\u00A438%66%306%\u00A459%71%306%\u00A497%67%306%\u00A4242%69%305%\u00A4116%69%305%\u00A483%67%305%\u00A489%66%305%\u00A451%66%305%\u00A431%66%305%\u00A4219%68%305%\u00A435%71%305%\u00A497%67%305%\u00A438%66%303%\u00A476%66%303%\u00A4122%71%303%\u00A4104%66%303%\u00A4157%69%303%\u00A4147%68%303%\u00A4217%67%303%\u00A4251%67%303%\u00A497%67%303%\u00A466%63%304%\u00A420%72%304%\u00A423%72%304%\u00A4116%69%304%\u00A490%68%304%\u00A4243%65%304%\u00A4223%70%304%\u00A4258%66%304%\u00A4131%69%304%\u00A4125%67%304%\u00A497%67%304%\u00A4220%70%301%\u00A4254%66%301%\u00A4265%66%301%\u00A439%66%301%\u00A468%66%301%\u00A481%69%301%\u00A4251%67%301%\u00A497%67%301%\u00A420%72%300%\u00A420%64%300%\u00A462%64%300%\u00A4189%70%300%\u00A4221%66%300%\u00A4256%66%300%\u00A4264%66%300%\u00A4214%67%300%\u00A487%71%300%\u00A454%70%300%\u00A4251%67%300%\u00A494%71%300%\u00A4120%71%296%\u00A487%66%296%\u00A449%64%296%\u00A4237%72%296%\u00A4213%65%296%\u00A445%71%296%\u00A420%66%296%\u00A4251%67%296%\u00A470%69%294%\u00A443%66%294%\u00A426%66%294%\u00A457%67%294%\u00A4264%70%294%\u00A4258%68%294%\u00A4234%68%290%\u00A4263%66%290%\u00A4196%69%290%\u00A4186%68%290%\u00A4258%67%290%\u00A462%63%290%\u00A454%71%290%\u00A479%67%290%\u00A427%66%290%\u00A4149%68%291%\u00A4178%66%291%\u00A4215%66%291%\u00A4252%66%291%\u00A4271%66%291%\u00A4227%67%291%\u00A4179%67%291%\u00A4258%67%291%\u00A457%67%291%\u00A430%71%291%\u00A479%67%291%\u00A435%64%279%\u00A427%64%277%\u00A445%64%277%\u00A4145%64%277%\u00A4163%64%277%\u00A4180%64%277%\u00A4198%64%277%\u00A4216%64%277%\u00A4136%76%338%\u00A4137%76%332%\u00A4179%64%297%\u00A4217%66%297%\u00A4238%71%297%\u00A464%68%297%\u00A499%66%297%\u00A4114%69%297%\u00A448%67%297%\u00A4251%67%297%\u00A4175%65%298%\u00A4247%70%298%\u00A4270%66%298%\u00A450%65%298%\u00A428%66%298%\u00A448%67%298%\u00A4251%67%298%\u00A4128%65%295%\u00A4106%66%295%\u00A446%63%295%\u00A4230%68%295%\u00A4249%63%295%\u00A4250%67%295%\u00A4251%67%295%\u00A4148%70%293%\u00A4168%73%293%\u00A479%67%293%\u00A457%67%293%\u00A424%69%293%\u00A4258%67%293%\u00A4233%70%293%\u00A4266%66%293%\u00A4135%65%292%\u00A479%67%292%\u00A457%67%292%\u00A433%67%292%\u00A4233%70%292%\u00A4255%71%292%\u00A4185%70%292%\u00A4219%66%292%\u00A4264%66%292%\u00A4227%67%292%\u00A4258%67%292%\u00A4232%64%289%\u00A4249%72%289%\u00A4212%68%289%\u00A4110%69%289%\u00A484%68%289%\u00A4258%67%289%\u00A479%67%289%\u00A427%63%288%\u00A467%72%288%\u00A4110%65%288%\u00A4236%67%288%\u00A4265%68%288%\u00A479%67%288%\u00A4276%56%176%\u00A4148%9%267%\u00A4147%9%265%\u00A4220%9%262%\u00A4214%67%262%\u00A4221%9%260%\u00A4214%67%260%\u00A4220%9%258%\u00A4214%67%258%\u00A428%9%263%\u00A4220%70%263%\u00A4258%66%263%\u00A4263%66%263%\u00A429%9%261%\u00A4214%67%261%\u00A428%9%259%\u00A4214%67%259%\u00A429%9%257%\u00A4223%69%257%\u00A4221%68%257%\u00A456%1%250%\u00A4275%11%250%\u00A4273%69%250%\u00A4232%67%250%\u00A4251%70%195%\u00A4123%69%195%\u00A454%69%73%\u00A463%67%72%\u00A463%67%71%\u00A463%67%70%\u00A463%67%69%\u00A4276%29%169%\u00A430%71%166%\u00A424%69%167%\u00A426%69%162%\u00A420%63%161%\u00A4251%1%157%\u00A465%69%157%\u00A442%68%157%\u00A4233%55%172%\u00A4280%61%170%\u00A420%1%171%\u00A4222%1%168%\u00A4119%27%160%\u00A444%67%160%\u00A427%67%160%\u00A420%65%146%\u00A460%71%146%\u00A4178%64%159%\u00A427%67%159%\u00A444%67%159%\u00A4183%67%158%\u00A420%63%158%\u00A4218%67%156%\u00A438%66%156%\u00A471%71%156%\u00A4218%67%155%\u00A4257%31%155%\u00A4218%67%154%\u00A4241%4%154%\u00A4265%4%154%\u00A4251%16%137%\u00A4218%67%153%\u00A420%59%153%\u00A4241%4%153%\u00A4265%4%153%\u00A4218%67%152%\u00A436%4%152%\u00A4214%64%151%\u00A4214%74%151%\u00A4171%72%151%\u00A4154%64%151%\u00A436%4%151%\u00A463%4%151%\u00A4271%28%150%\u00A4217%67%150%\u00A431%67%150%\u00A458%67%150%\u00A4213%64%149%\u00A4251%66%149%\u00A4265%66%149%\u00A420%1%149%\u00A4217%67%148%\u00A463%67%148%\u00A4212%64%147%\u00A4229%72%147%\u00A4261%72%147%\u00A463%67%147%\u00A420%62%145%\u00A420%62%144%\u00A420%62%143%\u00A420%62%142%\u00A420%62%141%\u00A4167%6%141%\u00A4117%57%131%\u00A420%59%95%\u00A420%75%60%\u00A439%67%20%\u00A4280%56%54%\u00A428%63%54%\u00A420%65%54%\u00A4206%33%47%\u00A4155%33%47%\u00A4103%33%47%\u00A4160%1%46%\u00A4201%67%45%\u00A4101%65%45%\u00A4141%71%45%\u00A480%46%45%\u00A4108%67%44%\u00A4201%67%44%\u00A4134%65%43%\u00A4191%65%43%\u00A4174%66%43%\u00A4115%68%43%\u00A4199%67%42%\u00A4142%67%42%\u00A4137%64%41%\u00A4164%70%41%\u00A4196%71%41%\u00A4138%74%41%\u00A4158%67%40%\u00A4142%67%40%\u00A4142%67%39%\u00A4158%67%39%\u00A4136%63%38%\u00A455%33%26%\u00A4193%71%26%\u00A4201%6%27%\u00A461%9%35%\u00A4239%9%35%\u00A430%69%21%\u00A4202%71%21%\u00A4146%68%21%\u00A4277%6%24%\u00A4266%64%19%\u00A439%67%19%\u00A443%32%25%\u00A443%32%18%\u00A4185%29%31%\u00A452%26%31%\u00A4185%29%30%\u00A4185%29%29%\u00A4185%29%28%\u00A456%33%28%\u00A4177%6%17%\u00A4265%64%17%\u00A4102%69%15%\u00A475%70%15%\u00A4111%67%14%\u00A466%71%14%\u00A436%66%14%\u00A469%69%13%\u00A447%66%13%\u00A432%66%13%\u00A4111%67%13%\u00A455%69%12%\u00A478%67%12%\u00A434%66%12%\u00A4111%67%12%\u00A4240%42%12%\u00A464%67%11%\u00A478%67%11%\u00A4111%67%11%\u00A4263%68%11%\u00A4234%45%10%\u00A478%67%10%\u00A464%67%10%\u00A4111%67%10%\u00A456%63%9%\u00A4261%46%9%\u00A4108%71%9%\u00A460%67%8%\u00A483%67%8%\u00A4260%46%8%\u00A483%67%7%\u00A460%67%7%\u00A463%71%1%\u00A433%66%1%\u00A4228%34%2%\u00A428%71%2%\u00A466%67%2%\u00A4218%33%3%\u00A431%67%3%\u00A466%67%3%\u00A4218%33%5%\u00A456%71%5%\u00A437%70%5%\u00A483%67%5%\u00A435%66%6%\u00A455%64%6%\u00A483%67%6%\u00A4242%72%6%\u00A456%63%4%\u00A431%67%4%\u00A4177%6%22%\u00A4196%69%22%\u00A4145%70%22%\u00A4280%56%66%\u00A4216%1%77%\u00A448%1%81%\u00A4252%70%81%\u00A4280%66%81%\u00A4123%59%83%\u00A4261%67%78%\u00A4246%67%78%\u00A4261%67%79%\u00A4246%67%79%\u00A431%72%79%\u00A474%64%79%\u00A4267%70%80%\u00A4246%67%80%\u00A479%67%80%\u00A448%1%86%\u00A4273%58%89%\u00A420%59%89%\u00A443%36%87%\u00A4273%58%93%\u00A4232%55%102%\u00A4130%57%107%\u00A4128%57%113%\u00A4133%57%119%\u00A4117%57%125%\u00A420%59%98%\u00A4264%68%186%\u00A442%62%186%\u00A4257%67%187%\u00A457%62%187%\u00A4253%64%188%\u00A478%62%188%\u00A4253%67%189%\u00A470%62%189%\u00A4246%65%190%\u00A472%62%190%\u00A480%62%191%\u00A4253%67%191%\u00A4244%69%192%\u00A4233%68%192%\u00A4226%67%193%\u00A4249%68%193%\u00A4277%66%193%\u00A496%1%194%\u00A4220%63%194%\u00A4259%72%194%\u00A420%53%196%\u00A4280%60%213%\u00A4280%60%214%\u00A4232%60%215%\u00A4231%60%216%\u00A483%59%217%\u00A4232%55%221%\u00A431%56%224%\u00A4232%1%234%\u00A426%50%236%\u00A426%50%239%\u00A427%9%269%\u00A4277%9%269%\u00A427%9%270%\u00A4280%9%270%\u00A427%9%271%\u00A4280%9%271%\u00A427%9%272%\u00A4279%9%272%\u00A4155%31%278%\u00A427%64%278%\u00A445%64%278%\u00A4221%68%299%\u00A4183%67%299%\u00A4252%66%299%\u00A4263%66%299%\u00A449%69%299%\u00A429%66%299%\u00A4143%65%299%\u00A4168%72%299%\u00A4205%72%299%\u00A4231%72%299%\u00A4246%72%299%\u00A448%67%299%\u00A4251%67%299%\u00A420%72%302%\u00A463%64%302%\u00A4101%66%302%\u00A4123%65%302%\u00A4163%71%302%\u00A4244%63%302%\u00A4224%68%302%\u00A497%67%302%\u00A4126%67%307%\u00A4219%70%307%\u00A4242%73%307%\u00A440%71%307%\u00A420%66%307%\u00A492%65%307%\u00A468%70%307%\u00A488%65%307%\u00A463%5%252%\u00A4232%67%252%\u00A459%5%253%\u00A422%66%253%\u00A457%5%254%\u00A420%66%254%\u00A4100%5%251%\u00A4232%67%251%\u00A4239%68%249%\u00A4267%66%249%\u00A4232%67%255%\u00A4232%67%256%\u00A429%63%52%\u00A421%65%52%\u00A444%67%53%\u00A4260%68%405%\u00A420%64%405%\u00A452%71%405%\u00A4253%67%408%\u00A4179%67%408%\u00A4258%66%408%\u00A4245%66%408%\u00A4216%68%408%\u00A4235%67%408%\u00A428%63%408%\u00A484%67%408%\u00A4244%69%409%\u00A4216%66%409%\u00A4185%70%409%\u00A4209%67%409%\u00A4235%67%409%\u00A469%63%409%\u00A436%67%409%\u00A451%67%409%\u00A4215%70%410%\u00A4253%66%410%\u00A4263%66%410%\u00A4235%67%410%\u00A429%63%410%\u00A484%67%410%\u00A4264%66%411%\u00A4228%66%411%\u00A4201%66%411%\u00A4176%68%411%\u00A4235%67%411%\u00A469%63%411%\u00A451%67%411%\u00A436%67%411%\u00A4169%67%412%\u00A4215%68%412%\u00A4237%71%412%\u00A4235%67%412%\u00A429%63%412%\u00A478%69%412%\u00A4175%70%413%\u00A4199%69%413%\u00A4246%70%413%\u00A4273%66%413%\u00A4235%67%413%\u00A420%64%413%\u00A437%72%413%\u00A456%72%413%\u00A446%64%413%\u00A471%64%413%\u00A495%64%413%\u00A4235%67%414%\u00A4266%66%414%\u00A4239%66%414%\u00A4213%66%414%\u00A4182%66%414%\u00A4154%68%414%\u00A4235%67%415%\u00A4268%66%415%\u00A4232%66%415%\u00A4208%66%415%\u00A4184%68%415%\u00A4147%67%415%\u00A420%64%415%\u00A437%72%415%\u00A446%64%415%\u00A471%64%415%\u00A4241%70%416%\u00A4268%66%416%\u00A4177%67%416%\u00A4147%67%416%\u00A4177%67%417%\u00A4153%70%417%\u00A4183%66%417%\u00A4217%66%417%\u00A4252%66%417%\u00A4267%66%417%\u00A420%72%417%\u00A435%72%417%\u00A420%64%417%\u00A446%64%417%\u00A471%64%417%\u00A4177%67%418%\u00A4260%66%418%\u00A4227%66%418%\u00A4199%68%418%\u00A4183%70%419%\u00A4218%66%419%\u00A4246%71%419%\u00A4192%67%419%\u00A420%72%419%\u00A456%72%419%\u00A420%64%419%\u00A445%64%419%\u00A470%64%419%\u00A495%64%419%\u00A4249%67%420%\u00A4192%67%420%\u00A4267%66%420%\u00A4252%66%420%\u00A4226%68%420%\u00A420%66%420%\u00A441%71%420%\u00A4249%67%421%\u00A4198%70%421%\u00A4231%66%421%\u00A4263%66%421%\u00A4219%67%421%\u00A429%63%421%\u00A482%71%421%\u00A4249%67%422%\u00A4264%66%422%\u00A4229%68%422%\u00A4225%70%422%\u00A469%63%422%\u00A443%67%422%\u00A4249%67%423%\u00A4180%68%423%\u00A4213%66%423%\u00A4249%66%423%\u00A4269%66%423%\u00A4222%67%423%\u00A429%63%423%\u00A485%67%423%\u00A4240%69%424%\u00A4215%66%424%\u00A4179%70%424%\u00A4222%67%424%\u00A469%63%424%\u00A443%67%424%\u00A4222%67%425%\u00A429%63%425%\u00A476%69%425%\u00A4222%67%426%\u00A434%69%426%\u00A420%66%426%\u00A4228%70%427%\u00A4265%66%427%\u00A4122%63%427%\u00A4161%72%427%\u00A4197%72%427%\u00A4232%72%427%\u00A4246%72%427%\u00A420%63%427%\u00A4251%80%428%\u00A435%67%428%\u00A4201%81%432%\u00A4239%63%432%\u00A435%67%432%\u00A4201%81%433%\u00A4239%63%433%\u00A420%63%433%\u00A4258%70%434%\u00A426%69%434%\u00A4122%63%429%\u00A4162%72%429%\u00A4195%72%429%\u00A4235%72%429%\u00A4251%72%429%\u00A420%63%429%\u00A420%63%431%\u00A4253%19%435%\u00A4180%6%435%\u00A4190%72%435%\u00A4224%72%435%\u00A4242%72%435%\u00A439%66%435%\u00A4254%20%439%\u00A4180%6%439%\u00A4157%68%439%\u00A4185%66%439%\u00A4218%66%439%\u00A4244%66%439%\u00A4265%66%439%\u00A438%66%439%\u00A448%66%439%\u00A467%73%439%\u00A4258%21%444%\u00A4191%72%444%\u00A4226%72%444%\u00A4247%72%444%\u00A4180%6%444%\u00A420%66%444%\u00A440%73%444%\u00A4180%6%442%\u00A426%66%442%\u00A445%66%442%\u00A466%73%442%\u00A4190%72%438%\u00A4227%72%438%\u00A4245%72%438%\u00A444%66%438%\u00A437%66%438%\u00A465%73%438%\u00A4191%72%441%\u00A4228%72%441%\u00A4251%72%441%\u00A4162%84%441%\u00A465%66%441%\u00A436%66%441%\u00A4189%72%447%\u00A4221%72%447%\u00A4264%72%447%\u00A4231%72%447%\u00A421%66%447%\u00A447%66%447%\u00A4204%77%274%\u00A425%78%274%\u00A4266%64%274%\u00A4216%64%276%\u00A4234%64%276%\u00A420%72%245%\u00A463%64%245%\u00A481%64%245%\u00A4263%64%245%\u00A4245%64%245%\u00A428%64%247%\u00A446%64%247%\u00A446%64%246%\u00A428%64%246%\u00A464%78%246%\u00A4219%77%246%\u00A428%64%248";
_level2.tiles = "tile2%560%\u00A4tile6%540%\u00A4tile4%509%\u00A4tile4%419%\u00A4tile14%395%\u00A4tile4%122%\u00A4tile5%89%\u00A4tile4%77%\u00A4tile4%71%\u00A4tile3%48%\u00A4tile3%52%\u00A4tile3%59%\u00A4tile3%68%\u00A4tile2%0%\u00A4tile6%137%\u00A4tile2%158%\u00A4tile3%248%\u00A4tile4%272%\u00A4tile15%447%\u00A4tile4%470%\u00A4tile16%497";
_level3 = new Object();
_level3.gameovertext = "Too fast for you? Now don't be a cry baby!";
_level3.texts = "It's time to die. Thanks for playing. Over and out.%999%\u00A4But now, the time has come for you to give up, and face the inevitable.%995%\u00A4It has been a long and dangerous journey, and you have done good.%990%\u00A4You've won! You've reached the end of the Metro Siberia Undergound. %984";
_level3.speeds = "38%1010%\u00A41%980%\u00A49%346%\u00A49%331%\u00A415%190%\u00A49%611%\u00A425%477%\u00A49%628%\u00A430%772%\u00A438%919%\u00A49%0";
_level3.gravitys = "0.35%1010%\u00A40.07%980%\u00A40.35%0";
_level3.walls = "280%20%\u00A4294%20%\u00A4288%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4277%20%\u00A4264%20%\u00A4236%20%\u00A4187%20%\u00A4136%20%\u00A4110%20%\u00A494%20%\u00A484%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A482%20%\u00A486%20%\u00A4100%28%\u00A4130%53%\u00A4181%65%\u00A4250%68%\u00A4283%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%68%\u00A4291%55%\u00A4277%35%\u00A4244%20%\u00A4140%12%\u00A491%9%\u00A467%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A469%13%\u00A477%21%\u00A492%32%\u00A4113%48%\u00A4143%68%\u00A4185%88%\u00A4220%105%\u00A4247%120%\u00A4266%131%\u00A4277%136%\u00A4280%137%\u00A4280%137%\u00A4280%137%\u00A4280%137%\u00A4280%137%\u00A4280%137%\u00A4280%137%\u00A4277%132%\u00A4271%122%\u00A4258%111%\u00A4236%95%\u00A4206%76%\u00A4170%50%\u00A4127%27%\u00A496%15%\u00A473%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A463%9%\u00A474%16%\u00A498%36%\u00A4144%60%\u00A4175%90%\u00A4184%103%\u00A4184%103%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4280%9%\u00A4188%98%\u00A4188%98%\u00A4188%98%\u00A4188%98%\u00A4188%98%\u00A4188%98%\u00A4188%98%\u00A4188%98%\u00A4188%98%\u00A4188%98%\u00A4187%98%\u00A4280%1%\u00A4280%1%\u00A4238%140%\u00A4238%140%\u00A4295%3%\u00A4295%3%\u00A4295%3%\u00A4295%3%\u00A4295%3%\u00A4295%3%\u00A4295%3%\u00A4295%3%\u00A4295%3%\u00A4295%3%\u00A4256%152%\u00A4256%152%\u00A4256%152%\u00A4296%5%\u00A4296%5%\u00A4296%5%\u00A4296%5%\u00A4296%5%\u00A4296%16%\u00A4296%16%\u00A4296%16%\u00A4296%16%\u00A4296%16%\u00A4296%16%\u00A4153%63%\u00A4153%63%\u00A4268%63%\u00A4268%63%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4268%24%\u00A4185%113%\u00A4185%113%\u00A4185%113%\u00A4185%113%\u00A4185%113%\u00A4185%113%\u00A4185%113%\u00A4276%29%\u00A4276%29%\u00A4277%28%\u00A4289%26%\u00A4276%26%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%29%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4181%112%\u00A4181%112%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4280%28%\u00A4180%110%\u00A4180%110%\u00A4177%104%\u00A4169%90%\u00A4157%74%\u00A4144%55%\u00A4131%32%\u00A4115%11%\u00A499%0%\u00A493%0%\u00A493%0%\u00A493%0%\u00A493%0%\u00A498%0%\u00A4118%6%\u00A4139%20%\u00A4169%44%\u00A4206%66%\u00A4227%91%\u00A4239%108%\u00A4244%114%\u00A4244%116%\u00A4247%116%\u00A4263%104%\u00A4280%45%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%27%\u00A4280%44%\u00A4280%88%\u00A4280%144%\u00A4280%165%\u00A4280%170%\u00A4280%170%\u00A4280%152%\u00A4280%111%\u00A4258%59%\u00A4213%23%\u00A4166%7%\u00A4131%0%\u00A4116%1%\u00A4110%1%\u00A4106%1%\u00A4109%1%\u00A4111%1%\u00A4118%1%\u00A4139%1%\u00A4181%2%\u00A4258%12%\u00A4278%35%\u00A4280%72%\u00A4280%92%\u00A4280%92%\u00A4276%87%\u00A4267%66%\u00A4251%32%\u00A4225%20%\u00A4211%20%\u00A4211%20%\u00A4211%20%\u00A4211%20%\u00A4211%20%\u00A4219%20%\u00A4239%32%\u00A4280%56%\u00A4294%110%\u00A4299%150%\u00A4299%161%\u00A4299%162%\u00A4299%160%\u00A4298%140%\u00A4279%99%\u00A4249%58%\u00A4214%35%\u00A4190%21%\u00A4182%21%\u00A4189%22%\u00A4212%41%\u00A4259%69%\u00A4290%107%\u00A4298%119%\u00A4298%127%\u00A4298%122%\u00A4292%113%\u00A4275%102%\u00A4261%92%\u00A4256%90%\u00A4256%90%\u00A4256%89%\u00A4256%89%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%21%\u00A4280%27%\u00A4273%43%\u00A4255%61%\u00A4255%61%\u00A4255%61%\u00A4255%61%\u00A4255%61%\u00A4255%61%\u00A4255%61%\u00A4295%3%\u00A4290%4%\u00A4293%4%\u00A4295%3%\u00A4295%8%\u00A4297%8%\u00A4296%7%\u00A4294%6%\u00A4298%15%\u00A4297%19%\u00A4297%19%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4297%20%\u00A4296%20%\u00A4278%42%\u00A4215%116%\u00A4215%116%\u00A4215%116%\u00A4291%20%\u00A4291%20%\u00A4291%20%\u00A4291%20%\u00A4291%20%\u00A4291%20%\u00A4215%20%\u00A4215%20%\u00A4215%20%\u00A4215%20%\u00A4215%20%\u00A4215%20%\u00A4215%20%\u00A4215%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4292%20%\u00A4280%20%\u00A4245%20%\u00A4245%115%\u00A4245%115%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4192%20%\u00A4158%20%\u00A4118%20%\u00A4144%20%\u00A4170%20%\u00A4198%20%\u00A4222%20%\u00A4250%20%\u00A4250%20%\u00A4250%20%\u00A4250%20%\u00A4250%20%\u00A4250%20%\u00A4250%20%\u00A4250%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4252%20%\u00A4275%20%\u00A4275%20%\u00A4277%20%\u00A4277%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4276%20%\u00A4271%20%\u00A4276%20%\u00A4277%20%\u00A4276%20%\u00A4276%20%\u00A4280%20%\u00A4281%20%\u00A4283%20%\u00A4287%20%\u00A4287%20%\u00A4287%20%\u00A4285%20%\u00A4287%20%\u00A4284%20%\u00A4284%20%\u00A4284%20%\u00A4283%20%\u00A4280%20%\u00A4281%20%\u00A4281%20%\u00A4281%20%\u00A4279%20%\u00A4282%20%\u00A4281%20%\u00A4280%20%\u00A4281%20%\u00A4280%20%\u00A4281%20%\u00A4280%20%\u00A4280%20%\u00A4279%20%\u00A4276%20%\u00A4282%20%\u00A4282%20%\u00A4283%20%\u00A4285%20%\u00A4286%20%\u00A4289%20%\u00A4276%20%\u00A4280%20%\u00A4278%20%\u00A4279%20%\u00A4282%20%\u00A4282%20%\u00A4275%20%\u00A4275%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4277%20%\u00A4278%20%\u00A4278%20%\u00A4285%20%\u00A4285%20%\u00A4286%20%\u00A4286%20%\u00A4286%20%\u00A4287%20%\u00A4290%20%\u00A4293%20%\u00A4293%20%\u00A4290%20%\u00A4290%20%\u00A4279%20%\u00A4279%20%\u00A4278%20%\u00A4278%20%\u00A4278%20%\u00A4278%20%\u00A4278%20%\u00A4278%20%\u00A4277%20%\u00A4278%20%\u00A4280%20%\u00A4281%20%\u00A4281%20%\u00A4281%20%\u00A4284%20%\u00A4284%20%\u00A4283%20%\u00A4284%20%\u00A4285%20%\u00A4285%20%\u00A4285%20%\u00A4283%20%\u00A4286%20%\u00A4286%20%\u00A4286%20%\u00A4286%20%\u00A4287%20%\u00A4281%20%\u00A4282%20%\u00A4282%20%\u00A4283%20%\u00A4284%20%\u00A4284%20%\u00A4289%20%\u00A4289%20%\u00A4292%20%\u00A4284%20%\u00A4284%20%\u00A4286%20%\u00A4290%20%\u00A4287%20%\u00A4286%20%\u00A4285%20%\u00A4287%20%\u00A4287%20%\u00A4287%20%\u00A4287%20%\u00A4287%20%\u00A4292%20%\u00A4295%20%\u00A4278%20%\u00A4280%20%\u00A4280%20%\u00A4276%20%\u00A4278%20%\u00A4278%20%\u00A4278%20%\u00A4281%20%\u00A4281%20%\u00A4277%20%\u00A4283%20%\u00A4283%20%\u00A4282%20%\u00A4281%20%\u00A4284%20%\u00A4284%20%\u00A4284%20%\u00A4284%20%\u00A4287%20%\u00A4285%20%\u00A4285%20%\u00A4283%20%\u00A4283%20%\u00A4283%20%\u00A4279%20%\u00A4279%20%\u00A4278%20%\u00A4280%20%\u00A4279%20%\u00A4278%20%\u00A4280%20%\u00A4282%20%\u00A4283%20%\u00A4284%20%\u00A4283%20%\u00A4281%20%\u00A4280%20%\u00A4280%20%\u00A4284%20%\u00A4284%20%\u00A4284%20%\u00A4279%20%\u00A4285%20%\u00A4284%20%\u00A4284%20%\u00A4285%20%\u00A4290%20%\u00A4284%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20%\u00A4280%20";
_level3.enemies = "237%45%1093%\u00A4142%67%1093%\u00A4121%67%1093%\u00A497%67%1093%\u00A469%67%1093%\u00A442%67%1093%\u00A4188%67%1093%\u00A4221%1%1101%\u00A468%1%1101%\u00A4236%1%1100%\u00A486%1%1100%\u00A4227%1%1099%\u00A476%1%1099%\u00A491%1%1098%\u00A4241%1%1098%\u00A4225%1%1097%\u00A470%1%1097%\u00A449%1%1096%\u00A4211%1%1096%\u00A4220%1%1095%\u00A471%1%1095%\u00A489%1%1094%\u00A4238%1%1094%\u00A475%54%1010%\u00A4224%54%1010%\u00A4145%71%1088%\u00A4206%68%1088%\u00A4118%66%1088%\u00A478%66%1088%\u00A438%66%1088%\u00A432%66%1088%\u00A4236%66%1088%\u00A4265%66%1088%\u00A485%71%1089%\u00A4229%68%1089%\u00A455%66%1089%\u00A433%66%1089%\u00A4148%67%1089%\u00A4199%67%1089%\u00A4261%66%1089%\u00A4157%72%1089%\u00A4195%72%1089%\u00A4235%72%1089%\u00A4256%72%1089%\u00A434%71%1090%\u00A4259%68%1090%\u00A488%67%1090%\u00A4148%67%1090%\u00A4199%67%1090%\u00A4222%67%1090%\u00A4280%66%1090%\u00A4157%72%1090%\u00A4105%72%1090%\u00A497%72%1090%\u00A4206%72%1090%\u00A4240%72%1090%\u00A480%1%1092%\u00A4274%1%1092%\u00A4173%7%1092%\u00A4188%67%1092%\u00A494%1%1091%\u00A4253%1%1091%\u00A4219%70%168%\u00A477%69%168%\u00A460%66%168%\u00A430%66%168%\u00A4255%66%168%\u00A4280%66%168%\u00A486%67%166%\u00A4212%67%166%\u00A486%67%165%\u00A4212%67%165%\u00A4231%70%129%\u00A4268%66%129%\u00A4104%69%129%\u00A480%66%129%\u00A445%66%129%\u00A423%66%129%\u00A426%70%127%\u00A4109%71%127%\u00A461%66%127%\u00A479%66%127%\u00A4232%68%127%\u00A4265%66%127%\u00A420%67%126%\u00A420%67%124%\u00A4228%70%123%\u00A4261%66%123%\u00A420%67%123%\u00A4229%68%121%\u00A4263%66%121%\u00A4151%67%17%\u00A4151%67%15%\u00A4151%67%13%\u00A4151%67%11%\u00A4237%67%25%\u00A4237%67%23%\u00A4237%67%21%\u00A4154%70%21%\u00A4181%66%21%\u00A4209%66%21%\u00A4239%66%21%\u00A4261%66%21%\u00A4237%67%19%\u00A4149%67%19%\u00A4160%68%9%\u00A4187%66%9%\u00A4210%66%9%\u00A4243%66%9%\u00A4256%66%9%\u00A4273%3%412%\u00A420%1%412%\u00A448%67%411%\u00A4230%37%411%\u00A4234%3%405%\u00A449%67%405%\u00A449%67%409%\u00A4178%37%409%\u00A450%67%385%\u00A428%68%386%\u00A446%64%386%\u00A421%67%387%\u00A421%67%388%\u00A426%67%394%\u00A421%67%392%\u00A421%67%390%\u00A420%67%361%\u00A420%67%360%\u00A420%67%353%\u00A420%67%354%\u00A420%67%356%\u00A420%67%358%\u00A448%65%362%\u00A427%66%362%\u00A420%67%362%\u00A457%67%363%\u00A4254%4%468%\u00A4100%4%468%\u00A451%4%468%\u00A495%4%466%\u00A447%4%466%\u00A4121%4%465%\u00A468%4%465%\u00A4240%4%465%\u00A4115%4%463%\u00A463%4%463%\u00A4240%4%463%\u00A482%4%462%\u00A441%4%462%\u00A435%4%461%\u00A4245%4%461%\u00A463%4%459%\u00A4109%4%459%\u00A4244%4%459%\u00A4111%4%457%\u00A464%4%457%\u00A437%4%456%\u00A485%4%456%\u00A4136%4%456%\u00A4271%4%458%\u00A436%4%458%\u00A487%4%458%\u00A4137%4%458%\u00A487%4%452%\u00A4266%4%452%\u00A462%4%453%\u00A4122%4%453%\u00A4219%4%453%\u00A486%4%454%\u00A4263%4%454%\u00A4238%4%446%\u00A454%4%446%\u00A4270%4%447%\u00A4267%4%448%\u00A435%4%448%\u00A4234%4%448%\u00A4132%4%448%\u00A486%4%448%\u00A476%4%445%\u00A4271%4%445%\u00A4134%4%445%\u00A455%4%444%\u00A4102%4%444%\u00A4248%4%444%\u00A457%4%442%\u00A4251%4%442%\u00A441%4%441%\u00A478%4%441%\u00A4226%4%441%\u00A4270%4%441%\u00A457%4%440%\u00A4201%4%440%\u00A4250%4%440%\u00A476%4%439%\u00A442%4%439%\u00A4225%4%439%\u00A4271%4%439%\u00A4224%5%467%\u00A471%4%467%\u00A4118%4%467%\u00A4149%5%464%\u00A441%4%464%\u00A492%4%464%\u00A4215%5%460%\u00A436%4%460%\u00A480%4%460%\u00A4262%4%460%\u00A4157%5%455%\u00A4114%4%455%\u00A463%4%455%\u00A4224%5%450%\u00A4132%5%443%\u00A480%4%443%\u00A437%4%443%\u00A4273%4%443%\u00A4175%5%438%\u00A4263%1%437%\u00A4180%3%437%\u00A4194%3%436%\u00A4214%66%436%\u00A4233%71%436%\u00A4209%3%435%\u00A4234%66%435%\u00A4226%3%434%\u00A4247%66%434%\u00A4239%3%433%\u00A4259%66%433%\u00A4252%3%432%\u00A4272%66%432%\u00A4259%3%431%\u00A4280%66%431%\u00A4259%3%430%\u00A4280%66%430%\u00A4258%3%429%\u00A4280%66%429%\u00A4254%3%428%\u00A4280%66%428%\u00A469%3%427%\u00A4247%3%427%\u00A4270%66%427%\u00A452%3%426%\u00A4232%3%426%\u00A444%3%425%\u00A440%3%424%\u00A456%69%424%\u00A439%3%423%\u00A470%3%423%\u00A444%3%422%\u00A466%67%422%\u00A452%3%421%\u00A466%67%421%\u00A4271%3%420%\u00A472%3%420%\u00A4277%3%419%\u00A4280%3%418%\u00A4280%3%417%\u00A4280%3%416%\u00A4280%3%415%\u00A4280%3%414%\u00A4276%3%413%\u00A4170%39%407%\u00A449%67%407%\u00A454%3%410%\u00A454%3%408%\u00A454%3%406%\u00A4233%3%404%\u00A449%67%404%\u00A4230%72%404%\u00A4233%3%403%\u00A456%68%403%\u00A482%69%403%\u00A4229%72%403%\u00A4229%3%401%\u00A4236%72%401%\u00A4231%3%402%\u00A488%71%402%\u00A4234%72%402%\u00A4225%3%400%\u00A4263%66%400%\u00A4220%3%399%\u00A4258%66%399%\u00A4214%3%398%\u00A4246%70%398%\u00A4267%65%398%\u00A4245%66%398%\u00A4201%3%397%\u00A426%67%397%\u00A4240%67%397%\u00A4231%66%397%\u00A4271%66%397%\u00A4185%3%396%\u00A422%64%396%\u00A4240%67%396%\u00A4197%72%396%\u00A4167%3%395%\u00A426%67%395%\u00A431%3%393%\u00A427%3%391%\u00A427%3%389%\u00A4280%3%378%\u00A4257%3%377%\u00A4264%72%377%\u00A4230%3%376%\u00A448%69%376%\u00A422%64%376%\u00A4240%72%376%\u00A4197%3%375%\u00A457%67%375%\u00A4201%72%375%\u00A4242%72%375%\u00A4177%3%374%\u00A451%65%374%\u00A430%66%374%\u00A4182%72%374%\u00A4221%72%374%\u00A4258%72%374%\u00A4177%3%373%\u00A4240%2%373%\u00A426%69%373%\u00A458%67%373%\u00A4185%72%373%\u00A4225%72%373%\u00A4267%72%373%\u00A4192%3%372%\u00A435%67%372%\u00A458%67%372%\u00A4243%68%372%\u00A4280%66%372%\u00A4200%72%372%\u00A4240%72%372%\u00A4211%3%371%\u00A435%67%371%\u00A458%67%371%\u00A4212%72%371%\u00A4252%72%371%\u00A4240%3%370%\u00A458%67%370%\u00A4247%72%370%\u00A423%3%359%\u00A422%3%357%\u00A424%3%355%\u00A472%67%345%\u00A4209%67%345%\u00A4188%67%345%\u00A450%70%344%\u00A472%67%344%\u00A4243%69%344%\u00A4216%68%344%\u00A4188%67%344%\u00A444%67%342%\u00A4222%69%342%\u00A4195%68%342%\u00A4252%67%342%\u00A444%67%340%\u00A4231%67%340%\u00A4251%67%340%\u00A444%67%338%\u00A4251%67%338%\u00A4231%67%338%\u00A436%1%343%\u00A4255%1%343%\u00A435%1%346%\u00A4255%1%346%\u00A436%1%341%\u00A4255%1%341%\u00A436%1%339%\u00A4255%1%339%\u00A437%1%337%\u00A4255%1%337%\u00A4216%51%315%\u00A450%52%322%\u00A437%1%324%\u00A4276%1%317%\u00A456%1%309%\u00A4103%4%334%\u00A438%4%334%\u00A472%4%334%\u00A4190%4%334%\u00A4224%4%334%\u00A4262%4%334%\u00A4104%4%333%\u00A471%4%333%\u00A435%4%333%\u00A4221%4%333%\u00A4189%4%333%\u00A4259%4%333%\u00A436%4%332%\u00A472%4%332%\u00A4105%4%332%\u00A4189%4%332%\u00A4222%4%332%\u00A4262%4%332%\u00A437%4%331%\u00A471%4%331%\u00A4221%4%331%\u00A4261%4%331%\u00A437%4%330%\u00A4262%4%330%\u00A437%1%335%\u00A4256%1%335%\u00A444%4%305%\u00A4258%4%305%\u00A444%4%304%\u00A4258%4%304%\u00A444%4%303%\u00A4253%4%303%\u00A450%4%302%\u00A4244%4%302%\u00A459%4%301%\u00A4229%4%301%\u00A482%4%300%\u00A4231%4%300%\u00A4100%4%299%\u00A4231%4%299%\u00A4116%4%298%\u00A4237%4%298%\u00A4129%4%297%\u00A4241%4%297%\u00A4140%4%296%\u00A4250%4%296%\u00A4151%4%295%\u00A4256%4%295%\u00A4158%4%294%\u00A4264%4%294%\u00A4162%4%293%\u00A4269%4%293%\u00A4164%4%292%\u00A4271%4%292%\u00A4159%4%291%\u00A4270%4%291%\u00A4151%4%290%\u00A4261%4%290%\u00A4138%4%289%\u00A4255%4%289%\u00A4126%4%288%\u00A4251%4%288%\u00A4111%4%287%\u00A4233%4%287%\u00A4101%4%286%\u00A4209%4%286%\u00A487%4%285%\u00A4197%4%285%\u00A481%4%284%\u00A4190%4%284%\u00A477%4%283%\u00A4189%4%283%\u00A477%4%282%\u00A4189%4%282%\u00A473%4%281%\u00A4185%4%281%\u00A472%4%280%\u00A4185%4%280%\u00A471%4%279%\u00A4185%4%279%\u00A473%4%278%\u00A4190%4%278%\u00A485%4%277%\u00A4200%4%277%\u00A495%4%276%\u00A4212%4%276%\u00A4110%4%275%\u00A4226%4%275%\u00A4122%4%274%\u00A4235%4%274%\u00A4136%4%273%\u00A4247%4%273%\u00A4147%4%272%\u00A4259%4%272%\u00A452%4%271%\u00A483%4%271%\u00A4116%4%271%\u00A4152%4%271%\u00A4270%4%271%\u00A438%1%198%\u00A4260%1%198%\u00A4162%4%175%\u00A4191%4%175%\u00A454%4%185%\u00A4221%4%185%\u00A491%4%185%\u00A4187%4%185%\u00A454%4%184%\u00A4221%4%184%\u00A454%4%183%\u00A491%4%183%\u00A4189%4%183%\u00A4221%4%183%\u00A454%4%182%\u00A4189%4%182%\u00A4221%4%182%\u00A4258%4%182%\u00A454%4%181%\u00A490%4%181%\u00A4162%4%181%\u00A4190%4%181%\u00A454%4%180%\u00A4190%4%180%\u00A4220%4%180%\u00A4252%4%180%\u00A454%4%179%\u00A489%4%179%\u00A4162%4%179%\u00A4191%4%179%\u00A454%4%178%\u00A4191%4%178%\u00A4225%4%178%\u00A4258%4%178%\u00A454%4%177%\u00A488%4%177%\u00A4162%4%177%\u00A4191%4%177%\u00A454%4%176%\u00A4162%4%176%\u00A4191%4%176%\u00A4221%4%176%\u00A4252%4%176%\u00A4259%1%186%\u00A438%1%186%\u00A423%63%174%\u00A4162%4%174%\u00A4191%4%174%\u00A4224%4%174%\u00A4254%4%174%\u00A489%3%167%\u00A4218%3%167%\u00A4249%66%167%\u00A4277%66%167%\u00A454%66%167%\u00A425%66%167%\u00A477%1%159%\u00A4257%63%159%\u00A4256%63%159%\u00A4228%1%172%\u00A4228%1%170%\u00A425%32%170%\u00A421%1%164%\u00A4280%1%164%\u00A477%1%156%\u00A4256%63%156%\u00A455%1%154%\u00A4255%63%154%\u00A429%1%152%\u00A4279%1%152%\u00A420%1%150%\u00A4266%1%150%\u00A430%1%148%\u00A4279%1%148%\u00A465%1%146%\u00A4268%34%146%\u00A466%1%144%\u00A4268%34%144%\u00A423%1%142%\u00A4263%1%142%\u00A424%1%131%\u00A4262%1%131%\u00A4117%3%128%\u00A4230%3%128%\u00A4269%66%128%\u00A4117%3%122%\u00A4228%3%122%\u00A463%72%122%\u00A424%72%122%\u00A4239%72%122%\u00A420%5%122%\u00A424%1%125%\u00A4259%1%125%\u00A428%1%119%\u00A4259%1%119%\u00A4121%3%24%\u00A4237%67%24%\u00A4131%72%24%\u00A4157%72%24%\u00A4185%72%24%\u00A4225%72%24%\u00A4251%72%24%\u00A4148%3%22%\u00A4237%67%22%\u00A4156%72%22%\u00A4187%72%22%\u00A4220%72%22%\u00A4251%72%22%\u00A4155%3%20%\u00A4237%67%20%\u00A4163%72%20%\u00A4196%72%20%\u00A4231%72%20%\u00A4245%72%20%\u00A4154%3%18%\u00A4274%66%18%\u00A4244%68%18%\u00A4163%72%18%\u00A4197%72%18%\u00A4237%72%18%\u00A4156%3%16%\u00A4165%72%16%\u00A4200%72%16%\u00A4233%72%16%\u00A4253%72%16%\u00A4157%3%14%\u00A4165%72%14%\u00A4195%72%14%\u00A4228%72%14%\u00A4247%72%14%\u00A4156%3%12%\u00A4166%72%12%\u00A4197%72%12%\u00A4224%72%12%\u00A4249%72%12%\u00A4156%3%10%\u00A4167%72%10%\u00A4200%72%10%\u00A4245%72%10%\u00A4236%72%10%\u00A4270%20%60%\u00A4106%3%60%\u00A453%72%60%\u00A4272%21%52%\u00A4107%3%52%\u00A451%72%52%\u00A4101%2%31%\u00A4104%2%32%\u00A4104%2%33%\u00A4104%2%34%\u00A4105%2%35%\u00A4105%2%36%\u00A4103%2%37%\u00A4103%2%38%\u00A4104%2%39%\u00A4104%2%40%\u00A4103%2%41%\u00A4105%2%42%\u00A4103%2%43%\u00A4107%2%44%\u00A4109%2%45%\u00A4124%2%46%\u00A4107%3%54%\u00A453%72%54%\u00A4107%3%56%\u00A453%72%56%\u00A4107%3%58%\u00A453%72%58%\u00A4108%3%62%\u00A454%72%62%\u00A4108%3%64%\u00A455%72%64%\u00A485%2%72%\u00A485%2%73%\u00A485%2%74%\u00A485%2%75%\u00A485%2%76%\u00A485%2%77%\u00A490%2%78%\u00A4101%2%79%\u00A492%2%71%\u00A4171%3%90%\u00A4119%72%90%\u00A4171%3%92%\u00A4119%72%92%\u00A4171%3%94%\u00A4119%72%94%\u00A488%2%104%\u00A486%2%105%\u00A486%2%106%\u00A484%2%107%\u00A485%2%108%\u00A485%2%109%\u00A486%2%110%\u00A486%2%111%\u00A488%2%112%\u00A495%3%201%\u00A4205%3%201%\u00A495%3%203%\u00A4205%3%203%\u00A496%3%205%\u00A4205%3%205%\u00A495%3%207%\u00A4204%3%207%\u00A494%3%209%\u00A4206%3%209%\u00A495%3%211%\u00A4205%3%211%\u00A497%3%213%\u00A4208%3%213%\u00A496%3%215%\u00A4208%3%215%\u00A494%3%217%\u00A4211%3%217%\u00A4105%3%219%\u00A4232%3%219%\u00A4114%3%221%\u00A4257%3%221%\u00A4134%3%223%\u00A4274%3%223%\u00A4151%3%225%\u00A4274%3%225%\u00A4158%3%227%\u00A4278%3%227%\u00A4168%3%229%\u00A4280%3%229%\u00A4167%3%231%\u00A4280%3%231%\u00A4166%3%233%\u00A4280%3%233%\u00A4156%3%235%\u00A4276%3%235%\u00A4144%3%237%\u00A4270%3%237%\u00A4127%3%239%\u00A4267%3%239%\u00A4109%3%241%\u00A4259%3%241%\u00A483%3%243%\u00A4247%3%243%\u00A468%3%245%\u00A4236%3%245%\u00A466%3%247%\u00A4223%3%247%\u00A472%3%251%\u00A4223%3%251%\u00A476%3%253%\u00A4228%3%253%\u00A486%3%255%\u00A4238%3%255%\u00A4105%3%257%\u00A4251%3%257%\u00A4125%3%259%\u00A4264%3%259%\u00A4142%3%261%\u00A4274%3%261%\u00A4149%3%263%\u00A4280%3%263%\u00A4156%3%265%\u00A4280%3%265%\u00A4155%3%267%\u00A4280%3%267%\u00A4155%3%269%\u00A4278%3%269%\u00A466%3%249%\u00A4219%3%249%\u00A430%4%517%\u00A463%4%517%\u00A496%4%517%\u00A4216%4%517%\u00A4248%4%517%\u00A4278%4%517%\u00A4225%3%518%\u00A490%3%518%\u00A456%66%518%\u00A422%66%518%\u00A4252%66%518%\u00A4280%66%518%\u00A4224%3%520%\u00A488%3%520%\u00A458%66%520%\u00A420%66%520%\u00A4249%66%520%\u00A4280%66%520%\u00A4218%3%521%\u00A479%3%521%\u00A448%66%521%\u00A424%66%521%\u00A4242%66%521%\u00A4276%66%521%\u00A4198%3%522%\u00A462%3%522%\u00A430%66%522%\u00A4225%66%522%\u00A4263%66%522%\u00A4280%66%522%\u00A4195%3%524%\u00A461%3%524%\u00A427%66%524%\u00A4224%66%524%\u00A4260%66%524%\u00A4280%66%524%\u00A461%3%526%\u00A4192%3%526%\u00A426%66%526%\u00A4216%66%526%\u00A4252%66%526%\u00A4280%66%526%\u00A460%3%528%\u00A4195%3%528%\u00A429%66%528%\u00A4224%66%528%\u00A4256%66%528%\u00A4280%66%528%\u00A460%3%530%\u00A4196%3%530%\u00A431%66%530%\u00A4224%66%530%\u00A4261%66%530%\u00A4280%66%530%\u00A467%3%532%\u00A4204%3%532%\u00A434%66%532%\u00A4232%66%532%\u00A4268%66%532%\u00A4280%66%532%\u00A472%3%534%\u00A4207%3%534%\u00A4235%66%534%\u00A4270%66%534%\u00A4280%66%534%\u00A439%66%534%\u00A427%66%534%\u00A481%3%536%\u00A4221%3%536%\u00A4251%66%536%\u00A4280%66%536%\u00A454%66%536%\u00A426%66%536%\u00A492%3%540%\u00A4248%3%540%\u00A460%66%540%\u00A432%66%540%\u00A4277%66%540%\u00A4101%3%542%\u00A4255%3%542%\u00A467%66%542%\u00A427%66%542%\u00A4280%66%542%\u00A4109%3%544%\u00A4257%3%544%\u00A478%66%544%\u00A438%66%544%\u00A4280%66%544%\u00A4120%3%546%\u00A4253%3%546%\u00A489%66%546%\u00A450%66%546%\u00A423%66%546%\u00A4280%66%546%\u00A4128%3%548%\u00A4249%3%548%\u00A495%66%548%\u00A458%66%548%\u00A429%66%548%\u00A4277%66%548%\u00A4137%3%550%\u00A4240%3%550%\u00A4105%66%550%\u00A466%66%550%\u00A435%66%550%\u00A4268%66%550%\u00A4280%66%550%\u00A4137%3%557%\u00A4240%3%557%\u00A482%72%557%\u00A441%72%557%\u00A464%72%557%\u00A420%72%557%\u00A4251%72%557%\u00A4279%72%557%\u00A4134%3%561%\u00A4240%3%561%\u00A480%72%561%\u00A444%72%561%\u00A420%72%561%\u00A4249%72%561%\u00A4271%72%561%\u00A4129%3%563%\u00A4237%3%563%\u00A473%72%563%\u00A441%72%563%\u00A420%72%563%\u00A4247%72%563%\u00A4272%72%563%\u00A4120%3%565%\u00A4233%3%565%\u00A425%72%565%\u00A421%72%565%\u00A420%72%565%\u00A465%72%565%\u00A4242%72%565%\u00A4266%72%565%\u00A4103%3%567%\u00A4223%3%567%\u00A449%72%567%\u00A420%72%567%\u00A4233%72%567%\u00A4267%72%567%\u00A492%3%569%\u00A4214%3%569%\u00A437%72%569%\u00A420%72%569%\u00A4224%72%569%\u00A4264%72%569%\u00A475%3%571%\u00A4198%3%571%\u00A420%72%571%\u00A4206%72%571%\u00A4242%72%571%\u00A4280%72%571%\u00A456%3%573%\u00A4191%3%573%\u00A4200%72%573%\u00A4237%72%573%\u00A4260%72%573%\u00A449%3%575%\u00A4187%3%575%\u00A4196%72%575%\u00A4233%72%575%\u00A4257%72%575%\u00A4240%3%559%\u00A4134%3%559%\u00A479%72%559%\u00A441%72%559%\u00A420%72%559%\u00A4249%72%559%\u00A4277%72%559%\u00A4189%3%577%\u00A441%3%577%\u00A4196%72%577%\u00A4234%72%577%\u00A4271%72%577%\u00A4219%67%519%\u00A485%67%519%\u00A4228%65%538%\u00A478%65%538%\u00A4248%72%538%\u00A4261%72%538%\u00A435%72%538%\u00A420%72%538%\u00A483%71%537%\u00A449%66%537%\u00A434%66%537%\u00A487%67%539%\u00A4244%67%539%\u00A420%72%552%\u00A460%72%552%\u00A4102%63%552%\u00A4238%70%552%\u00A4259%64%552%\u00A4275%72%552%\u00A420%72%555%\u00A459%72%555%\u00A4102%63%555%\u00A4235%67%555%\u00A4118%67%553%\u00A4132%67%551%\u00A4232%67%551%\u00A4132%67%556%\u00A4235%67%556%\u00A4271%65%554%\u00A4118%67%554%\u00A4229%72%554%\u00A4231%64%554%\u00A448%71%572%\u00A420%66%572%\u00A442%71%574%\u00A420%66%574%\u00A434%71%576%\u00A4188%70%578%\u00A4227%3%578%\u00A4237%72%578%\u00A4277%72%578%\u00A443%71%578%\u00A420%66%578%\u00A479%67%486%\u00A445%69%486%\u00A421%66%486%\u00A4240%67%486%\u00A4277%70%486%\u00A470%69%487%\u00A443%66%487%\u00A429%66%487%\u00A4246%70%487%\u00A4280%66%487%\u00A429%4%488%\u00A4257%68%488%\u00A4280%66%488%\u00A429%4%489%\u00A4245%65%489%\u00A4270%72%489%\u00A431%4%490%\u00A4250%67%490%\u00A434%4%491%\u00A4244%65%491%\u00A4268%72%491%\u00A435%4%492%\u00A4250%67%492%\u00A437%4%493%\u00A4255%4%493%\u00A440%4%494%\u00A4255%4%494%\u00A442%4%495%\u00A4255%4%495%\u00A443%4%496%\u00A4256%4%496%\u00A445%4%497%\u00A4256%4%497%\u00A447%4%498%\u00A4252%4%498%\u00A449%4%499%\u00A4251%4%499%\u00A450%4%500%\u00A4250%4%500%\u00A451%4%501%\u00A4250%4%501%\u00A453%4%502%\u00A4249%4%502%\u00A455%4%503%\u00A4248%4%503%\u00A457%4%504%\u00A4248%4%504%\u00A457%4%505%\u00A4248%4%505%\u00A459%4%506%\u00A4246%4%506%\u00A461%4%507%\u00A4242%4%507%\u00A463%4%508%\u00A4240%4%508%\u00A466%4%509%\u00A4238%4%509%\u00A468%4%510%\u00A4238%4%510%\u00A470%4%511%\u00A4235%4%511%\u00A472%4%512%\u00A4234%4%512%\u00A475%4%513%\u00A4228%4%513%\u00A480%4%514%\u00A4225%4%514%\u00A487%4%515%\u00A4221%4%515%\u00A493%4%516%\u00A4217%4%516%\u00A431%63%579%\u00A4271%20%579%\u00A437%63%581%\u00A4219%39%581%\u00A453%63%583%\u00A431%66%583%\u00A494%63%587%\u00A4253%63%587%\u00A451%72%587%\u00A420%72%587%\u00A4100%63%589%\u00A457%72%589%\u00A420%72%589%\u00A4251%63%589%\u00A495%63%591%\u00A451%72%591%\u00A420%72%591%\u00A4251%63%591%\u00A482%63%593%\u00A4251%63%593%\u00A438%72%593%\u00A420%72%593%\u00A464%63%595%\u00A4239%63%595%\u00A420%72%595%\u00A4276%72%595%\u00A447%63%597%\u00A4214%63%597%\u00A4252%72%597%\u00A4251%72%597%\u00A4276%72%597%\u00A448%63%599%\u00A4274%41%599%\u00A451%63%601%\u00A459%63%603%\u00A4193%63%603%\u00A4230%72%603%\u00A4268%72%603%\u00A474%63%605%\u00A4203%63%605%\u00A420%72%605%\u00A433%72%605%\u00A4240%72%605%\u00A4280%72%605%\u00A492%63%607%\u00A4224%63%607%\u00A420%72%607%\u00A450%72%607%\u00A4263%72%607%\u00A4111%63%609%\u00A4237%63%609%\u00A420%72%609%\u00A448%72%609%\u00A468%72%609%\u00A4276%72%609%\u00A4126%63%611%\u00A4248%63%611%\u00A483%72%611%\u00A444%72%611%\u00A420%72%611%\u00A4130%63%613%\u00A4250%63%613%\u00A487%72%613%\u00A447%72%613%\u00A420%72%613%\u00A4127%63%615%\u00A4244%63%615%\u00A420%72%615%\u00A459%72%615%\u00A484%72%615%\u00A448%72%585%\u00A420%72%585%\u00A4275%68%585%\u00A4280%65%585%\u00A4105%5%585%\u00A4259%67%588%\u00A4275%67%588%\u00A4258%67%590%\u00A4275%67%590%\u00A4266%67%592%\u00A4215%68%602%\u00A471%71%602%\u00A438%66%602%\u00A463%71%600%\u00A430%66%600%\u00A460%71%598%\u00A428%66%598%\u00A460%71%596%\u00A428%66%596%\u00A4280%66%614%\u00A4268%68%614%\u00A4280%66%612%\u00A4268%68%612%\u00A4280%66%610%\u00A4268%68%610%\u00A4268%67%586%\u00A4257%67%594%\u00A467%71%582%\u00A434%66%582%\u00A449%71%580%\u00A420%66%580%\u00A445%4%617%\u00A483%4%617%\u00A4124%4%617%\u00A4238%4%617%\u00A4277%4%617%\u00A482%4%618%\u00A444%4%618%\u00A4116%4%618%\u00A4231%4%618%\u00A4269%4%618%\u00A483%4%619%\u00A4225%4%619%\u00A442%52%627%\u00A4213%51%627%\u00A442%52%630%\u00A424%52%633%\u00A422%52%636%\u00A421%52%639%\u00A4241%51%638%\u00A4241%51%641%\u00A458%54%478%\u00A4239%54%478%\u00A452%63%485%\u00A4240%63%485%\u00A4280%63%485%\u00A429%66%485%\u00A467%67%483%\u00A4250%67%483%\u00A4267%67%483%\u00A467%67%484%\u00A4250%67%484%\u00A4267%67%484%\u00A4259%1%477%\u00A438%1%477%\u00A488%4%471%\u00A4223%4%471%\u00A489%4%472%\u00A4223%4%472%\u00A489%4%473%\u00A4223%4%473%\u00A489%4%474%\u00A4224%4%474%\u00A489%4%475%\u00A4223%4%475%\u00A489%4%476%\u00A4223%4%476%\u00A4265%20%644%\u00A436%67%644%\u00A444%52%644%\u00A4264%19%649%\u00A420%63%649%\u00A4263%19%653%\u00A465%67%653%\u00A425%67%653%\u00A442%67%653%\u00A4267%21%657%\u00A448%70%657%\u00A474%71%657%\u00A433%71%657%\u00A4265%20%664%\u00A420%63%664%\u00A4267%21%673%\u00A420%63%673%\u00A4280%28%669%\u00A434%67%669%\u00A4253%32%671%\u00A433%67%671%\u00A442%52%671%\u00A420%63%643%\u00A420%63%646%\u00A420%63%652%\u00A465%67%652%\u00A420%63%655%\u00A442%67%655%\u00A421%63%658%\u00A477%67%658%\u00A420%63%661%\u00A421%63%667%\u00A420%63%670%\u00A420%63%676%\u00A420%63%679%\u00A484%71%679%\u00A468%68%679%\u00A420%63%682%\u00A4265%67%682%\u00A4203%68%682%\u00A4238%66%682%\u00A4273%66%682%\u00A497%67%682%\u00A4206%67%682%\u00A420%63%685%\u00A4252%63%685%\u00A490%63%685%\u00A4175%63%685%\u00A469%66%685%\u00A430%66%685%\u00A4234%66%685%\u00A4268%66%685%\u00A420%63%688%\u00A4265%67%688%\u00A4198%68%688%\u00A4227%66%688%\u00A4272%66%688%\u00A4249%66%688%\u00A494%67%688%\u00A4114%67%688%\u00A4177%67%688%\u00A4251%63%683%\u00A427%67%683%\u00A444%67%683%\u00A4176%63%683%\u00A490%63%683%\u00A468%66%683%\u00A430%66%683%\u00A4236%66%683%\u00A4273%66%683%\u00A4252%63%687%\u00A427%67%687%\u00A444%67%687%\u00A491%63%687%\u00A4175%63%687%\u00A470%66%687%\u00A433%66%687%\u00A4234%66%687%\u00A4274%66%687%\u00A4252%63%689%\u00A434%67%689%\u00A490%63%689%\u00A4173%63%689%\u00A470%66%689%\u00A436%66%689%\u00A4232%66%689%\u00A4272%66%689%\u00A433%71%642%\u00A436%67%645%\u00A436%67%647%\u00A442%52%647%\u00A436%67%648%\u00A441%70%650%\u00A462%71%650%\u00A465%67%651%\u00A432%71%651%\u00A425%67%654%\u00A456%69%654%\u00A438%68%654%\u00A442%67%654%\u00A442%67%656%\u00A443%52%656%\u00A468%69%659%\u00A443%68%659%\u00A427%69%659%\u00A436%67%660%\u00A435%67%662%\u00A443%52%662%\u00A435%67%663%\u00A435%67%665%\u00A442%52%665%\u00A435%67%666%\u00A434%67%668%\u00A443%52%668%\u00A433%67%672%\u00A433%67%674%\u00A443%52%674%\u00A433%67%675%\u00A433%67%677%\u00A441%52%677%\u00A433%67%678%\u00A432%67%680%\u00A4272%68%680%\u00A487%67%680%\u00A461%67%680%\u00A4215%68%680%\u00A4248%66%680%\u00A4267%66%680%\u00A427%67%684%\u00A444%67%684%\u00A4265%67%684%\u00A4198%68%684%\u00A4232%66%684%\u00A4271%66%684%\u00A495%67%684%\u00A4114%67%684%\u00A4178%67%684%\u00A427%67%686%\u00A444%67%686%\u00A4265%67%686%\u00A4198%68%686%\u00A4233%66%686%\u00A4270%66%686%\u00A495%67%686%\u00A4114%67%686%\u00A4178%67%686%\u00A4265%67%690%\u00A420%63%690%\u00A494%67%690%\u00A4245%63%691%\u00A428%67%691%\u00A445%67%691%\u00A494%67%691%\u00A445%1%681%\u00A4250%1%681%\u00A440%1%692%\u00A471%63%695%\u00A420%63%695%\u00A4243%63%695%\u00A4157%63%695%\u00A462%63%696%\u00A420%63%696%\u00A4255%63%696%\u00A4157%63%696%\u00A452%63%697%\u00A420%63%697%\u00A4268%63%697%\u00A4157%63%697%\u00A440%63%698%\u00A420%63%698%\u00A4275%63%698%\u00A4157%63%698%\u00A432%63%699%\u00A420%63%699%\u00A4157%63%699%\u00A4276%63%701%\u00A440%63%701%\u00A420%63%701%\u00A4158%63%701%\u00A4271%63%702%\u00A450%63%702%\u00A420%63%702%\u00A4158%63%702%\u00A432%63%700%\u00A420%63%700%\u00A4158%63%700%\u00A461%63%703%\u00A4258%63%703%\u00A420%63%703%\u00A4158%63%703%\u00A473%63%704%\u00A4248%63%704%\u00A420%63%704%\u00A4226%63%705%\u00A489%63%705%\u00A420%63%705%\u00A4160%63%708%\u00A451%63%708%\u00A420%63%708%\u00A4270%63%708%\u00A4160%63%709%\u00A442%63%709%\u00A420%63%709%\u00A4273%63%709%\u00A4160%63%710%\u00A431%63%710%\u00A420%63%710%\u00A4160%63%711%\u00A431%63%711%\u00A420%63%711%\u00A4160%63%712%\u00A444%63%712%\u00A420%63%712%\u00A4274%63%712%\u00A420%63%706%\u00A472%63%706%\u00A4247%63%706%\u00A465%63%714%\u00A4255%63%714%\u00A420%63%714%\u00A4158%63%718%\u00A447%63%718%\u00A4278%63%718%\u00A420%63%718%\u00A4158%63%719%\u00A420%63%719%\u00A4158%63%720%\u00A420%63%720%\u00A4158%63%721%\u00A444%63%721%\u00A420%63%721%\u00A4158%63%722%\u00A444%63%722%\u00A4276%63%722%\u00A420%63%722%\u00A4158%63%723%\u00A421%63%723%\u00A4269%63%723%\u00A483%63%715%\u00A4234%63%715%\u00A420%63%707%\u00A460%63%707%\u00A4258%63%707%\u00A456%63%713%\u00A420%63%713%\u00A4262%63%713%\u00A467%63%716%\u00A4256%63%716%\u00A420%63%716%\u00A459%63%717%\u00A4269%63%717%\u00A420%63%717%\u00A421%63%724%\u00A4260%63%724%\u00A4246%63%725%\u00A444%63%725%\u00A420%63%725%\u00A4229%63%726%\u00A462%63%726%\u00A421%63%726%\u00A4210%63%727%\u00A475%63%727%\u00A421%63%727%\u00A482%63%732%\u00A4122%63%732%\u00A4161%63%732%\u00A482%63%733%\u00A4161%63%733%\u00A482%63%734%\u00A4161%63%734%\u00A482%63%735%\u00A4161%63%735%\u00A482%63%736%\u00A4161%63%736%\u00A482%63%737%\u00A4161%63%737%\u00A482%63%738%\u00A4161%63%738%\u00A482%63%739%\u00A4161%63%739%\u00A4210%63%728%\u00A461%63%728%\u00A420%63%728%\u00A4229%63%729%\u00A421%63%729%\u00A4249%63%730%\u00A4270%63%731%\u00A482%63%740%\u00A4161%63%740%\u00A420%63%743%\u00A4241%63%743%\u00A4122%63%741%\u00A4128%63%746%\u00A488%63%747%\u00A4169%63%747%\u00A488%63%748%\u00A4170%63%748%\u00A488%63%749%\u00A4170%63%749%\u00A488%63%750%\u00A4170%63%750%\u00A4130%63%751%\u00A421%63%754%\u00A4239%63%754%\u00A463%63%755%\u00A4197%63%755%\u00A421%63%756%\u00A4238%63%756%\u00A4132%63%759%\u00A492%63%760%\u00A4172%63%760%\u00A492%63%761%\u00A4172%63%761%\u00A492%63%762%\u00A4172%63%762%\u00A4133%63%763%\u00A4240%63%766%\u00A420%63%766%\u00A4240%63%767%\u00A4199%63%767%\u00A4240%63%768%\u00A4200%63%768%\u00A4159%63%768%\u00A4159%63%769%\u00A4119%63%769%\u00A4119%63%770%\u00A420%63%765%\u00A4226%54%777%\u00A463%54%777%\u00A420%63%775%\u00A4223%63%775%\u00A420%63%776%\u00A459%63%776%\u00A4183%63%776%\u00A4223%63%776%\u00A4251%18%783%\u00A420%50%783%\u00A4250%18%785%\u00A420%50%785%\u00A4249%18%787%\u00A420%50%787%\u00A4248%18%789%\u00A420%50%789%\u00A4249%18%791%\u00A420%50%791%\u00A4248%18%793%\u00A420%50%793%\u00A4248%18%795%\u00A420%50%795%\u00A4248%18%797%\u00A487%3%797%\u00A4249%18%799%\u00A487%3%799%\u00A4249%18%801%\u00A487%3%801%\u00A4248%18%803%\u00A486%3%803%\u00A4248%18%805%\u00A487%3%805%\u00A4248%18%807%\u00A487%3%807%\u00A4248%18%809%\u00A488%3%809%\u00A4248%18%811%\u00A487%3%811%\u00A4263%18%813%\u00A488%3%813%\u00A487%3%815%\u00A4244%3%815%\u00A485%3%817%\u00A4224%3%817%\u00A485%3%819%\u00A4201%3%819%\u00A485%3%821%\u00A4188%3%821%\u00A484%3%823%\u00A4178%3%823%\u00A485%3%825%\u00A4173%3%825%\u00A485%3%827%\u00A4173%3%827%\u00A485%3%829%\u00A4171%3%829%\u00A483%3%831%\u00A4171%3%831%\u00A483%3%833%\u00A4169%3%833%\u00A484%3%835%\u00A4165%3%835%\u00A483%3%837%\u00A4166%3%837%\u00A482%3%839%\u00A4165%3%839%\u00A481%3%841%\u00A4165%3%841%\u00A481%3%843%\u00A4164%3%843%\u00A481%3%845%\u00A4162%3%845%\u00A481%3%847%\u00A4160%3%847%\u00A481%3%849%\u00A4161%3%849%\u00A481%3%851%\u00A4161%3%851%\u00A483%3%853%\u00A4162%3%853%\u00A483%3%855%\u00A4163%3%855%\u00A483%3%857%\u00A4168%3%857%\u00A482%3%859%\u00A4171%3%859%\u00A4177%3%861%\u00A487%3%861%\u00A4181%3%863%\u00A489%3%863%\u00A4186%3%865%\u00A491%3%865%\u00A4193%3%867%\u00A495%3%867%\u00A4201%3%869%\u00A4101%3%869%\u00A4210%3%871%\u00A4109%3%871%\u00A4217%3%873%\u00A4115%3%873%\u00A4233%3%875%\u00A4125%3%875%\u00A4138%3%877%\u00A4244%3%877%\u00A4254%3%879%\u00A4150%3%879%\u00A4261%3%881%\u00A4154%3%881%\u00A4266%3%883%\u00A4156%3%883%\u00A4266%3%885%\u00A4154%3%885%\u00A4263%3%887%\u00A4149%3%887%\u00A4257%3%889%\u00A4142%3%889%\u00A4253%3%891%\u00A4136%3%891%\u00A4247%3%893%\u00A4130%3%893%\u00A4242%3%895%\u00A4124%3%895%\u00A4238%3%897%\u00A4119%3%897%\u00A4239%3%899%\u00A4111%3%899%\u00A4108%3%901%\u00A4228%3%901%\u00A4105%3%903%\u00A4220%3%903%\u00A4102%3%905%\u00A4210%3%905%\u00A499%3%907%\u00A4203%3%907%\u00A498%3%909%\u00A4197%3%909%\u00A496%3%911%\u00A4189%3%911%\u00A494%3%913%\u00A4179%3%913%\u00A491%3%915%\u00A4176%3%915%\u00A489%3%917%\u00A4175%3%917%\u00A486%3%919%\u00A4177%3%919%\u00A480%3%921%\u00A4183%3%921%\u00A448%54%927%\u00A4243%54%927%\u00A478%3%923%\u00A4187%3%923%\u00A480%3%925%\u00A4199%3%925%\u00A481%3%933%\u00A4211%3%933%\u00A480%3%935%\u00A4213%3%935%\u00A481%3%937%\u00A4212%3%937%\u00A481%3%939%\u00A4212%3%939%\u00A481%3%941%\u00A4213%3%941%\u00A480%3%943%\u00A4213%3%943%\u00A481%3%945%\u00A4215%3%945%\u00A482%3%947%\u00A4217%3%947%\u00A481%3%949%\u00A4218%3%949%\u00A481%3%951%\u00A4219%3%951%\u00A480%3%953%\u00A4219%3%953%\u00A483%3%955%\u00A4219%3%955%\u00A490%3%957%\u00A4216%3%957%\u00A499%3%959%\u00A4212%3%959%\u00A4105%3%961%\u00A4207%3%961%\u00A4107%3%963%\u00A4205%3%963%\u00A4107%3%965%\u00A4203%3%965%\u00A4106%3%967%\u00A4200%3%967%\u00A4106%3%969%\u00A4203%3%969%\u00A4106%3%971%\u00A4206%3%971%\u00A4107%3%973%\u00A4219%3%973%\u00A4108%3%975%\u00A4221%3%975%\u00A4107%3%977%\u00A4221%3%977%\u00A4106%3%979%\u00A4225%3%979%\u00A4107%3%981%\u00A4229%3%981%\u00A4104%3%983%\u00A4237%3%983%\u00A458%54%193%\u00A4240%54%193";
_level3.tiles = "tile12%445%\u00A4tile10%407%\u00A4tile10%388%\u00A4tile11%324%\u00A4tile10%305%\u00A4tile8%290%\u00A4tile7%227%\u00A4tile12%178%\u00A4tile10%42%\u00A4tile9%0%\u00A4tile7%511%\u00A4tile13%582%\u00A4tile10%592%\u00A4tile12%780%\u00A4tile7%832";
}
static function get level1() {
checkData();
if (_parsedLevel1 == null) {
_parsedLevel1 = parseLevel(_level1);
}
return(_parsedLevel1);
}
static function get level2() {
checkData();
if (_parsedLevel2 == null) {
_parsedLevel2 = parseLevel(_level2);
}
return(_parsedLevel2);
}
static function get level3() {
checkData();
if (_parsedLevel3 == null) {
_parsedLevel3 = parseLevel(_level3);
}
return(_parsedLevel3);
}
static function checkData() {
if (!initialized) {
var _local1 = new LevelData();
}
}
static function parseLevel(level) {
var _local21 = {data:{}};
_local21.data.data.splitnum = 40;
_local21.data.data.gameovertext = level.gameovertext;
var _local25 = new Array();
var _local10 = level.texts.split("\u00A4");
var _local1 = 0;
while (_local1 < _local10.length) {
var _local2 = _local10[_local1].split("%");
var _local5 = {x:_local2[1], value:_local2[0]};
_local25.push(_local5);
_local1++;
}
_local21.data.texts = [{text:_local25}];
var _local22 = new Array();
var _local11 = level.speeds.split("\u00A4");
_local1 = 0;
while (_local1 < _local11.length) {
var _local2 = _local11[_local1].split("%");
var _local3 = {x:_local2[1], value:_local2[0]};
_local22.push(_local3);
_local1++;
}
_local21.data.speeds = [{speed:_local22}];
var _local23 = new Array();
var _local12 = level.gravitys.split("\u00A4");
_local1 = 0;
while (_local1 < _local12.length) {
var _local2 = _local12[_local1].split("%");
var _local8 = {x:_local2[1], value:_local2[0]};
_local23.push(_local8);
_local1++;
}
_local21.data.gravitys = [{gravity:_local23}];
var _local27 = new Array();
var _local14 = level.walls.split("\u00A4");
_local1 = 0;
while (_local1 < _local14.length) {
var _local4 = _local14[_local1];
var _local2 = _local4.split("%");
var _local7 = {up:_local2[1], dn:_local2[0]};
_local27.push(_local7);
_local1++;
}
_local21.data.walls = [{x:_local27}];
var _local26 = new Array();
var _local9 = level.enemies.split("\u00A4");
_local1 = 0;
while (_local1 < _local9.length) {
var _local2 = _local9[_local1].split("%");
var _local6 = {x:_local2[2], type:_local2[1], y:_local2[0]};
_local26.push(_local6);
_local1++;
}
_local21.data.enemies = [{enemy:_local26}];
var _local24 = new Array();
var _local13 = level.tiles.split("\u00A4");
_local1 = 0;
while (_local1 < _local13.length) {
var _local2 = _local13[_local1].split("%");
var _local5 = {x:_local2[1], value:_local2[0]};
_local24.push(_local5);
_local1++;
}
_local21.data.tiles = [{tile:_local24}];
return(_local21);
}
static var initialized = false;
}
Symbol 390 MovieClip [__Packages.modules.musicmixer.Mute] Frame 0
class modules.musicmixer.Mute extends GameBase implements modules.musicmixer.IVolumeHandler
{
static var isEnabled;
var soundOn, soundOff, isMute, clickHandler, sTrace, volumeFunction, muteSymbol, delayId;
function Mute (soundOnLinkageId, soundOffLinkageId) {
super();
soundOn = soundOnLinkageId;
soundOff = soundOffLinkageId;
isMute = false;
isEnabled = true;
setClickHandler();
}
static function setEnabled(flag) {
SConsole.trace(["modules.musicmixer.mute"], "Enabling mute-function: " + flag);
isEnabled = flag;
}
function setClickHandler() {
clickHandler = new controls.KeyClickHandler(83);
clickHandler.setClickHandler(this, onMute);
}
function setVolumeHandler(f) {
sTrace("setting volumeFunction to " + f);
volumeFunction = f;
}
function onMute(doMute, useSymbol) {
if (!isEnabled) {
return(undefined);
}
if (useSymbol == undefined) {
useSymbol = true;
}
sTrace("mute is now " + isMute);
if (doMute == isMute) {
return(undefined);
}
isMute = !isMute;
var _local3 = (isMute ? 0 : 1);
var _local4 = (isMute ? (soundOff) : (soundOn));
volumeFunction.apply(null, [_local3]);
var _local8 = new Sound(_root);
_local8.setVolume(_local3 * 100);
if (useSymbol == false) {
return(undefined);
}
var _local5 = SConsole.module("screenManager").topLayer;
var _local7 = _local5.getNextHighestDepth();
muteSymbol.removeMovieClip();
utils.Delay.abort(delayId);
muteSymbol = _local5.attachMovie(_local4, _local4, _local7);
muteSymbol._x = (Stage.width - muteSymbol._width) - 3;
muteSymbol._y = (Stage.height - muteSymbol._height) - 3;
delayId = utils.Delay.create(muteSymbol, muteSymbol.removeMovieClip, 1100);
}
var namespace = new Array("modules", "musicmixer", "mute");
}
Symbol 391 MovieClip [__Packages.screens.SubmitScreen] Frame 0
class screens.SubmitScreen extends modules.screens.BaseScreen
{
var onlineHiscore, screen_mc, mc, name, cnt, outroTask, score, input;
function SubmitScreen (hiscoreManager) {
super();
onlineHiscore = hiscoreManager;
}
function intro(introTask) {
screen_mc = mc.attachMovie("submitScreen", "submitScreen", 1);
build();
name = "";
cnt = 0;
var _local3 = modules.musicmixer.MusicMixer(SConsole.module("musicmixer"));
_local3.abortAll();
SConsole.addTickListener(this);
SConsole.startTicker();
var _local2 = new mx.transitions.Tween(screen_mc, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 1, true);
_local2.onMotionFinished = utils.Proxy.create(introTask, introTask.completed);
Key.addListener(this);
modules.musicmixer.Mute.setEnabled(false);
}
function outro(outroTask) {
modules.musicmixer.Mute.setEnabled(true);
Key.removeListener(this);
SConsole.removeTickListener(this);
this.outroTask = outroTask;
var _local2 = new mx.transitions.Tween(screen_mc, "_alpha", mx.transitions.easing.Regular.easeOut, 100, 0, 0.5, true);
_local2.onMotionFinished = utils.Proxy.create(this, destroy);
}
function destroy() {
SConsole.stopTicker();
screen_mc.removeMovieClip();
outroTask.completed();
}
function build() {
score = new ui.Text(screen_mc, 100, 100, true, true, true, "SF Theramin Gothic Condensed", 20, 1098394);
score.__set___text("Your score is " + SConsole.session.getValue("hiscore"));
score.__get__movieClip()._x = 250 - (score.__get__movieClip()._width / 2);
score.__get__movieClip()._y = 70;
input = new ui.Text(screen_mc, 10, 10, true, true, true, "SF Theramin Gothic Condensed", 26, 1098394);
input.__get__movieClip()._x = 217;
input.__get__movieClip()._y = 141;
input.__set___text("");
}
function tick() {
if ((cnt++) > 2) {
cnt = 0;
screen_mc.marker._visible = !screen_mc.marker._visible;
}
}
function onKeyUp() {
var _local2 = Key.getCode();
if ((_local2 > 47) && (_local2 < 91)) {
var _local6 = String.fromCharCode(_local2);
if (name.length < 3) {
name = name + _local6;
updateInput();
}
} else if ((_local2 == 8) || (_local2 == 37)) {
if (name.length > 0) {
name = name.substr(0, name.length - 1);
updateInput();
}
} else if (_local2 == 13) {
if (name.length > 0) {
var _local4 = Number(SConsole.session.getValue("hiscore"));
var _local3 = String(SConsole.session.getValue("level"));
onlineHiscore.sendScore(_local3, _local4, name);
se.salomonsson.grav.Highscore.saveHighscore(name, _local4, _local3);
var _local5 = modules.screens.ScreenManager(SConsole.module("screenManager"));
_local5.openScreen("StartScreen");
} else {
var _local5 = modules.screens.ScreenManager(SConsole.module("screenManager"));
_local5.openScreen("StartScreen");
}
} else if (_local2 == 27) {
var _local5 = modules.screens.ScreenManager(SConsole.module("screenManager"));
_local5.openScreen("StartScreen");
}
}
function updateInput() {
input.__set___text(name);
input.__get__movieClip()._x = 250 - (input.__get__movieClip()._width / 2);
var _local2 = screen_mc.marker;
_local2._x = input.__get__movieClip()._x + input.__get__movieClip()._width;
}
var namespace = new Array("screens", "SubmitScreen");
}
Symbol 392 MovieClip [__Packages.mx.transitions.easing.Regular] Frame 0
class mx.transitions.easing.Regular
{
function Regular () {
}
static function easeIn(t, b, c, d) {
t = t / d;
return(((c * t) * t) + b);
}
static function easeOut(t, b, c, d) {
t = t / d;
return((((-c) * t) * (t - 2)) + b);
}
static function easeInOut(t, b, c, d) {
t = t / (d / 2);
if (t < 1) {
return((((c / 2) * t) * t) + b);
}
t--;
return((((-c) / 2) * ((t * (t - 2)) - 1)) + b);
}
static var version = "1.1.0.52";
}
Symbol 393 MovieClip [__Packages.screens.ErrorScreen] Frame 0
class screens.ErrorScreen extends screens.BaseMenuScreen
{
var screenManager, screen_mc;
function ErrorScreen () {
super();
screenManager = modules.screens.ScreenManager(SConsole.module("screenManager"));
}
function build() {
super.build();
var _local3 = new ui.Text(screen_mc, 0, 0, true, true, true, "SF Theramin Gothic Condensed", 32, 1032858);
_local3.__set___text("An Error occured...");
_local3.__get__movieClip()._x = (screenManager.__get__width() / 2) - (_local3.__get__movieClip()._width / 2);
_local3.__get__movieClip()._y = 70;
_local3 = new ui.Text(screen_mc, 300, 0, false, true, true, "SF Theramin Gothic Condensed", 16, 1032858);
_local3.__set___text("One or more level-data files are missing. Please contact the site administrator, or play the game at www.salomonsson.se. Sorry for your inconvenience.");
_local3.__get__movieClip()._x = (screenManager.__get__width() / 2) - (_local3.__get__movieClip()._width / 2);
_local3.__get__movieClip()._y = 110;
}
var namespace = new Array("screens", "ErrorScreen");
}
Symbol 235 MovieClip [intro] Frame 1
stop();
Symbol 235 MovieClip [intro] Frame 659
stop();
Symbol 248 MovieClip Frame 34
gotoAndStop (1);