/** * Smokescreen v0.1.2 - Chris Smoak * A Flash player written in JavaScript. * * Copyright 2010, RevShock * * Date: 2010-05-27 */ var Smokescreen = function (url, element, width, height, name, params) { goog = {}; goog.global = this; goog.provide = function (a) { a = a.split("."); var b = goog.global; for (var c in a) { var d = a[c]; d in b || (b[d] = {}); b = b[d] } }; goog.require = function () {}; var fljs = {}, BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS" }, searchString: function (a) { for (var b = 0; b < a.length; b++) { var c = a[b].string, d = a[b].prop; this.versionSearchString = a[b].versionSearch || a[b].identity; if (c) { if (c.indexOf(a[b].subString) != -1) return a[b].identity } else if (d) return a[b].identity } }, searchVersion: function (a) { var b = a.indexOf(this.versionSearchString); if (b != -1) return parseFloat(a.substring(b + this.versionSearchString.length + 1)) }, dataBrowser: [{ string: navigator.userAgent, subString: "Chrome", identity: "Chrome"},{ string: navigator.vendor, subString: "Apple", identity: "Safari", versionSearch: "Version"},{ prop: window.opera, identity: "Opera"},{ string: navigator.userAgent, subString: "Firefox", identity: "Firefox"},{ string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE"}], dataOS: [{ string: navigator.platform, subString: "Win", identity: "Windows"},{ string: navigator.userAgent, subString: "iPad", identity: "iPad"},{ string: navigator.userAgent, subString: "iPhone", identity: "iPhone"},{ string: navigator.platform, subString: "Mac", identity: "Mac"}] }; BrowserDetect.init(); fljs.agent = BrowserDetect; fljs.addConstants = function (a, b) { for (var c in b) a[c] = b[c] }; fljs.addMethods = function (a, b) { for (var c in b) a.prototype[c] = b[c] }; fljs.addStaticMethods = function (a, b) { for (var c in b) a[c] = b[c] }; fljs.addEvents = function (a, b) { for (var c in b) { var d = b[c], e = d[0], f = d[2]; a.prototype["__add" + e] = d[1]; a.prototype["__remove" + e] = f } }; fljs.now = function () { return +new Date }; fljs.inherits = function (a, b) { function c() {} c.prototype = b.prototype; a.superClass_ = b.prototype; a.prototype = new c; a.prototype.constructor = a }; fljs.base = function (a, b) { var c = arguments.callee.caller; if (c.superClass_) return c.superClass_.constructor.apply(a, Array.prototype.slice.call(arguments, 1)); for (var d = Array.prototype.slice.call(arguments, 2), e = false, f = a.constructor; f; f = f.superClass_ && f.superClass_.constructor) if (f.prototype[b] === c) e = true; else if (e) return f.prototype[b].apply(a, d); if (a[b] === c) return a.constructor.prototype[b].apply(a, d); else throw Error("invalid base call"); }; fljs.bind = function (a, b) { var c = b || this; if (arguments.length > 2) { var d = Array.prototype.slice.call(arguments, 2); return function () { var e = Array.prototype.slice.call(arguments); Array.prototype.unshift.apply(e, d); return a.apply(c, e) } } else return function () { return a.apply(c, arguments) } }; fljs.DummyConsole = function () {}; fljs.addMethods(fljs.DummyConsole, { info: function () {} }); fljs.DummyConsole._instance = new fljs.DummyConsole; fljs.console = function () { return fljs.debug ? console : fljs.DummyConsole._instance }; fljs.ext = {}; var flash = {}; flash.display = {}; flash.display.BlendMode = function () {}; fljs.addConstants(flash.display.BlendMode, { ADD: "add", ALPHA: "alpha", DARKEN: "darken", DIFFERENCE: "difference", ERASE: "erase", HARDLIGHT: "hardlight", INVERT: "invert", LAYER: "layer", LIGHTEN: "lighten", MULTIPLY: "multiply", NORMAL: "normal", OVERLAY: "overlay", SCREEN: "screen", SUBTRACT: "subtract" }); flash.events = {}; flash.events.Event = function (a, b, c) { this.type = a; this.bubbles = b; this.cancelable = c }; fljs.addConstants(flash.events.Event, { ACTIVATE: "activate", ADDED: "added", ADDED_TO_STAGE: "addedToStage", CANCEL: "cancel", CHANGE: "change", CLOSE: "close", COMPLETE: "complete", CONNECT: "connect", DEACTIVATE: "deactivate", DISPLAYING: "displaying", ENTER_FRAME: "enterFrame", FULLSCREEN: "fullscreen", ID3: "id3", INIT: "init", MOUSE_LEAVE: "mouseLeave", OPEN: "open", REMOVED: "removed", REMOVED_FROM_STAGE: "removedFromStage", RENDER: "render", RESIZE: "resize", SCROLL: "scroll", SELECT: "select", SOUND_COMPLETE: "soundComplete", TAB_CHILDREN_CHANGE: "tabChildrenChange", TAB_ENABLED_CHANGE: "tabEnabledChange", TAB_INDEX_CHANGE: "tabIndexChange", UNLOAD: "unload" }); fljs.addMethods(flash.events.Event, { clone: function () {}, formatToString: function (a) { return "[" + a + this.buildPropertiesString_(arguments) + "]" }, buildPropertiesString_: function (a) { for (var b = [], c = 0; c < a.length; c++) c > 0 && b.push(a[c] + "=" + this[a[c]]); return b.join(" ") }, isDefaultPrevented: function () { return this.returnValue_ }, stopImmediatePropagation: function () { this.stopPropagation() }, toString: function () { return this.formatToString("Event", "type", "bubbles", "cancelable") } }); flash.events.MouseEvent = function (a, b, c, d, e, f, g, j, h, m, k, l, n, p) { flash.events.Event.call(this, a, b, c); this.localX = d; this.localY = e; this.relatedObject = f; this.ctrlKey = g; this.altKey = j; this.shiftKey = h; this.buttonDown = m; this.delta = k; this.commandKey = l; this.controlKey = n; this.clickCount = p }; fljs.inherits(flash.events.MouseEvent, flash.events.Event); fljs.addConstants(flash.events.MouseEvent, { CLICK: "click", DOUBLE_CLICK: "doubleClick", MOUSE_DOWN: "mouseDown", MOUSE_MOVE: "mouseMove", MOUSE_OUT: "mouseOut", MOUSE_OVER: "mouseOver", MOUSE_UP: "mouseUp", MOUSE_WHEEL: "mouseWheel", ROLL_OUT: "rollOut", ROLL_OVER: "rollOver" }); flash.events.FullScreenEvent = function () {}; fljs.addConstants(flash.events.FullScreenEvent, { FULL_SCREEN: "fullScreen" }); flash.events.KeyboardEvent = function (a, b, c, d, e, f, g, j, h) { flash.events.Event(a, b, c); this.charCode = d; this.keyCode = e; this.keyLocation = f; this.ctrlKey = g; this.altKey = j; this.shiftKey = h }; fljs.inherits(flash.events.KeyboardEvent, flash.events.Event); fljs.addConstants(flash.events.KeyboardEvent, { KEY_DOWN: "keyDown", KEY_UP: "keyUp" }); flash.events.FocusEvent = function () {}; fljs.addConstants(flash.events.FocusEvent, { KEY_FOCUS_CHANGE: "keyFocusChange", MOUSE_FOCUS_CHANGE: "mouseFocusChange" }); flash.events.IEventDispatcher = function () {}; fljs.addMethods(flash.events.IEventDispatcher, { addEventListener: function () {}, dispatchEvent: function () {}, hasEventListener: function () {}, removeEventListener: function () {}, willTrigger: function () {} }); flash.events.EventDispatcher = function () { this._listenerCount = {}; this._listeners = {} }; fljs.addMethods(flash.events.EventDispatcher, { addEventListener: function (a, b, c, d, e) { a in this._listeners || (this._listeners[a] = []); this._listeners[a].push([b, c, d, e]); if (!this._listenerCount[a]) { this["__add" + a] && this["__add" + a](); this._listenerCount[a] = 0 } this._listenerCount[a] += 1 }, dispatchEvent: function (a) { var b = this._listeners[a.type]; for (var c in b) b[c][0](a) }, hasEventListener: function (a) { return this._listeners[a] && this._listeners[a].length > 0 }, removeEventListener: function (a, b, c) { var d = this._listeners[a]; for (var e in d) d[e][0] == b && d[e][1] == c && d.splice(e, 1); this._listenerCount[a] -= 1; if (!this._listenerCount[a]) { this["__remove" + a] && this["__remove" + a](); this._listenerCount[a] = 0 } }, willTrigger: function (a) { return this.hasEventListener(a) } }); flash.geom = {}; flash.geom.ColorTransform = function (a, b, c, d, e, f, g, j) { if (typeof a == "undefined") a = 1; if (typeof b == "undefined") b = 1; if (typeof c == "undefined") c = 1; if (typeof d == "undefined") d = 1; if (typeof e == "undefined") e = 0; if (typeof f == "undefined") f = 0; if (typeof g == "undefined") g = 0; if (typeof j == "undefined") j = 0; this.alphaMultiplier = d; this.alphaOffset = j; this.blueMultiplier = c; this.blueOffset = g; this.greenMultiplier = b; this.greenOffset = f; this.redMultiplier = a; this.redOffset = e; this.__default = this.alphaMultiplier == 1 && this.blueMultiplier == 1 && this.greenMultiplier == 1 && this.redMultiplier == 1 && this.alphaOffset == 0 && this.blueOffset == 0 && this.greenOffset == 0 && this.redOffset == 0; fljs.console("cxform") }; fljs.addMethods(flash.geom.ColorTransform, { concat: function (a) { return new flash.geom.ColorTransform(this.redMultiplier * a.redMultiplier, this.greenMultiplier * a.greenMultiplier, this.blueMultiplier * a.blueMultiplier, this.alphaMultiplier * a.alphaMultiplier, Math.min(255, this.redOffset + a.redOffset), Math.min(255, this.greenOffset + a.greenOffset), Math.min(255, this.blueOffset + a.blueOffset), Math.min(255, this.alphaOffset + a.alphaOffset)) }, toString: function () {}, __toSvgString: function () { return [this.redMultiplier, 0, 0, 0, this.redOffset, 0, this.greenMultiplier, 0, 0, this.greenOffset, 0, 0, this.blueMultiplier, 0, this.blueOffset, 0, 0, 0, this.alphaMultiplier, this.alphaOffset].toString() } }); flash.geom.ColorTransform.identity = new flash.geom.ColorTransform; flash.geom.Matrix = function (a, b, c, d, e, f) { if (typeof a == "undefined") a = 1; if (typeof b == "undefined") b = 0; if (typeof c == "undefined") c = 0; if (typeof d == "undefined") d = 1; if (typeof e == "undefined") e = 0; if (typeof f == "undefined") f = 0; this.a = a; this.b = b; this.c = c; this.d = d; this.tx = e; this.ty = f; this.__default = this.a == 1 && this.b == 0 && this.c == 0 && this.d == 1 && this.tx == 0 && this.ty == 0 }; fljs.addMethods(flash.geom.Matrix, { clone: function () { return new flash.geom.Matrix(this.a, this.b, this.c, this.d, this.tx, this.ty) }, concat: function (a) { var b = this.a * a.b + this.b * a.d, c = this.c * a.a + this.d * a.c, d = this.c * a.b + this.d * a.d, e = this.tx * a.a + this.ty * a.c + a.tx, f = this.tx * a.b + this.ty * a.d + a.ty; this.a = this.a * a.a + this.b * a.c; this.b = b; this.c = c; this.d = d; this.tx = e; this.ty = f }, createBox: function () {}, createGradientBox: function () {}, deltaTransformPoint: function () {}, identity: function () {}, invert: function () {}, rotate: function () {}, scale: function (a, b) { this.a *= a; this.d *= b; this.tx *= a; this.ty *= b }, toString: function () {}, transformPoint: function () {}, translate: function () {}, __toSvgString: function () { return "matrix(" + [this.a, this.b, this.c, this.d, this.tx, this.ty] + ")" } }); flash.geom.Transform = function (a) { this._target = a; this._colorTransform = new flash.geom.ColorTransform; this._matrix = new flash.geom.Matrix }; fljs.addMethods(flash.geom.Transform, { setTarget: function (a) { this._target = a }, getColorTransform: function () { return this._colorTransform }, setColorTransform: function (a) { this._colorTransform = a; this._target.__setColorTransform(a) }, getConcatenatedColorTransform: function () { for (var a = this._colorTransform, b = this._target, c = fljs.Player.getInstance(); b && b != c;) { var d = b.getTransform().getColorTransform(); if (!d.__default) { a = d; break } b = b.getParent() } return a }, getMatrix: function () { return this._matrix }, setMatrix: function (a) { this._matrix = a; this._target.__setMatrix(a) }, notify: function () { this._target.__setMatrix(this._matrix); this._target.__setColorTransform(this._colorTransform) } }); flash.display.DisplayObject = function () { flash.events.EventDispatcher.call(this); this._alpha = 1; this.blendMode_ = flash.display.BlendMode.NORMAL; this._transform = new flash.geom.Transform(this); this.enterFrameListener = fljs.bind(this.onEnterFrame_, this); fljs.Player.getInstance().dispatcher.addEventListener(flash.events.Event.ENTER_FRAME, this.enterFrameListener); this.__simpleColorTransform = true; this.__asContext = null; (this._clipElement = new fljs.dom.Element).create(fljs.dom.Namespace.Svg, "g"); this.id = "clip" + flash.display.DisplayObject.id++; this._mouseEventHandler = fljs.bind(this.dispatchMouseEvent, this) }; fljs.inherits(flash.display.DisplayObject, flash.events.EventDispatcher); fljs.addMethods(flash.display.DisplayObject, { getBounds: function (a) { var b = this.element_.getElement().getBBox(); if (a == this) return new flash.geom.Rectangle(b.x, b.y, b.width, b.height); else { var c = new flash.geom.Point(b.x, b.y); c = a.globalToLocal(this.localToGlobal(c)); b = new flash.geom.Point(b.x + b.width, b.y + b.height); b = a.globalToLocal(this.localToGlobal(b)); return new flash.geom.Rectangle(c.x, c.y, b.x - c.x, b.y - c.y) } }, getRect: function () {}, globalToLocal: function (a) { var b = this._svgCtm(); a = this._SvgApplyMatrixToPoint(a, b); return new flash.geom.Point(a.x, a.y) }, hitTestObject: function (a) { a = a.getBounds(this); var b = this.getBounds(this); return a.x + a.width <= b.x && a.x >= b.x + b.width && a.y + a.height <= b.y && a.y >= b.y + b.height }, hitTestPoint: function (a, b) { a = new flash.geom.Point(a, b); a = this.globalToLocal(a); b = this.getBounds(this); return a.x >= b.x && a.x <= b.x + b.width && a.y > b.y && a.y <= b.y + b.height }, _svgApplyMatrixToPoint: function (a, b) { var c = fljs.Player.getInstance().element.getElement().createSVGPoint(); c.x = a.x; c.y = a.y; return c = c.matrixTransform(b) }, _svgCtm: function () { var a = this.element_.getElement(), b; try { b = a.parentNode.getScreenCTM() } catch (c) { b = getScreenCTM(a.parentNode) } return b }, localToGlobal: function (a) { var b = this._svgCtm(); a = this._SvgApplyMatrixToPoint(a, b.inverse()); return new flash.geom.Point(a.x, a.y) }, onEnterFrame_: function () {}, __setColorTransform: function (a) { this.element_.getElement().setAttributeNS(null, "opacity", a.alphaMultiplier); this.element_.getElement().setAttributeNS(null, "stroke-opacity", a.alphaMultiplier); this.element_.getElement().setAttributeNS(null, "fill-opacity", a.alphaMultiplier); this.__simpleColorTransform = true }, setColorTransform: function () {}, __setHitTarget: function (a) { this.setVisible(false); this.element_.getElement().setAttributeNS(null, "pointer-events", "all"); this._hitTargetFor = a; this.addEventListeners() }, makeClipPath: function () { this.getClipPath() }, getClipPath: function () { this._clipPath || this.buildClipPath(); return this._clipPath }, buildClipPath: function () { var a = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "clipPath"); var b = "clip" + flash.display.DisplayObject.id++; a.sets([["id", b], [null, "clipPathUnits", "userSpaceOnUse"]]); a.update(); this.__clipElement = a; a = this._clipPath = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "g"); a.set(null, "clip-path", "url(#" + b + ")"); a.update(); this._clipElement.element.parentNode.replaceChild(a.element, this._clipElement.element); this._clipElement = a; this.buildClipParts(this); fljs.Player.getInstance().defs.append(this.__clipElement) }, buildClipParts: function (a) { if (!this._parentClipPaths) this._parentClipPaths = {}; this._parentClipPaths[a.id] = a }, __setMatrix: function (a) { this.element_.getElement().setAttributeNS(null, "transform", a.__toSvgString()); if (this._parentClipPaths) for (var b in this._parentClipPaths) { a = this._parentClipPaths[b]; this.updateClipParts && this.updateClipParts(a) } }, addEventListeners: function () { var a = this._buttonEventHandler = fljs.bind(this._hitTargetFor.updateButtonState, this._hitTargetFor), b = flash.events.MouseEvent; this.addEventListener(b.CLICK, a, true); this.addEventListener(b.MOUSE_OVER, a, true); this.addEventListener(b.MOUSE_OUT, a, true); this.addEventListener(b.MOUSE_DOWN, a, true); this.addEventListener(b.MOUSE_UP, a, true) }, removeFromStage: function () { fljs.Player.getInstance().dispatcher.removeEventListener(flash.events.Event.ENTER_FRAME, this.enterFrameListener) }, updateClipDepth: function (a) { if (this.__clipDepth) { if (a != this.__clipDepth) if (a < this.__clipDepth) {; } else if (a > this.__clipDepth) {} } else { this.makeClipPath(); this.__clipDepth = a; var b = this._parent; b.element_.getElement(); var c = b.clipPathForDepth(this._depth); c && c.getClipPath(); var d = document.createDocumentFragment(); for (var e in b.displayList_) { var f = b.displayList_[e].displayObject; if (e > this._depth && e <= a && f._mask == c) { d.appendChild(f._clipElement.element); f._mask = this } } this.getClipPath().element.appendChild(d) } }, getName: function () { return this._name }, setName: function (a) { this._parent && this._parent.setChildName(this, a); this._name = a }, getStage: function () { return this._parent && this._parent.getStage ? this._parent.getStage() : null }, getTransform: function () { return this._transform }, setTransform: function (a) { this._transform = a; this._transform.setTarget(this); this._transform.notify() }, getMatrix: function () { return this._transform._matrix }, setMatrix: function (a) { this._transform.setMatrix(a) }, getVisible: function () { return this._visible }, setVisible: function (a) { a = (this._visible = !! a) ? "visible" : "hidden"; this.element_.getElement().setAttributeNS(null, "visibility", a) }, getParent: function () { return this._parent }, setParent: function (a) { if (this._parent != a) this._parent = a }, getAs2Object: function () { if (!this._as2Object) this._as2Object = new fljs.swf.act.MovieClip(this); return this._as2Object }, dispatchMouseEvent: function (a) { var b = {}; b.click = flash.events.MouseEvent.CLICK; b.touchend = flash.events.MouseEvent.CLICK; b.mouseover = flash.events.MouseEvent.MOUSE_OVER; b.mouseout = flash.events.MouseEvent.MOUSE_OUT; b.mousedown = flash.events.MouseEvent.MOUSE_DOWN; b.mouseup = flash.events.MouseEvent.MOUSE_UP; b.touchstart = flash.events.MouseEvent.MOUSE_DOWN; b.touchend = flash.events.MouseEvent.MOUSE_UP; this.dispatchEvent(new flash.events.MouseEvent(b[a.type])) }, getWidth: function () { return this.element_.element.getBBox().width }, setWidth: function (a) { var b = this.getWidth(), c = this.getMatrix(), d = new flash.geom.Matrix; d.scale(a / b, 1); d.concat(c); d.tx = c.tx; d.ty = c.ty; this.setMatrix(d) }, getHeight: function () { return this.element_.element.getBBox().height } }); fljs.addEvents(flash.display.DisplayObject, [[flash.events.MouseEvent.MOUSE_OVER, function () { this.element_.element.addEventListener("mouseover", this._mouseEventHandler, false)},function () { this.element_.element.removeEventListener("mouseover", this._mouseEventHandler)}], [flash.events.MouseEvent.MOUSE_OUT, function () { this.element_.element.addEventListener("mouseout", this._mouseEventHandler, false)},function () { this.element_.element.removeEventListener("mouseout", this._mouseEventHandler)}], [flash.events.MouseEvent.MOUSE_DOWN, function () { this.element_.element.addEventListener("mousedown", this._mouseEventHandler, false)},function () { this.element_.element.removeEventListener("mousedown", this._mouseEventHandler)}], [flash.events.MouseEvent.MOUSE_UP, function () { this.element_.element.addEventListener("mouseup", this._mouseEventHandler, false)},function () { this.element_.element.removeEventListener("mouseup", this._mouseEventHandler)}]]); flash.display.DisplayObject.id = 1; flash.display.InteractiveObject = function () { flash.display.DisplayObject.call(this) }; fljs.inherits(flash.display.InteractiveObject, flash.display.DisplayObject); flash.display.DisplayObjectContainer = function () { flash.display.InteractiveObject.call(this); this.element_ = this._clipElement; this.graphics_ = new flash.display.Graphics(this); this.displayList_ = []; this.__childNames = {} }; fljs.inherits(flash.display.DisplayObjectContainer, flash.display.InteractiveObject); fljs.addMethods(flash.display.DisplayObjectContainer, { addChild: function (a) { var b = 0; for (var c in this.displayList_) b = Math.max(c, b); return this.addChildAt(a, b + 1) }, addChildAt: function (a, b) { a._depth = b; a.setParent(this); var c = this.element_.getElement(), d = this.clipPathForDepth(b); if (d) c = d.getClipPath().element; var e = this.displayList_[b], f; if (e) f = e.displayObject; if (e && !f.__clipDepth) { c.replaceChild(a._clipElement.element, f._clipElement.element); f.removeFromStage() } else { e && this.removeChildAt(b); if ((e = this.dispObjAfterIndex(b)) && d) if (e._mask != d) e = null; e ? c.insertBefore(a._clipElement.element, e._clipElement.element) : c.appendChild(a._clipElement.element) } this.displayList_[b] = { displayObject: a }; a.__name && this.setChildName(a, null, a.__name); if (this._parentClipPaths) for (var g in this._parentClipPaths) a.buildClipParts(this._parentClipPaths[g]); if (d) a._mask = d; return a }, dispObjAfterIndex: function (a) { var b, c = null; for (var d in this.displayList_) if (d > a) { b = c ? Math.min(b, d) : d; c = this.displayList_[b].displayObject } return c }, areInaccessibleObjectsUnderPoint: function () { return false }, contains: function () {}, getChildAt: function (a) { return (a = this.displayList_[a]) ? a.displayObject : null }, getChildByName: function (a) { return this.childrenByName_[a] }, removeChildAt: function (a) { var b = this.displayList_[a]; if (b) { b = b.displayObject; var c; c = (c = this.clipPathForDepth(a)) ? c.getClipPath().element : this.element_.getElement(); var d = b._clipElement.element; if (b.__clipDepth) { b.getClipPath(); var e = document.createDocumentFragment(); for (var f in this.displayList_) { var g = this.displayList_[f].displayObject; if (g._mask == b) { g._mask = null; e.appendChild(g._clipElement.element) } } c.replaceChild(e, d) } else c.removeChild(d); b.setParent(null); b.removeFromStage(); b._name && delete this.__childNames[b._name]; delete this.displayList_[a]; return b } else fljs.console("doc").info("removeChildAt:" + a + " failed") }, removeChildren: function () { for (var a in this.displayList_) this.removeChildAt(a) }, setChildIndex: function () {}, swapChildren: function () {}, swapChildrenAt: function () {}, setChildName: function (a, b) { a._name && delete this.__childNames[a._name]; this.__childNames[b] = a }, buildClipParts: function (a) { fljs.base(this, "buildClipParts", a); this.graphics_.buildClipParts(a); for (var b in this.displayList_) { var c = this.displayList_[b].displayObject; c.buildClipParts && c.buildClipParts(a) } }, updateClipParts: function (a) { this.graphics_.updateClipParts(a); for (var b in this.displayList_) { var c = this.displayList_[b].displayObject; c.updateClipParts && c.updateClipParts(a) } }, updateColorTransform: function () { for (var a in this.displayList_) { var b = this.displayList_[a].displayObject; b.updateColorTransform && b.updateColorTransform() } }, __setColorTransform: function (a) { fljs.base(this, "__setColorTransform", a); this.updateColorTransform() }, clipPathForDepth: function (a) { var b = -1; for (var c in this.displayList_) { var d = this.displayList_[c].displayObject; if (d.__clipDepth) if (a > c && a <= d.__clipDepth) b = Math.max(c, b) } return b > -1 ? this.displayList_[b].displayObject : null } }); flash.display.Stage = function () { flash.display.DisplayObjectContainer.call(this); var a = fljs.Player.getInstance(), b = a.header.FrameSize.Xmax - a.header.FrameSize.Xmin, c = a.header.FrameSize.Ymax - a.header.FrameSize.Ymin; this._clipElement.sets([[null, "width", b], [null, "height", c]]); this._clipElement.update(); this.align_ = flash.display.StageAlign.TOP_LEFT; this.displayState_ = flash.display.StageDisplayState.NORMAL; this.frameRate_ = 30; a = fljs.Player.getInstance(); b = a.header.FrameSize.Xmax - a.header.FrameSize.Xmin; c = a.header.FrameSize.Ymax - a.header.FrameSize.Ymin; a = this._bg = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "rect"); a.sets([[null, "x", 0], [null, "y", 0], [null, "width", b], [null, "height", c], [null, "stroke", "none"], [null, "fill", this.colorToSvgString(0)]]); a.update(); (b = this._clipElement.element.firstChild) ? this._clipElement.getElement().insertBefore(a.element, b) : this._clipElement.getElement().appendChild(a.element) }; fljs.inherits(flash.display.Stage, flash.display.DisplayObjectContainer); fljs.addMethods(flash.display.Stage, { initialize: function () { this.setBackgroundColor_(0) }, invalidate: function () {}, isFocusInaccessible: function () {}, runFrameLoop_: function () {}, onEnterFrame_: function () { for (var a in this.children_) this.children_.onEnterFrame() }, colorToSvgString: function (a) { return "rgb(" + [a >> 16 & 255, a >> 8 & 255, a & 255] + ")" }, setBackgroundColor_: function (a) { this._bg.set(null, "fill", this.colorToSvgString(a)); this._bg.update() }, onMouseMove: function (a) { this._mouseX = a.clientX; this._mouseY = a.clientY }, getStage: function () { return this }, getFrameRate: function () { return this.frameRate_ }, setFrameRate: function (a) { this.frameRate_ = a = Math.max(Math.min(a, 1E3), 0.01) } }); flash.display.GradientType = function () {}; fljs.addConstants(flash.display.GradientType, { LINEAR: "linear", RADIAL: "radial" }); flash.display.SpreadMethod = function () {}; fljs.addConstants(flash.display.SpreadMethod, { PAD: "pad", REFLECT: "reflect", REPEAT: "repeat" }); flash.display.InterpolationMethod = function () {}; fljs.addConstants(flash.display.InterpolationMethod, { LINEAR_RGB: "linearRGB", RGB: "rgb" }); flash.display.Graphics = function (a) { this.__target = a; this.setDisplayObject(a); this._parentClipPaths = {}; this._clipParts = {}; this._parts = [] }; fljs.addMethods(flash.display.Graphics, { clear: function () { for (var a in this._parts) this.parentEl.removeChild(this._parts[a]); this._parts = []; this._clipParts = {}; this._parentClipPaths = {} }, opacityWithXform: function (a) { var b = this.displayObject_.getTransform().getConcatenatedColorTransform(); return b.__default ? a : Math.max(0, Math.min(255, Math.round(a * 255 * b.alphaMultiplier + b.alphaOffset))) / 255 }, setDisplayObject: function (a) { this.displayObject_ = a; this.parentEl = this.displayObject_.element_.element }, __colorToSvgString: function (a) { var b = a >> 16 & 255, c = a >> 8 & 255; a = a & 255; if (!this.displayObject_.getTransform().getConcatenatedColorTransform().__default) { var d = this.displayObject_.getTransform().getConcatenatedColorTransform(); b = Math.max(0, Math.min(255, Math.round(b * d.redMultiplier + d.redOffset))); c = Math.max(0, Math.min(255, Math.round(c * d.greenMultiplier + d.greenOffset))); a = Math.max(0, Math.min(255, Math.round(a * d.blueMultiplier + d.blueOffset))) } return "rgb(" + [b, c, a] + ")" }, clipTransforms: function (a) { for (var b = [], c = this.displayObject_;;) { var d = c.getMatrix().__toSvgString(); b.push(d); if (c == a) break; c = c.getParent() } return b }, buildClipParts: function (a) { this._parentClipPaths[a.id] = a; var b = this.clipTransforms(a).join(" "); if (this.tag) { var c = this.tag.def.paths; for (var d in c) { var e = c[d], f; f = fljs.agent.browser == "Safari" ? e.clone() : e.use(); f.set(null, "transform", b); f.update(); this.addClipPart(a, e, f) } } }, addClipPart: function (a, b, c) { this._clipParts[a.id] || (this._clipParts[a.id] = {}); this._clipParts[a.id][b.id] = c; a.__clipElement.append(c) }, updateClipParts: function (a) { var b = this.clipTransforms(a); for (a = a;;) { if (this._parentClipPaths[a.id]) { var c = b.join(" "), d = this._clipParts[a.id]; for (var e in d) { var f = d[e]; f.set(null, "transform", c); f.update() } } if (!a || !a.getTransform) break; c = a.getMatrix().__toSvgString(); b.push(c); a = a.getParent() } }, useTag: function (a, b, c) { var d = this.displayObject_.getTransform().getConcatenatedColorTransform(); d.__default || (b = d); this.tag = a; this.cloning = c; this.use = a.def.use(b, null, this.cloning); this.parentEl.appendChild(this.use.element) }, setColorTransform: function (a) { if (this.use) { var b = this.use.element; this.use = this.tag.def.use(a, null, this.cloning); this.parentEl.replaceChild(this.use.element, b) } } }); flash.display.Graphics.patternId = 1; flash.display.Graphics.pathId = 1; flash.display.IBitmapDrawable = function () {}; flash.display.StageAlign = function () {}; fljs.addConstants(flash.display.StageAlign, { TOP: "top", BOTTOM: "bottom", LEFT: "left", RIGHT: "right", TOP_LEFT: "topLeft", TOP_RIGHT: "topRight", BOTTOM_LEFT: "bottomLeft", BOTTOM_RIGHT: "bottomRight" }); flash.display.StageDisplayState = function () {}; fljs.addConstants(flash.display.StageDisplayState, { FULL_SCREEN: "fullScreen", NORMAL: "normal" }); fljs.swf = {}; fljs.swf.tag = {}; fljs.swf.tag.End = function () {}; fljs.addMethods(fljs.swf.tag.End, { read: function () {}, evaluate: function () {} }); fljs.swf.tag.ShowFrame = function () {}; fljs.addMethods(fljs.swf.tag.ShowFrame, { read: function () {}, evaluate: function () {} }); flash.display.Shape = function () { flash.display.DisplayObject.call(this); this.element_ = this._clipElement; this.graphics_ = new flash.display.Graphics(this) }; fljs.inherits(flash.display.Shape, flash.display.DisplayObject); fljs.addMethods(flash.display.Shape, { buildClipParts: function (a) { fljs.base(this, "buildClipParts", a); this.graphics_.buildClipParts(a) }, updateClipParts: function (a) { this.graphics_.updateClipParts(a) }, useTag: function (a, b, c) { this.tag = a; this.graphics_.useTag(a, b, c); if (b) { this.setColorTransform(b); this.element_.getElement().setAttributeNS(null, "opacity", b.alphaMultiplier) } }, updateColorTransform: function () { this.graphics_.setColorTransform(this.getTransform().getConcatenatedColorTransform()) }, __setColorTransform: function (a) { fljs.base(this, "__setColorTransform", a); this.graphics_.setColorTransform(a) } }); fljs.swf.tag.PlaceObject = function () {}; fljs.addMethods(fljs.swf.tag.PlaceObject, { read: function (a, b) { var c = a.stream.byteIndex; this.CharacterId = a.readUI16(); this.Depth = a.readUI16(); this.Matrix = a.readMATRIX(); a.stream.align(); if (a.stream.byteIndex != c + b.TagLength) { fljs.console("parse").info("reading cxform"); this.ColorTransform = a.readCXFORM() } a.stream.align() }, buildMatrix_: function () { return new flash.geom.Matrix(this.Matrix.ScaleX, this.Matrix.RotateSkew0, this.Matrix.RotateSkew1, this.Matrix.ScaleY, this.Matrix.TranslateX, this.Matrix.TranslateY) }, buildColorTransform_: function () { var a = this.ColorTransform; return new flash.geom.ColorTransform(a.RedMultTerm, a.GreenMultTerm, a.BlueMultTerm, a.AlphaMultTerm, a.RedAddTerm, a.GreenAddTerm, a.BlueAddTerm, a.AlphaAddTerm) }, evaluate: function (a, b, c, d) { b = fljs.console("eval"); c = a.dictionary[this.CharacterId]; var e; if (c instanceof fljs.swf.tag.DefineShape || c instanceof fljs.swf.tag.DefineShape2) { e = new flash.display.Shape; e.getTransform().setMatrix(this.buildMatrix_()); this.ColorTransform && e.getTransform().setColorTransform(this.buildColorTransform_()); e.useTag(c) } else if (c instanceof fljs.swf.tag.DefineBitsJPEG2) { e = c.buildBitmap(fljs.Player.getInstance()); e.getTransform().setMatrix(this.buildMatrix_()) } else if (c instanceof fljs.swf.tag.DefineButton2) { e = c.build(a); e.getTransform().setMatrix(this.buildMatrix_()) } e ? d.addChildAt(e, this.Depth) : b.info("not recognized: " + [this.CharacterId, this.Name]) } }); fljs.swf.tag.RemoveObject = function () {}; fljs.addMethods(fljs.swf.tag.RemoveObject, { read: function (a) { this.CharacterId = a.readUI16(); this.Depth = a.readUI16() }, evaluate: function (a, b, c, d) { d.removeChildAt(this.Depth) } }); fljs.swf.tag.PlaceObject2 = function () {}; fljs.addMethods(fljs.swf.tag.PlaceObject2, { read: function (a) { this.startByteIndex = a.stream.byteIndex; fljs.console("parse"); this.PlaceFlagHasClipActions = a.readUB(1); this.PlaceFlagHasClipDepth = a.readUB(1); this.PlaceFlagHasName = a.readUB(1); this.PlaceFlagHasRatio = a.readUB(1); this.PlaceFlagHasColorTransform = a.readUB(1); this.PlaceFlagHasMatrix = a.readUB(1); this.PlaceFlagHasCharacter = a.readUB(1); this.PlaceFlagMove = a.readUB(1); this.Depth = a.readUI16(); if (this.PlaceFlagHasCharacter) this.CharacterId = a.readUI16(); if (this.PlaceFlagHasMatrix) this.Matrix = a.readMATRIX(); if (this.PlaceFlagHasColorTransform) this.ColorTransform = a.readCXFORMWITHALPHA(); if (this.PlaceFlagHasRatio) this.Ratio = a.readUI16(); if (this.PlaceFlagHasName) this.Name = a.readSTRING(); if (this.PlaceFlagHasClipDepth) this.ClipDepth = a.readUI16(); if (this.PlaceFlagHasClipActions) this.ClipActions = a.readCLIPACTIONS() }, buildMatrix_: function () { return new flash.geom.Matrix(this.Matrix.ScaleX, this.Matrix.RotateSkew0, this.Matrix.RotateSkew1, this.Matrix.ScaleY, this.Matrix.TranslateX, this.Matrix.TranslateY) }, buildColorTransform_: function () { var a = this.ColorTransform; return new flash.geom.ColorTransform(a.RedMultTerm, a.GreenMultTerm, a.BlueMultTerm, a.AlphaMultTerm, a.RedAddTerm, a.GreenAddTerm, a.BlueAddTerm, a.AlphaAddTerm) }, evaluate: function (a, b, c, d) { var e; c = fljs.console("place"); if (this.PlaceFlagMove && this.PlaceFlagHasCharacter) e = d.getChildAt(this.Depth); var f; if (this.ColorTransform) f = this.buildColorTransform_(); if (this.PlaceFlagHasCharacter) { b = a.dictionary[this.CharacterId]; var g; if (b instanceof fljs.swf.tag.DefineShape || b instanceof fljs.swf.tag.DefineEditText || b instanceof fljs.swf.tag.DefineText || b instanceof fljs.swf.tag.DefineSprite || b instanceof fljs.swf.tag.DefineButton2) g = b.build(a, f); if (g) { this.Matrix && g.getTransform().setMatrix(this.buildMatrix_()); d.addChildAt(g, this.Depth); if (e) this.Matrix || g.getTransform().setMatrix(e.getTransform().getMatrix()); if (g.__clipActions == null) g.__clipActions = {}; if (this.ClipActions) { f = fljs.swf.ClipEventFlags; d = this.ClipActions.ClipActionRecords; for (var j in d) { e = d[j]; for (var h in fljs.swf.ClipEventFlags) if (e.EventFlags & f[h]) { g.__clipActions[h] || (g.__clipActions[h] = []); g.__clipActions[h].push(e) } } } if (b instanceof fljs.swf.tag.DefineSprite || b instanceof fljs.swf.tag.DefineButton2) g.onCreate() } else { c.info("not recognized: " + [this.CharacterId, this.Name]); e && d.removeChildAt(this.Depth) } } else if (this.PlaceFlagMove) { g = d.getChildAt(this.Depth); if (!g) return; h = false; if (this.Matrix) { g.getTransform().setMatrix(this.buildMatrix_()); h = true } if (f) { g.getTransform().setColorTransform(f); h = true } if (h && a.renderTextAsGlyphs) if (g.text_ || g._text) if (g.getParent()) { j = 0; h = g._clipElement.element; h = b = h.parentNode; b = h.parentNode; d = h.nextSibling; b.removeChild(h); f && g.getTransform().setColorTransform(f); this.Matrix && g.getTransform().setMatrix(this.buildMatrix_()); d ? b.insertBefore(h, d) : b.appendChild(h) } } if (g) { this.PlaceFlagHasClipDepth && g.updateClipDepth(this.ClipDepth); this.Name && g.setName(this.Name); if (g && this.PlaceFlagHasCharacter) { if (g.__clipActions.ClipEventInitialize) { f = []; for (j in g.__clipActions.ClipEventInitialize) f.push.apply(f, g.__clipActions.ClipEventInitialize[j].Actions); a.doActions(g, f) } if (g.__clipActions.ClipEventLoad) { f = []; for (j in g.__clipActions.ClipEventLoad) f.push.apply(f, g.__clipActions.ClipEventLoad[j].Actions); a.doActions(g, f) } if (g.__clipActions.ClipEventEnterFrame) { f = []; for (j in g.__clipActions.ClipEventEnterFrame) f.push.apply(f, g.__clipActions.ClipEventEnterFrame[j].Actions); a.dispatcher.addEventListener(flash.events.Event.ENTER_FRAME, fljs.bind(a.doActions, a, g, f)) } } } } }); fljs.swf.build = {}; fljs.swf.build.SvgUtils = function () {}; fljs.addMethods(fljs.swf.build.SvgUtils, { toSvgColorString: function (a) { return "rgb(" + [a.Red, a.Green, a.Blue] + ")" }, toSvgOpacity: function (a) { return a.Alpha == null ? 1 : a.Alpha / 255 }, toSvgMatrixString: function (a) { return (new flash.geom.Matrix(a.ScaleX, a.RotateSkew0, a.RotateSkew1, a.ScaleY, a.TranslateX, a.TranslateY)).__toSvgString() }, toMatrix: function (a) { return new flash.geom.Matrix(a.ScaleX, a.RotateSkew0, a.RotateSkew1, a.ScaleY, a.TranslateX, a.TranslateY) } }); fljs.swf.def = {}; fljs.swf.def.BitmapDef = function () { (this.element = new fljs.dom.Element).create(fljs.dom.Namespace.Svg, "image") }; fljs.addMethods(fljs.swf.def.BitmapDef, { setCharaId: function (a) { this.id = "bitmap-" + a; this.ref = "#" + this.id; this.element.set("id", this.id) }, define: function () { this.element.update(); this._define(this.element.element) }, use: function () { var a = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "use"); a.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.ref]]); a.update(); return a }, _define: function (a) { fljs.Player.getInstance().defs.element.appendChild(a) } }); fljs.swf.def.BitmapFillDef = function () { var a = this.element = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "pattern"); this.type = "Bitmap"; this.id = "pattern-" + fljs.swf.def.BitmapFillDef.patternId++; this.ref = "#" + this.id; a.set("id", this.id) }; fljs.addMethods(fljs.swf.def.BitmapFillDef, { setBitmapId: function (a) { a = fljs.Player.getInstance().dictionary[a]; if (!a) return false; this.bitmap = a; this.element.append(a.def.use()); return true }, define: function () { this.element.update(); this._define(this.element.element) }, use: function () { var a = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "use"); a.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.ref]]); a.update(); return a }, _define: function (a) { fljs.Player.getInstance().defs.element.appendChild(a) } }); fljs.swf.def.BitmapFillDef.patternId = 1; fljs.swf.def.GradientFillDef = function () { this.element = new fljs.dom.Element; this.stops = []; this.type = "Gradient" }; fljs.addMethods(fljs.swf.def.GradientFillDef, { create: function (a) { var b = this.element; b.create(fljs.dom.Namespace.Svg, a); this.id = "gradient-" + fljs.swf.def.GradientFillDef.gradientId++; this.ref = "#" + this.id; b.set("id", this.id) }, addStop: function (a) { this.stops.push(a); this.element.append(a.element) }, define: function () { this.element.update(); this._define(this.element.element) }, use: function (a) { var b = this.element.clone(false); b.id = "gradient-" + fljs.swf.def.GradientFillDef.gradientId++; b.ref = "#" + b.id; b.set("id", b.id); for (var c in this.stops) b.append(this.stops[c].use(a)); b.update(); this._define(b.element); return b }, _define: function (a) { fljs.Player.getInstance().defs.element.appendChild(a) } }); fljs.swf.def.GradientFillDef.gradientId = 1; fljs.swf.def.GradientFillStopDef = function () { (this.element = new fljs.dom.Element).create(fljs.dom.Namespace.Svg, "stop") }; fljs.addMethods(fljs.swf.def.GradientFillStopDef, { create: function (a) { var b = this.element; b.create(fljs.dom.Namespace.Svg, a); b.set("id", this.id) }, setColor: function (a, b) { this.rgba = a; this.element.sets([[null, "stop-color", this._colorToSvgColor(a, b)], [null, "stop-opacity", this._colorToSvgOpacity(a)]]) }, define: function () { this.element.update(); this._define(this.element.element) }, use: function (a) { var b = this.element.clone(false); a = [[null, "stop-color", this._colorToSvgColor(this.rgba, a)]]; b.sets(a); b.update(); return b }, _define: function (a) { fljs.Player.getInstance().defs.element.appendChild(a) }, _colorToSvgColor: function (a, b) { var c = a >> 24 & 255, d = a >> 16 & 255; a = a >> 8 & 255; if (b) { c = Math.max(0, Math.min(255, Math.round(c * b.redMultiplier + b.redOffset))); d = Math.max(0, Math.min(255, Math.round(d * b.greenMultiplier + b.greenOffset))); a = Math.max(0, Math.min(255, Math.round(a * b.blueMultiplier + b.blueOffset))) } return "rgb(" + [c, d, a] + ")" }, _colorToSvgOpacity: function (a, b) { a = (a & 255) / 255; if (b) a = Math.max(0, Math.min(1, Math.round(a * b.alphaMultiplier + b.alphaOffset))); return a } }); fljs.swf.def.GradientFillStopDef.gradientStopId = 1; fljs.swf.def.PathDef = function () { var a = this.element = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "path"); this.id = "path" + fljs.swf.def.PathDef.pathId++; this.ref = "#" + this.id; a.set("id", this.id); a.update() }; fljs.addMethods(fljs.swf.def.PathDef, { setStroke: function (a) { (this.stroke = a) ? this.element.sets([[null, "stroke-width", a.thickness], [null, "stroke", this._colorToSvgColor(a.color)], [null, "stroke-opacity", this._colorToSvgOpacity(a.color)]]) : this.element.set(null, "stroke", "none") }, setFill: function (a) { if (this.fill = a) switch (a.type) { case "Solid": this._setSolidFill(a); break; case "Bitmap": this._setBitmapFill(a); break; case "Gradient": this._setGradientFill(a); break } else this.element.set(null, "fill", "none") }, _setSolidFill: function () {}, _setBitmapFill: function (a) { this.element.sets([[null, "fill", "url(" + a.ref + ")"], [null, "fill-opacity", 1]]) }, _setGradientFill: function () {}, define: function () { this.element.update(); this._define(this.element.element) }, use: function (a, b) { var c = new fljs.dom.Element; c.create(fljs.dom.Namespace.Svg, "use"); document.getElementById(this.id); var d = [[fljs.dom.Namespace.Xlink, "xlink:href", this.ref]], e = this.stroke; e && c.sets([[null, "stroke-width", e.thickness], [null, "stroke", this._colorToSvgColor(e.color, a)], [null, "stroke-opacity", this._colorToSvgOpacity(e.color)]]); if (e = this.fill) switch (e.type) { case "Solid": c.set(null, "fill", this._colorToSvgColor(e.color, a)); c.set(null, "fill-opacity", this._colorToSvgOpacity(e.color)); break; case "Bitmap": break; case "Gradient": c.sets([[null, "fill", "url(" + e.use(a).ref + ")"], [null, "fill-opacity", 1]]); break } c.sets(d); b && b.append(c); c.update(); return c }, clone: function () { var a = this.element.clone(true); a.set("id", null); return a }, _colorToSvgColor: function (a, b) { var c = a >> 24 & 255, d = a >> 16 & 255; a = a >> 8 & 255; if (b) { c = Math.max(0, Math.min(255, Math.round(c * b.redMultiplier + b.redOffset))); d = Math.max(0, Math.min(255, Math.round(d * b.greenMultiplier + b.greenOffset))); a = Math.max(0, Math.min(255, Math.round(a * b.blueMultiplier + b.blueOffset))) } return "rgb(" + [c, d, a] + ")" }, _colorToSvgOpacity: function (a, b) { a = (a & 255) / 255; if (b) a = Math.max(0, Math.min(1, Math.round(a * b.alphaMultiplier + b.alphaOffset))); return a }, _define: function (a) { fljs.Player.getInstance().defs.element.appendChild(a) } }); fljs.swf.def.PathDef.pathId = 1; fljs.swf.def.ShapeDef = function () { (this.element = new fljs.dom.Element).create(fljs.dom.Namespace.Svg, "g"); this.parts = []; this.paths = []; this.images = []; this.cxforms = {}; this.cxformCount = 0 }; fljs.addMethods(fljs.swf.def.ShapeDef, { setCharaId: function (a) { this.id = "chara-" + a; this.ref = "#" + this.id; this.element.set("id", this.id) }, addPath: function (a) { this.paths.push(a); this.parts.push(a); this.element.append(a.element) }, addImage: function (a) { this.images.push(a); this.parts.push(a); this.element.append(a.element) }, define: function () { this.element.update(); fljs.Player.getInstance(); this._define(this.element.element) }, use: function (a, b, c) { if (c) { a = this.element.clone(true); b && b.append(a); return a } if (!a) a = flash.geom.ColorTransform.identity; c = a.__toSvgString(); a = c in this.cxforms ? this.cxforms[c] : (this.cxforms[c] = this.useDef(a)); c = new fljs.dom.Element; c.create(fljs.dom.Namespace.Svg, "use"); document.getElementById(a.id); b && b.append(c); c.element.setAttributeNS(fljs.dom.Namespace.Xlink, "xlink:href", a.ref); return c }, useDef: function (a) { var b = new fljs.dom.Element; b.create(fljs.dom.Namespace.Svg, "g"); var c = [this.id, this.cxformCount++].join("-"); b.sets([["id", c]]); b.update(); this._define(b.element); var d = this.parts; for (var e in d) d[e].use(a, b); return { element: b, id: c, ref: "#" + c } }, _define: function (a) { fljs.Player.getInstance().defs.element.appendChild(a) } }); fljs.swf.def.ImageDef = function () { var a = this.element = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "g"); this.id = "image-def-" + fljs.swf.def.ImageDef.id++; this.ref = "#" + this.id; a.set("id", this.id) }; fljs.addMethods(fljs.swf.def.ImageDef, { setBitmapId: function (a) { a = fljs.Player.getInstance().dictionary[a]; if (!a) return false; this.bitmap = a; this._use = a.def.use(); this.element.append(this._use); return true }, define: function () { this.element.update(); this._define(this.element.element) }, use: function (a, b) { a = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "use"); a.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.ref]]); a.update(); b && b.append(a); return a }, _define: function (a) { fljs.Player.getInstance().defs.element.appendChild(a) } }); fljs.swf.def.ImageDef.id = 1; fljs.swf.BigEndianStringStream = function (a) { this.buffer = a; this.bitIndex = this.byteIndex = this._byte = 0; this.byteIndexForBits = -1; this.logger = fljs.console("parse") }; fljs.addMethods(fljs.swf.BigEndianStringStream, { length: function () { return this.buffer.length }, hasMore: function () { return this.byteIndex < this.buffer.length }, skipBytes: function (a) { this.byteIndex += a }, readBytes: function (a) { for (var b = [], c = 0; c < a; c++) b.push(this.buffer.charCodeAt(this.byteIndex++) & 255); return b }, align: function () { this.bitIndex = 8 }, nextUByte: function () { return this.buffer.charCodeAt(this.byteIndex++) & 255 }, nextSByte: function () { var a = this.buffer.charCodeAt(this.byteIndex++) & 255; if (a >= 128) a -= 256; return a }, nextUShort: function () { var a = ((this.buffer.charCodeAt(this.byteIndex++) & 255) << 8) + (this.buffer.charCodeAt(this.byteIndex++) & 255); if (a < 0) a += 65536; return a } }); fljs.swf.ClipEventFlags = { ClipEventKeyUp: -2147483648, ClipEventKeyDown: 1073741824, ClipEventMouseUp: 536870912, ClipEventMouseDown: 268435456, ClipEventMouseMove: 134217728, ClipEventUnload: 67108864, ClipEventEnterFrame: 33554432, ClipEventLoad: 16777216, ClipEventDragOver: 8388608, ClipEventRollOut: 4194304, ClipEventRollOver: 2097152, ClipEventReleaseOutside: 1048576, ClipEventRelease: 524288, ClipEventPress: 262144, ClipEventInitialize: 131072, ClipEventData: 65536, ClipEventConstruct: 1024, ClipEventKeyPress: 512, ClipEventDragOut: 256 }; fljs.swf.FillStyleTypes = { SolidFill: 0, LinearGradientFill: 16, RadialGradientFill: 18, FocalRadialGradientFill: 19, RepeatingBitmapFill: 64, ClippedBitmapFill: 65, NonSmoothedRepeatingBitmapFill: 66, NonSmoothedClippedBitmapFill: 67 }; fljs.swf.SpreadMethods = { Pad: 0, Reflect: 1, Repeat: 2 }; fljs.swf.InterpolationMethods = { Rgb: 0, LinearRgb: 1 }; fljs.swf.build.ShapeBuilder = function (a) { this.context = a; this.utils = new fljs.swf.build.SvgUtils }; fljs.addMethods(fljs.swf.build.ShapeBuilder, { build: function (a) { var b = this.parseSwfPaths(a), c = []; for (var d in b) c.push([this.buildPaths(b[d][0]), this.buildPaths(b[d][1])]); return this.buildDefinition(a, c) }, parseSwfPaths: function (a) { var b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, j = a.Shapes.ShapeRecords, h = this.stateNewStyles(a.Shapes.FillStyles), m = this.stateNewStyles(a.Shapes.LineStyles), k = [], l = 0, n = 0, p = 0, u = 1, o = { x1: 0, y1: 0 }, q = [], s = this; a = function () { o.parts = q; o.flipped = false; o.x2 = q[q.length - 1].x2; o.y2 = q[q.length - 1].y2; o.key1 = s.pointKey(o.x1, o.y1); o.key2 = s.pointKey(o.x2, o.y2); o.key = u += 1; l && h[l].edges.push(o); if (n) h[n].edges.push({ parts: q, flipped: true, x1: o.x2, y1: o.y2, x2: o.x1, y2: o.y1, key1: o.key2, key2: o.key1, key: u += 1 }); p && m[p].edges.push(o); o = { x1: o.x2, y1: o.y2 }; q = [] }; var r = function () { k.push([h, m]) }, t = function (w) { return Math.round(w * 100) / 100 }; for (var v in j) { g = j[v]; switch (g.type) { case "STRAIGHT": f = b + g.DeltaX; g = c + g.DeltaY; q.push({ x1: t(b), y1: t(c), x2: t(f), y2: t(g) }); b = f; c = g; break; case "CURVED": d = b + g.ControlDeltaX; e = c + g.ControlDeltaY; f = d + g.AnchorDeltaX; g = e + g.AnchorDeltaY; q.push({ x1: t(b), y1: t(c), cx: t(d), cy: t(e), x2: t(f), y2: t(g) }); b = f; c = g; break; case "NONEDGE": q.length && a(); if (g.StateNewStyles) { r(); h = this.stateNewStyles(g.FillStyles); m = this.stateNewStyles(g.LineStyles) } if (g.StateLineStyle) p = g.LineStyle; if (g.StateFillStyle0) l = g.FillStyle0; if (g.StateFillStyle1) n = g.FillStyle1; if (g.StateMoveTo) { b = g.MoveDeltaX; c = g.MoveDeltaY; o.x1 = b; o.y1 = c } break } } q.length && a(); r(); return k }, stateNewStyles: function (a) { var b = [{ edges: [], style: null}]; for (var c in a) b.push({ edges: [], style: a[c] }); return b }, buildPaths: function (a) { var b = [], c, d, e, f, g, j, h, m, k, l; for (e = 0; e < a.length; e++) { d = a[e].edges; if (d.length != 0) { j = {}; edgeIndexCount = {}; m = []; for (f = h = 0; f < d.length; f++) { c = d[f]; if (c.key1 == c.key2) { c.picked = true; h += 1; m.push([c]) } else { c.picked = false; j[c.key1] || (j[c.key1] = []); j[c.key1].push(c) } } for (f = 0; f < d.length; f++) { if (h == d.length) break; c = d[f]; if (!c.picked) { k = [c]; c.picked = true; h += 1; l = j[c.key1]; for (g = 0; g < l.length; g++) if (l[g] == c) { l.splice(g, 1); break } g = c.key1; for (c = c.key2; c != g;) { l = j[c]; if (typeof l == "undefined") break; if (l.length == 0) break; c = l.shift(); k.push(c); c.picked = true; h += 1; c = c.key2 } m.push(k) } } m.length && b.push({ path: m, style: a[e].style }) } } return b }, pointKey: function (a, b) { return [a, b].join(",") }, buildDefinition: function (a, b) { var c = new fljs.swf.def.ShapeDef; c.setCharaId(a.ShapeId); for (var d in b) { a = b[d][0]; for (var e in a) { var f = a[e]; if (this.isImagePath(f)) { var g = new fljs.swf.def.ImageDef; this.buildImageDef(g, f); c.addImage(g) } else { f.style.def = this.buildFillDef(f.style); f = this.buildPathDefinition(f.path, f.style, null); c.addPath(f) } } a = b[d][1]; for (e in a) { f = a[e]; f = this.buildPathDefinition(f.path, null, f.style); c.addPath(f) } } c.define(); return c }, sameStyle: function (a, b) { if (!a || !b) return false; if (a.def && b.def && a.def.fill && b.def.fill) if (a.def.fill.type == "Solid" && b.def.fill.type == "Solid") { if (a.def.fill.color != b.def.fill.color) return false } else return false; else if (a.def && b.def && (a.def.fill || b.def.fill)) return false; var c, d; c = a.HasFillFlag && a.FillType.Color ? a.FillType.Color : a.Color; if (b.HasFillFlag && b.FillType.Color) bcolor = b.FillType.Color; else d = b.Color; if (c && d) { if (this.rgbaToColor(c) != this.rgbaToColor(d)) return false; if (a.Width != b.Width) return false } else if (c || d) return false; return true }, buildPathDefinition: function (a, b, c) { var d = new fljs.swf.def.PathDef; this.setPathLineStyle(d, c); this.setPathFillStyle(d, b); d.element.set(null, "d", this.pathToString(a)); d.define(); return d }, isImagePath: function (a) { if (a.path.length != 1 || a.path[0].length != 1 || a.path[0][0].parts.length != 4 || !a.style) return false; var b = a.style.FillStyleType, c = fljs.swf.FillStyleTypes; if (!(b == c.RepeatingBitmapFill || b == c.ClippedBitmapFill || b == c.NonSmoothedRepeatingBitmapFill || b == c.NonSmoothedClippedBitmapFill)) return false; if (!fljs.Player.getInstance().dictionary[a.style.BitmapId]) return false; a = a.path[0][0].parts; for (b = 0; b < a.length; b++) { if (typeof a[b].cx != "undefined") return false; if (b < a.length - 1) { var d = a[b], e = a[b + 1], f, g, j; if (d.flipped) { f = d.x2; c = d.y2; g = d.x1; d = d.y1 } else { f = d.x1; c = d.y1; g = d.x2; d = d.y2 } if (e.flipped) { j = e.x1; e = e.y1 } else { j = e.x2; e = e.y2 } f = (f - g) * (j - g); c = (c - d) * (e - d); g = f + c; if (Math.abs(g) > 0.01) { if (!f || !c) return false; if (Math.abs(g / f) > 0.01 || Math.abs(g / c) > 0.01) return false } } } return true }, buildImageDef: function (a, b) { a.setBitmapId(b.style.BitmapId); for (var c = [], d = 0, e = 0, f = b.path[0][0].parts, g = 0; g < f.length; g++) { var j = f[g], h = Math.abs(j.x2 - j.x1); j = Math.abs(j.y2 - j.y1); if (h > d) d = h; if (j > e) e = j } a._use.set(null, "x", 0); a._use.set(null, "y", 0); a._use.set(null, "width", d); a._use.set(null, "height", e); if (b = b.style.BitmapMatrix) { b = this.utils.toMatrix(b); b.a /= 20; b.b /= 20; b.c /= 20; b.d /= 20; c.push("translate(" + [b.tx, b.ty] + ")"); b.tx = 0; b.ty = 0; c.push(b.__toSvgString()) } a._use.set(null, "transform", c.toString()); a._use.update(); a.element.update(); a.define() }, appendPathToDef: function (a, b) { a = a.element.element; b = a.getAttributeNS(null, "d") + " " + this.pathToString(b); a.setAttributeNS(null, "d", b) }, pathToString: function (a) { var b, c, d = []; for (var e in a) { var f = a[e]; d.push("M", f[0].x1, f[0].y1); for (var g in f) { b = f[g]; if (b.flipped) for (var j = b.parts.length - 1; j >= 0; j--) { c = b.parts[j]; typeof c.cx == "undefined" ? d.push("L", c.x1, c.y1) : d.push("Q", c.cx, c.cy, c.x1, c.y1) } else for (j in b.parts) { c = b.parts[j]; typeof c.cx == "undefined" ? d.push("L", c.x2, c.y2) : d.push("Q", c.cx, c.cy, c.x2, c.y2) } } } return d.join(" ") }, setPathLineStyle: function (a, b) { if (b) { var c = {}; c = b.HasFillFlag ? b.FillType.Color ? { thickness: Math.max(b.Width, 1), color: this.rgbaToColor(b.FillType.Color) } : { thickness: 1, color: 0 } : { thickness: Math.max(b.Width, 1), color: this.rgbaToColor(b.Color) }; a.setStroke(c) } else a.setStroke(null) }, setPathFillStyle: function (a, b) { if (b) if (b.FillStyleType == fljs.swf.FillStyleTypes.SolidFill) this.setPathSolidFillStyle(a, b); else b.def && a.setFill(b.def); else a.setFill(null) }, setPathSolidFillStyle: function (a, b) { a.setFill({ type: "Solid", color: this.rgbaToColor(b.Color) }) }, buildFillDef: function (a) { if (!a) return null; var b = a.FillStyleType, c = fljs.swf.FillStyleTypes; return b == c.LinearGradientFill || b == c.RadialGradientFill || b == c.FocalRadialGradientFill ? this.buildGradientFillDef(a) : b == c.RepeatingBitmapFill || b == c.ClippedBitmapFill || b == c.NonSmoothedRepeatingBitmapFill || b == c.NonSmoothedClippedBitmapFill ? this.buildBitmapFillDef(a) : null }, buildGradientFillDef: function (a) { var b = new fljs.swf.def.GradientFillDef, c = []; if (a.FillStyleType == fljs.swf.FillStyleTypes.LinearGradientFill) { b.create("linearGradient"); c.push([null, "x1", -819.2], [null, "x2", 819.2]) } else { b.create("radialGradient"); c.push([null, "cx", 0], [null, "cy", 0], [null, "r", 819.2]) } c.push([null, "gradientUnits", "userSpaceOnUse"]); c.push([null, "gradientTransform", this.utils.toSvgMatrixString(a.GradientMatrix)]); var d, e = fljs.swf.SpreadMethods; switch (a.Gradient.SpreadMode) { case e.Pad: d = "pad"; break; case e.Reflect: d = "reflect"; break; case e.Repeat: d = "repeat"; break } c.push([null, "spreadMethod", d]); var f; d = fljs.swf.InterpolationMethods; switch (a.Gradient.InterpolationMode) { case d.LinearRgb: f = "linearRGB"; break; case d.Rgb: f = "rgb"; break } c.push([null, "color-interpolation", f]); a = a.Gradient.GradientRecords; for (var g in a) { f = a[g]; d = new fljs.swf.def.GradientFillStopDef; d.setColor(this.rgbaToColor(f.Color)); e = []; e.push([null, "offset", f.Ratio / 255]); d.element.sets(e); d.element.update(); b.addStop(d) } b.element.sets(c); b.define(); return b }, buildBitmapFillDef: function (a) { var b = new fljs.swf.def.BitmapFillDef; if (!b.setBitmapId(a.BitmapId)) { b.define(); return b } var c = []; c.push([null, "patternUnits", "userSpaceOnUse"], [null, "x", 0], [null, "y", 0], [null, "width", b.bitmap.Width], [null, "height", b.bitmap.Height]); var d = []; if (a = a.BitmapMatrix) { a = this.utils.toMatrix(a); a.a /= 20; a.b /= 20; a.c /= 20; a.d /= 20; d.push("translate(" + [a.tx, a.ty] + ")"); a.tx = 0; a.ty = 0; d.push(a.__toSvgString()) } c.push([null, "patternTransform", d.toString()]); b.element.sets(c); b.define(); return b }, rgbaToColor: function (a) { var b = (a.Red << 24) + (a.Green << 16) + (a.Blue << 8); b |= typeof a.Alpha != "undefined" ? a.Alpha : 255; return b } }); fljs.swf.tag.DefineShape = function () {}; fljs.addMethods(fljs.swf.tag.DefineShape, { read: function (a) { a.beginContext(fljs.swf.tag.DefineShape); this.defId = this.ShapeId = a.readUI16(); this.ShapeBounds = a.readRECT(); a.stream.align(); this.Shapes = a.readSHAPEWITHSTYLE(); a.endContext() }, waitForBitmaps: function () { var a = fljs.Player.getInstance(); this.bitmapIds = this.findBitmaps(this); this.waiting = 0; var b = fljs.Player.getInstance().mainTimeline.resources, c = []; for (var d in this.bitmapIds) if (b.waiting(d)) { this.waiting += 1; b.listen(d, fljs.bind(this.onLoad, this, a)) } else c.push(d); for (var e in c) delete this.bitmapIds[c[e]] }, onLoad: function (a, b) { if (this.bitmapIds[b]) { delete this.bitmapIds[b]; this.waiting -= 1 } this.waiting == 0 && this.evaluate(a) }, evaluate: function (a) { this.bitmapIds || this.waitForBitmaps(); if (!(this.waiting > 0)) { this.def = (new fljs.swf.build.ShapeBuilder).build(this); a.addDefinition(this, this.ShapeId) } }, findBitmaps: function (a) { var b = {}; this.findBitmapsForStyles(b, a.Shapes.FillStyles); a = a.Shapes.ShapeRecords; for (var c in a) { var d = a[c]; d.type == "NONEDGE" && d.StateNewStyles && this.findBitmapsForStyles(b, d.FillStyles) } return b }, findBitmapsForStyles: function (a, b) { var c = fljs.swf.FillStyleTypes; for (var d in b) { var e = b[d], f = e.FillStyleType; if (f == c.RepeatingBitmapFill || f == c.ClippedBitmapFill || f == c.NonSmoothedRepeatingBitmapFill || f == c.NonSmoothedClippedBitmapFill) a[e.BitmapId] = true } }, build: function (a, b, c) { a = new flash.display.Shape; a.useTag(this, b, c); return a } }); fljs.dom = {}; fljs.dom.Namespace = { Svg: "http://www.w3.org/2000/svg", Xlink: "http://www.w3.org/1999/xlink" }; fljs.dom.Element = function (a) { this.element = a; this.changes = [] }; fljs.addMethods(fljs.dom.Element, { create: function (a, b) { if (arguments.length == 1) { b = a; this.element = document.createElement(b) } else this.element = document.createElementNS(a, b); this.changes = [] }, set: function (a, b, c) { if (arguments.length == 2) { c = b; b = a; this.changes.push([b, c]) } else this.changes.push([a, b, c]) }, sets: function (a) { this.changes.push.apply(this.changes, a) }, update: function () { var a = this.element, b = this.changes; for (var c in b) { var d = b[c]; d.length == 2 ? a.setAttribute(d[0], d[1]) : a.setAttributeNS(d[0], d[1], d[2]) } this.changes = [] }, append: function (a) { this.element.appendChild(a.element) }, appendText: function (a) { this.element.appendChild(document.createTextNode(a)) }, clone: function (a) { var b = new fljs.dom.Element; b.element = this.element.cloneNode(a); b.changes = []; return b }, remove: function (a) { this.element.removeChild(a.element) }, getElement: function () { return this.element } }); fljs.swf.build.FontBuilder = function (a, b) { this.tag = a; this.player = b }; fljs.addMethods(fljs.swf.build.FontBuilder, { buildDef: function () { var a = this.buildGlyphPaths(); return this.player.renderTextAsGlyphs ? this.buildFontDef(a) : this.buildShapeDef(a) }, buildFontDef: function (a) { var b = this.tag, c = this.player.element.getElement().ownerDocument, d = c.createElementNS("http://www.w3.org/2000/svg", "font"), e = c.createElementNS("http://www.w3.org/2000/svg", "font-face"); e.setAttributeNS(null, "font-family", "font-" + b.FontId); e.setAttributeNS(null, "units-per-em", 51.2); d.appendChild(e); for (var f in a) { e = c.createElementNS("http://www.w3.org/2000/svg", "glyph"); e.setAttributeNS(null, "unicode", String.fromCharCode(b.CodeTable[f])); b.FontAdvanceTable && e.setAttributeNS(null, "horiz-adv-x", b.FontAdvanceTable[f] / 20); e.setAttributeNS(null, "d", a[f]); d.appendChild(e) } return [{ element: d }] }, buildShapeDef: function (a) { var b = this.tag, c = []; for (var d in a) { var e = new fljs.dom.Element; e.create(fljs.dom.Namespace.Svg, "path"); var f = ["font", b.FontId, b.FontFlagsBold, b.FontFlagsItalic, b.CodeTable[d]].join("-"); if (document.getElementById(f)) rar.rar = rar; e.sets([["id", f], ["d", a[d]]]); e.update(); c.push(e) } return c }, buildGlyphPaths: function () { for (var a = [], b = this.tag.GlyphShapeTable, c = 0, d = b.length; c < d; c++) { var e = this.buildPath(this.buildGlyph(b[c])); a.push(e) } return a }, buildGlyph: function (a) { var b = 0, c = 0, d = 0, e = 0, f = 0, g = 0; a = a.ShapeRecords; var j = [], h = [], m = 1; if (this.tag instanceof fljs.swf.tag.DefineFont3) m = 20; var k = function (n) { return Math.round(n * 100) / 100 / m }; for (var l in a) { g = a[l]; switch (g.type) { case "STRAIGHT": f = b + g.DeltaX; g = c + g.DeltaY; h.push({ x1: k(b), y1: k(c), x2: k(f), y2: k(g) }); b = f; c = g; break; case "CURVED": d = b + g.ControlDeltaX; e = c + g.ControlDeltaY; f = d + g.AnchorDeltaX; g = e + g.AnchorDeltaY; h.push({ x1: k(b), y1: k(c), cx: k(d), cy: k(e), x2: k(f), y2: k(g) }); b = f; c = g; break; case "NONEDGE": if (g.StateMoveTo) { h.length && j.push(h); b = g.MoveDeltaX; c = g.MoveDeltaY; h = [] } break } } h.length && j.push(h); return j }, buildPath: function (a) { var b = [], c = this.player.renderTextAsGlyphs ? -1 : 1, d; for (var e in a) { var f = a[e]; b.push("M", f[0].x1, f[0].y1 * c); for (var g in f) { d = f[g]; typeof d.cx == "undefined" ? b.push("L", d.x2, d.y2 * c) : b.push("Q", d.cx, d.cy * c, d.x2, d.y2 * c) } } b.length == 0 && b.push("M", 0, 0); return b.join(" ") } }); fljs.swf.build.FontBuilder.id = 1; fljs.swf.tag.DefineFont = function () {}; fljs.addMethods(fljs.swf.tag.DefineFont, { read: function (a) { this.FontId = a.readUI16(); this.OffsetTable = [a.readUI16()]; var b = this.OffsetTable[0] / 2; this.NumGlyphs = b; for (var c = 1; c < b; c++) this.OffsetTable.push(a.readUI16()); this.GlyphShapeTable = []; for (c = 0; c < b; c++) this.GlyphShapeTable.push(a.readSHAPE()) }, evaluate: function (a) { this.CodeTable = []; for (var b in this.GlyphShapeTable) this.CodeTable.push(b); this.FontName = "font-no-info-" + this.FontId; this.FontFlagsItalic = this.FontFlagsBold = false; a.fontsWithoutInfo[this.FontId] = this; b = (new fljs.swf.build.FontBuilder(this, a)).buildDef(); a.defineFont2(this.FontId, this.GlyphShapeTable, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable) } }); fljs.swf.tag.SetBackgroundColor = function () {}; fljs.addMethods(fljs.swf.tag.SetBackgroundColor, { read: function (a) { this.BackgroundColor = a.readRGB() }, evaluate: function (a) { a.stage.setBackgroundColor_((this.BackgroundColor.Red << 16) + (this.BackgroundColor.Green << 8) + this.BackgroundColor.Blue) } }); fljs.swf.tag.DoAbc = function () {}; fljs.addMethods(fljs.swf.tag.DoAbc, { read: function (a, b) { var c = a.stream.byteIndex; this.Flags = a.readUI32(); this.Name = a.readString(); b = b.TagLength - (a.stream.byteIndex - c); c = []; for (var d = 0; d < b; d++) c.push(String.fromCharCode(a.readUB())); this.AbcData = c.join("") }, evaluate: function () {} }); fljs.swf.tag.SoundStreamBlock = function () {}; fljs.addMethods(fljs.swf.tag.SoundStreamBlock, { read: function (a, b) { this.SampleCount = a.readUI16(); this.Mp3SoundData = a.readMp3SoundData(b.TagLength - 2) }, evaluate: function (a, b, c, d) { if (d == a.mainTimeline) if (b = d.audioStream) { b.shouldBuffer() && b.buffer(); c = a.mainTimeline.currentFrameIndex_; if (!b.playing && b.frameShouldPlay(c)) { b.playFrame(c); a.sync.start(c) } } }, duration: function () { var a = 0; for (var b in this.Mp3SoundData.Mp3Frames) { var c = this.Mp3SoundData.Mp3Frames[b], d; d = c.MpegVersion == 3 ? 1152 : 576; var e = { 0: 11025, 1: 12E3, 2: 8E3 }[c.SamplingRate]; e *= { 0: 1, 2: 2, 3: 4 }[c.MpegVersion]; a += 1E3 * d / e / (c.ChannelMode == 3 ? 1 : 2) } return a } }); fljs.swf.SwfStreamingSoundReader = function (a, b) { this.stream = new fljs.swf.SwfStream(new fljs.swf.StringStream(a)); this.container = b; b.soundStream = this; this.tagMap = { 19: fljs.swf.tag.SoundStreamBlock }; this.currentTimeOffset = this.currentPlayer = 0; this.data = []; this.dataDurations = []; this.container.needAudio(); for (a = 0; a < 2; a++) { b = this.container.audio[a]; b.currentTimeOffset = 0; b.addEventListener("load", fljs.bind(this.onLoadSrc, this, a), true) } this.lastBufferAt = null; this.swfFrames = {}; this.duration = this.swfFrameNum = 0; this.playing = false; this.nextTime = null; this.waitingForLoad = false; this.dataOffset = 0; this.player = fljs.Player.getInstance() }; fljs.addMethods(fljs.swf.SwfStreamingSoundReader, { controlFrame: function () {}, timeDiff: function (a) { var b = this.container.audio[this.currentPlayer]; return 1E3 * (b.currentTime + b.currentTimeOffset) - this.swfFrames[a] }, currentTime: function () { var a = this.container.audio[this.currentPlayer]; return 1E3 * (a.currentTime + a.currentTimeOffset) }, play: function (a) { a = this.swfFrames[a]; if (a == null) a = 0; a /= 1E3; this.nextTime = a; this.playing = true; if (!this.waitingForLoad) { var b = this.container.audio[this.currentPlayer]; b.currentTime = a - b.currentTimeOffset; b.fljsPlaying = true; this.player.playing && b.play() } }, stop: function () { this.playing = false; var a = this.container.audio[this.currentPlayer]; a.fljsPlaying = false; a.pause() }, silence: function () { return "" }, onLoadSrc: function (a) { var b = this.container.audio[a], c = this.container.audio[1 - a]; b.fljsWaiting = false; if (this.nextTime != null) { b.currentTime = this.nextTime - b.currentTimeOffset; this.nextTime = null } else b.currentTime = c.currentTime + c.currentTimeOffset - b.currentTimeOffset; if (this.playing) { b.fljsPlaying = true; this.player.playing && b.play() } c.fljsPlaying = false; c.pause(); this.currentPlayer = a; this.waitingForLoad = false }, processBlock: function (a, b) { a = new fljs.swf.StringStream(this.stream.stream.buffer); a.byteIndex = b.Mp3SoundData.byteIndex; a = a.readBytes(b.Mp3SoundData.byteCount).join(""); this.data.push(String(a)); if (b.SampleCount) { a = b.duration(); b = a * (b.Mp3SoundData.SeekSamples / b.SampleCount); this.swfFrames[this.swfFrameNum] = this.duration + b; this.sync && this.sync.setFrameTime(this.swfFrameNum, this.duration + b); this.duration += a } else a = 0; this.dataDurations.push(a / 1E3); this.blocks += 1; return this.blocks < fljs.swf.SwfStreamingSoundReader.bufferBlocks }, buffer: function () { this.blocks = 0; this.readTags(fljs.bind(this.processBlock, this), this.stream.stream.byteIndex); for (var a = this.container.audio[this.currentPlayer], b = this.container.audio[1 - this.currentPlayer]; this.currentTimeOffset + this.dataDurations[this.dataOffset] < a.currentTime + a.currentTimeOffset;) { this.currentTimeOffset += this.dataDurations[this.dataOffset]; this.dataOffset += 1 } a = "data:audio/mpeg;base64," + btoa(this.data.slice(this.dataOffset).join("")); b.currentTimeOffset = this.currentTimeOffset; b.setAttribute("src", a); this.waitingForLoad = true; b.fljsWaiting = true; b.load(); this.lastBufferAt = fljs.now() }, readTags: function (a, b) { var c = fljs.console("soundstream"); if (b) this.stream.stream.seek(b); else this.stream.header = this.stream.readSwfHeader(); for (var d, e; this.stream.hasMore();) { d = this.stream.readRecordHeader(); e = this.tagMap[d.TagType]; b = this.stream.stream.byteIndex; if (e) { e = new e; e.read(this.stream, d, this, a, fljs.Player.getInstance().stage); if (!a(d, e)) return } else { this.stream.skipBytes(d.TagLength); if (d.TagType == 1) this.swfFrameNum += 1 } if (this.stream.stream.byteIndex != b + d.TagLength) { c.info("expected " + (b + d.TagLength) + " but got " + this.stream.stream.byteIndex); return } } } }); fljs.swf.SwfStreamingSoundReader.rebufferDuration = 9E4; fljs.swf.SwfStreamingSoundReader.bufferBlocks = 4500; fljs.swf.tag.SoundStreamHead = function () {}; fljs.addMethods(fljs.swf.tag.SoundStreamHead, { read: function (a) { a.readUB(4); this.PlaybackSoundRate = a.readUB(2); this.PlaybackSoundSize = a.readUB(1); this.PlaybackSoundType = a.readUB(1); this.StreamSoundCompression = a.readUB(4); this.StreamSoundRate = a.readUB(2); this.StreamSoundSize = a.readUB(1); this.StreamSoundType = a.readUB(1); this.StreamSoundSampleCount = a.readUI16(); if (this.StreamSoundCompression == 2) this.LatencySeek = a.readSI16() }, evaluate: function (a, b, c, d) { if (!this.processed) { d.soundStreamHead = this; if (d == a.mainTimeline) { d.audioStream = fljs.agent.browser == "Firefox" ? new fljs.player.ExtAudioStream(a, d, "audio/" + a.name + "-" + (d.def ? d.def.defId : "main") + ".wav") : new fljs.player.SwfAudioStream(a, d); a.sync = new fljs.player.AudioSync(a.header.FrameRate); a.sync.setAudio(d.audioStream); d.audioStream.buffer() } this.processed = true } } }); fljs.swf.tag.DefineFont2 = function () {}; fljs.addMethods(fljs.swf.tag.DefineFont2, { read: function (a) { var b; this.FontId = a.readUI16(); this.FontFlagsHasLayout = a.readUB(1); this.FontFlagsShiftJIS = a.readUB(1); this.FontFlagsSmallText = a.readUB(1); this.FontFlagsANSI = a.readUB(1); this.FontFlagsWideOffsets = a.readUB(1); this.FontFlagsWideCodes = a.readUB(1); a.FontFlagsWideCodes = this.FontFlagsWideCodes; this.FontFlagsItalic = a.readUB(1); this.FontFlagsBold = a.readUB(1); this.LanguageCode = a.readLangCode(); this.FontNameLen = a.readUI8(); var c = []; for (b = 0; b < this.FontNameLen; b++) c.push(String.fromCharCode(a.readUI8())); this.FontName = c.join(""); this.NumGlyphs = a.readUI16(); this.OffsetTable = []; if (this.FontFlagsWideOffsets) { for (b = 0; b < this.NumGlyphs; b++) this.OffsetTable.push(a.readUI32()); this.CodeTableOffset = a.readUI32() } else { for (b = 0; b < this.NumGlyphs; b++) this.OffsetTable.push(a.readUI16()); this.CodeTableOffset = a.readUI16() } this.GlyphShapeTable = []; for (b = 0; b < this.NumGlyphs; b++) this.GlyphShapeTable.push(a.readShape()); this.CodeTable = []; if (this.FontFlagsWideCodes) for (b = 0; b < this.NumGlyphs; b++) this.CodeTable.push(a.readUI16()); else for (b = 0; b < this.NumGlyphs; b++) this.CodeTable.push(a.readUI8()); if (this.FontFlagsHasLayout) { this.FontAscent = a.readSI16(); this.FontDescent = a.readSI16(); this.FontLeading = a.readSI16(); this.FontAdvanceTable = []; for (b = 0; b < this.NumGlyphs; b++) this.FontAdvanceTable.push(a.readSI16()); this.FontBoundsTable = []; for (b = 0; b < this.NumGlyphs; b++) { this.FontBoundsTable.push(a.readRECT()); a.stream.align() } this.KerningCount = a.readUI16(); this.FontKerningTable = []; for (b = 0; b < this.KerningCount; b++) this.FontKerningTable.push(a.readKerningRecord()) } }, evaluate: function (a) { var b = (new fljs.swf.build.FontBuilder(this, a)).buildDef(); a.defineFont2(this.FontId, this.GlyphShapeTable.length, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable, this) } }); flash.text = {}; flash.text.TextFormatAlign = function () {}; fljs.addConstants(flash.text.TextFormatAlign, { CENTER: "center", JUSTIFY: "justify", LEFT: "left", RIGHT: "right" }); flash.text.TextFormat = function (a, b, c, d, e, f, g, j, h, m, k, l, n, p) { if (typeof a == "undefined") a = null; this.font = a; if (typeof b == "undefined") b = null; this.size = b; if (typeof c == "undefined") c = null; this.color = c; if (typeof d == "undefined") d = null; this.bold = d; if (typeof e == "undefined") e = null; this.italic = e; if (typeof f == "undefined") f = null; this.underline = f; if (typeof g == "undefined") g = null; this.url = g; if (typeof j == "undefined") j = null; this.target = j; if (typeof h == "undefined") h = flash.text.TextFormatAlign.LEFT; this.align = h; if (typeof m == "undefined") m = null; this.leftMargin = m; if (typeof k == "undefined") k = null; this.rightMargin = k; if (typeof l == "undefined") l = null; this.indent = l; if (typeof n == "undefined") n = null; this.leading = n; if (typeof p == "undefined") p = 1; this.alpha = p }; flash.text.TextField = function () { flash.display.InteractiveObject.call(this); var a = this.element_ = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "g"); this._clipElement.element.appendChild(this.element_.getElement()); this.font_ = { family: "times", size: 12 }; this.fill_ = { color: 0 }; this.textFormat_ = new flash.text.TextFormat(this.font_.family, this.font_.size, this.fill_.color, false, false, false, null, null, flash.text.TextFormatAlign.LEFT, 0, 0, 0, 0); if (fljs.Player.getInstance().renderTextAsGlyphs) { a = Math.round(this.font_.size * 0.85); var b = Math.round(0 - this.font_.size / 2 + a); a = this._text = this.text_ = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "text"); a.sets([[null, "fill", this.__colorToSvgString(this.font_.color)], [null, "font-family", this.font_.family], [null, "font-size", this.font_.size], [null, "font-family", this.font_.family], [null, "x", 0], [null, "y", b]]); a.update(); this.element_.append(a) } else { a = this._text = new fljs.dom.Element; a.create(fljs.dom.Namespace.Svg, "g"); a.update(); this.element_.append(a) } this._textContent = "" }; fljs.inherits(flash.text.TextField, flash.display.InteractiveObject); fljs.addMethods(flash.text.TextField, { setTextMatrix: function (a) { this._textMatrix = a; this._text.set(null, 'transform', a.__toSvgString()); this._text.update() }, __setSpans: function (a) { var b = []; this.spans = []; if (fljs.Player.getInstance().renderTextAsGlyphs) { var c = this.text_.getElement().ownerDocument; for (var d in a) { var e = a[d], f = c.createElementNS("http://www.w3.org/2000/svg", "tspan"), g = e.format.indent, j = [g]; for (var h in e.advances) { g += e.advances[h]; j.push(g) } f.appendChild(c.createTextNode(e.text)); f.setAttributeNS(null, "x", j.join(" ")); f.setAttributeNS(null, "y", e.format.leading); f.setAttributeNS(null, "font-size", e.format.size); f.setAttributeNS(null, "fill", this.__colorToSvgString(e.format.color)); f.setAttributeNS(null, "fill-opacity", this.textOpacityWithXform(e.format.alpha)); this.text_.getElement().appendChild(f); this.spans.push({ def: e, element: f }); b.push(e.text) } } else { fljs.Player.getInstance(); c = this._text; for (d in a) { e = a[d]; f = e.format; j = e.advances; var m = new fljs.dom.Element; m.create(fljs.dom.Namespace.Svg, "g"); m.sets([["transform", ["translate(", f.indent, ",", f.leading, ")"].join("")], ["fill", this.__colorToSvgString(f.color)], ["fill-opacity", this.opacityWithXform(f.alpha)]]); m.update(); h = g = 0; for (var k = e.text.length; h < k; h++) { var l = new fljs.dom.Element; l.create(fljs.dom.Namespace.Svg, "use"); var n = ["font", f.fontid, f.bold, f.italic, e.text.charCodeAt(h)].join("-"); l.sets([[fljs.dom.Namespace.Xlink, "xlink:href", "#" + n], ["transform", ["translate(", g, ")scale(", f.size * 20 / 1024, ")"].join("")]]); l.update(); m.append(l); g += j[h] } c.append(m); this.spans.push({ def: e, element: m }); b.push(e.text) } } this._textContent = b.join("") }, __colorToSvgString: function (a) { var b = a >> 16 & 255, c = a >> 8 & 255; a = a & 255; var d = this.getTransform().getConcatenatedColorTransform(); if (!d.__default) { b = Math.max(0, Math.min(255, Math.round(b * d.redMultiplier + d.redOffset))); c = Math.max(0, Math.min(255, Math.round(c * d.greenMultiplier + d.greenOffset))); a = Math.max(0, Math.min(255, Math.round(a * d.blueMultiplier + d.blueOffset))) } return "rgb(" + [b, c, a] + ")" }, opacityWithXform: function (a) { return a }, textOpacityWithXform: function (a) { var b = this.getTransform().getConcatenatedColorTransform(); return b.__default ? a : Math.max(0, Math.min(255, Math.round(a * 255 * b.alphaMultiplier + b.alphaOffset))) / 255 }, __setColorTransform: function (a) { if (fljs.Player.getInstance().renderTextAsGlyphs) for (var b in this.spans) { var c = this.spans[b]; a = c.def; c = c.element; c.setAttributeNS(null, "color", this.__colorToSvgString(a.format.color)); c.setAttributeNS(null, "fill-opacity", this.textOpacityWithXform(a.format.alpha)) } else { fljs.base(this, "__setColorTransform", a); for (b in this.spans) { c = this.spans[b]; a = c.def; c = c.element; c.sets([[null, "color", this.__colorToSvgString(a.format.color)]]); c.update() } } }, setHeight: function (a) { this.height_ = a }, setWidth: function (a) { this.width_ = a }, getDefaultTextFormat: function () { return this.textFormat_ }, setDefaultTextFormat: function (a) { if (fljs.Player.getInstance().renderTextAsGlyphs) { var b = this.textFormat_; this.textFormat_ = a; if (b.align != this.textFormat_.align) switch (this.textFormat_.align) { case flash.text.TextFormatAlign.LEFT: this.text_.getElement().setAttribute("x", this.x); this.text_.getElement().setAttribute("text-anchor", "start"); break; case flash.text.TextFormatAlign.CENTER: this.text_.getElement().setAttribute("x", this.x + this.width / 2); this.text_.getElement().setAttribute("text-anchor", "middle"); break; case flash.text.TextFormatAlign.LEFT: this.text_.getElement().setAttribute("x", this.x + this.width); this.text_.getElement().setAttribute("text-anchor", "end"); break; default: } if (b.font != this.textFormat_.font) { a = fljs.Player.getInstance().lookupFontByStyle(this.textFormat_.font, this.textFormat_.bold, this.textFormat_.italic); this.text_.getElement().setAttributeNS(null, "font-family", a) } if (b.bold != this.textFormat_.bold) { a = this.textFormat_.bold ? "bold" : ""; this.text_.getElement().setAttribute("font-weight", a) } if (b.italic != this.textFormat_.italic) { a = this.textFormat_.italic ? "italic" : ""; this.text_.getElement().setAttribute("font-style", a) } if (b.color != this.textFormat_.color) { this.fill_ = { color: this.textFormat_.color }; this.text_.set(null, "fill", this.__colorToSvgString(this.fill_.color)) } if (b.size != this.textFormat_.size) { this.font_ = { size: this.textFormat_.size, family: this.textFormat_.font }; this.text_.getElement().setAttribute("font-size", this.textFormat_.size) } b.alpha != this.textFormat_.alpha && this.text_.getElement().setAttribute("opacity", this.textFormat_.alpha) } } }); fljs.swf.tag.DefineEditText = function () {}; fljs.addMethods(fljs.swf.tag.DefineEditText, { read: function (a) { this.CharacterId = a.readUI16(); this.Bounds = a.readRECT(); a.stream.align(); this.HasText = a.readUB(1); this.WordWrap = a.readUB(1); this.Multiline = a.readUB(1); this.Password = a.readUB(1); this.ReadOnly = a.readUB(1); this.HasTextColor = a.readUB(1); this.HasMaxLength = a.readUB(1); this.HasFont = a.readUB(1); this.HasFontClass = a.readUB(1); this.AutoSize = a.readUB(1); this.HasLayout = a.readUB(1); this.NoSelect = a.readUB(1); this.Border = a.readUB(1); this.WasStatic = a.readUB(1); this.HTML = a.readUB(1); this.UseOutlines = a.readUB(1); if (this.HasFont) this.FontId = a.readUI16(); if (this.HasFontClass) this.FontClass = a.readString(); if (this.HasFont) this.FontHeight = a.readUI16() / a.twipsPerPixel; if (this.HasTextColor) this.TextColor = a.readRGBA(); if (this.HasMaxLength) this.MaxLength = a.readUI16(); if (this.HasLayout) { this.Align = a.readUI8(); this.LeftMargin = a.readUI16(); this.RightMargin = a.readUI16(); this.Indent = a.readUI16(); this.Leading = a.readUI16() } this.VariableName = a.readString(); if (this.HasText) this.InitialText = a.readString() }, evaluate: function (a) { a.addDefinition(this, this.CharacterId) }, _build: function (a) { a = a.element.getElement().ownerDocument; var b = a.createElement("text"); b.setAttribute("font-family", "font-" + String(this.FontId)); b.setAttribute("font-size", this.FontHeight); var c = this.TextColor, d = 0; d += c.Red << 16; d += c.Green << 8; d += c.Blue; b.setAttribute("fill", d); var e, f; if (this.Align) { if (this.Align == 1) { e = this.Bounds.Xmax; f = "end" } } else { e = this.Bounds.Xmin; f = "start" } b.setAttribute("x", e); b.setAttribute("text-anchor", f); b.setAttribute("y", this.Bounds.Ymax); b.appendChild(a.createTextNode(this.InitialText ? this.InitialText : "")); return b }, build: function (a, b) { return this._buildTextField(a, b) }, _buildTextField: function (a, b) { var c = new flash.text.TextField; b && c.getTransform().setColorTransform(b); c.text = this.InitialText; c.x = this.Bounds.Xmin; c.y = this.Bounds.Ymin; c.setWidth(this.Bounds.Xmax - this.Bounds.Xmin); c.setHeight(this.Bounds.Ymax - this.Bounds.Ymin); b = new flash.text.TextFormat; switch (this.Align) { case 0: b.align = flash.text.TextFormatAlign.LEFT; break; case 1: b.align = flash.text.TextFormatAlign.RIGHT; break; case 2: b.align = flash.text.TextFormatAlign.CENTER; break; case 3: b.align = flash.text.TextFormatAlign.JUSTIFY; break } if (a = a.fonts2[this.FontId]) { b.bold = a.bold; b.italic = a.italic; b.font = a.name } a = this.TextColor; var d = 0; d += a.Red << 16; d += a.Green << 8; d += a.Blue; b.color = d; b.leading = this.Leading; b.leftMargin = this.LeftMargin; b.rightMargin = this.RightMargin; b.indent = this.Indent; b.size = this.FontHeight; c.setDefaultTextFormat(b); return c } }); fljs.swf.tag.RemoveObject2 = function () {}; fljs.addMethods(fljs.swf.tag.RemoveObject2, { read: function (a) { this.Depth = a.readUI16() }, evaluate: function (a, b, c, d) { d.removeChildAt(this.Depth) } }); fljs.swf.build.JpegBuilder = function () {}; fljs.addMethods(fljs.swf.build.JpegBuilder, { parseJpeg: function (a, b, c, d) { b = String(b.readBytes(c).join("")); var e = new fljs.swf.BigEndianStringStream(b), f, g, j = fljs.Player.getInstance(), h; if (e.nextUShort() == 65497) { h = d && j.jpegTables ? 6 : 4; e.nextUShort(); e.nextUShort() } else h = d && j.jpegTables ? 2 : 0; for (var m = 0; e.byteIndex < c;) { f = e.nextUShort(); g = e.nextUShort(); if (f == 65472) { e.nextUByte(); a.Height = e.nextUShort(); a.Width = e.nextUShort(); break } if (f == 65497) m = e.byteIndex - 6; else e.skipBytes(g - 2) } if (m) b = b.substr(0, m) + b.substr(m + 6); if (h) b = b.substr(h); a.DataUri = "data:image/jpeg;base64," + btoa((d && j.jpegTables ? j.jpegTables : "") + b) }, parseJpegTables: function (a, b, c) { b = String(b.readBytes(c).join("")); var d = new fljs.swf.BigEndianStringStream(b), e = 0; if (d.nextUShort() == 65497) { e = 4; d.nextUShort(); d.nextUShort() } a.JpegTables = b.substr(e, c - e - 2) } }); fljs.swf.tag.DefineBitsJPEG2 = function () {}; fljs.addMethods(fljs.swf.tag.DefineBitsJPEG2, { read: function (a, b) { this.CharacterId = a.readUI16(); b = b.TagLength - 2; (new fljs.swf.build.JpegBuilder).parseJpeg(this, a, b, true) }, evaluate: function (a) { this.defId = "image" + this.CharacterId; a.addDefinition(this, this.CharacterId); a = new fljs.swf.def.BitmapDef; a.setCharaId(this.defId); a.element.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.DataUri], [null, "x", 0], [null, "y", 0], [null, "width", this.Width], [null, "height", this.Height]]); a.define(); this.def = a } }); flash.display.Sprite = function () { flash.display.DisplayObjectContainer.call(this) }; fljs.inherits(flash.display.Sprite, flash.display.DisplayObjectContainer); fljs.addMethods(flash.display.Sprite, { startDrag: function () {}, stopDrag: function () {}, getGraphics: function () { return this.graphics_ } }); flash.display.Scene = function () {}; flash.ui = {}; flash.ui.Keyboard = function () {}; fljs.addStaticMethods(flash.ui.Keyboard, { isAccessible: function () {} }); fljs.addConstants(flash.ui.Keyboard, { BACKSPACE: 8, CAPS_LOCK: 20, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, F1: 112, F10: 121, F11: 122, F12: 123, F13: 124, F14: 125, F15: 126, F2: 113, F3: 114, F4: 115, F5: 116, F6: 117, F7: 118, F8: 119, F9: 120, HOME: 36, INSERT: 45, LEFT: 37, NUMPAD_0: 96, NUMPAD_1: 97, NUMPAD_2: 98, NUMPAD_3: 99, NUMPAD_4: 100, NUMPAD_5: 101, NUMPAD_6: 102, NUMPAD_7: 103, NUMPAD_8: 104, NUMPAD_9: 105, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38 }); fljs.swf.AudioStreamReader = function (a, b) { this.player = a; this.delegate = b; this.reader = new fljs.swf.TagReader(a.parser.reader.stream.stream.buffer); this.reader.readSwfHeader() }; fljs.addMethods(fljs.swf.AudioStreamReader, { hasMore: function () { return this.reader.stream.hasMore() }, read: function (a) { for (var b = 0, c = this.delegate, d = this.reader, e = [0]; d.stream.hasMore();) { var f = d.readTagHeader(); switch (f.tagClass()) { case fljs.swf.tag.SoundStreamBlock: f = d.readTag(f); c.onSoundStreamBlockTag(f, null, e[0]); b++; if (b == a) return; break; case fljs.swf.tag.ShowFrame: f = d.readTag(f); c.onShowFrameTag(f, null, e[0]); e[0] += 1; break; default: d.skipTag(f); c.onUnknownTag && c.onUnknownTag(f, null, e[0]); break } } } }); fljs.player = {}; fljs.player.ResourceManager = function () { this.frames = {}; this.res = {}; this.streams = {}; this.listeners = {} }; fljs.addMethods(fljs.player.ResourceManager, { addToFrame: function (a, b) { this.frames[b] || (this.frames[b] = {}); this.frames[b][a] = true; this.res[a] = b }, remove: function (a) { if (this.listeners[a]) for (var b in this.listeners[a]) this.listeners[a][b](a); b = this.res[a]; delete this.listeners[a]; delete this.frames[b][a]; delete this.res[a] }, addStream: function (a) { this.streams[a.id] = a }, frameReady: function (a) { for (var b = 0; b <= a; b++) { var c = this.frames[a]; if (c) for (var d in c) return false } for (b in this.streams) if (!this.streams[b].frameReady(a)) return false; return true }, listen: function (a, b) { var c = this.listeners[a]; c || (c = this.listeners[a] = []); c.push(b) }, waiting: function (a) { return a in this.res }, newId: function () { return fljs.player.ResourceManager.id++ } }); fljs.player.ResourceManager.id = 1; fljs.player.ExtAudioStream = function (a, b, c) { this.id = b.resources.newId(); b.resources.addStream(this); b = this.audio = a.allocAudio(); b.addEventListener("canplaythrough", fljs.bind(this.onAudioLoad, this), true); b.setAttribute("src", c); b.load(); this.frames = {}; this.playing = false; this.audioStreamReader = new fljs.swf.AudioStreamReader(a, this); this.duration = 0; this.maxFrame = -1 }; fljs.addMethods(fljs.player.ExtAudioStream, { pingLoad: function () {}, frameReady: function (a) { if (this.maxFrame < a) return false; if (typeof this.frames[a] != "undefined") return true; else { for (a = a; a > 0 && typeof this.frames[a] == "undefined";) a--; return a == 0 ? true : this.frameReady(a) } }, frameShouldPlay: function (a) { for (a = a; a > 0;) { if (a in this.frames) return !!this.frames[a]; a-- } return false }, setFrameDuration: function (a, b) { this.frames[a] = b }, onAudioLoad: function () { fljs.console("audio").info("onAudioLoad: " + this.audio.readyState + ", " + this.audio.duration); if (!this.started && this.playing) { this.audio.currentTime = this.frames[this.frame]; this.audio.play() } this.started = true }, playFrame: function (a) { fljs.console("audio").info("playFrame:" + this.audio.readyState); if (this.audio.readyState >= 2) { this.frame = a; this.audio.currentTime = this.frames[a]; this.audio.play(); this.started = true } this.playing = true }, pause: function () { this.audio.pause(); this.playing = false }, controlsFrame: function () {}, currentTime: function () { return this.audio.currentTime * 1E3 }, setSync: function (a) { this.sync = a }, shouldBuffer: function () { var a = fljs.now() - this.lastBufferAt; return !this.lastBufferAt || a > fljs.swf.SwfStreamingSoundReader.rebufferDuration }, buffer: function () { var a = this.audioStreamReader; a.hasMore() && a.read(fljs.swf.SwfStreamingSoundReader.bufferBlocks); this.lastBufferAt = fljs.now() }, onSoundStreamBlockTag: function (a, b, c) { this.maxFrame = c; b = a.duration(); a = this.duration + b * (a.Mp3SoundData.SeekSamples / a.SampleCount); this.frames[c] = a / 1E3; this.duration += b; this.sync.setFrameTime(c, a) }, onShowFrameTag: function () {} }); fljs.player.SwfAudioStream = function (a, b) { this.id = b.resources.newId(); b.resources.addStream(this); this.player = a; this.target = b; this.soundStream = new fljs.swf.SwfStreamingSoundReader(a.parser.reader.stream.stream.buffer, b); this.playing = false }; fljs.addMethods(fljs.player.SwfAudioStream, { pingLoad: function () {}, frameReady: function (a) { if (typeof this.soundStream.swfFrames[a] != "undefined") return this.soundStream.duration >= this.soundStream.swfFrames[a]; else { for (a = a; a > 0 && typeof this.soundStream.swfFrames[a] == "undefined";) a--; return a == 0 ? true : this.frameReady(a) } }, frameShouldPlay: function (a) { for (a = a; a > 0;) { if (a in this.soundStream.swfFrames) return true; a-- } return false }, setFrameDuration: function () {}, playFrame: function (a) { this.soundStream.play(a); this.playing = true }, pause: function () { this.soundStream.stop(); this.playing = false }, controlsFrame: function (a) { return this.soundStream.controlFrame(a) }, timeDiff: function (a) { return this.soundStream.timeDiff(a) }, currentTime: function () { return this.soundStream.currentTime() }, setSync: function (a) { this.soundStream.sync = a }, shouldBuffer: function () { var a = fljs.now() - this.soundStream.lastBufferAt; return !this.soundStream.lastBufferAt || a > fljs.swf.SwfStreamingSoundReader.rebufferDuration }, buffer: function () { this.soundStream.buffer() } }); flash.display.MovieClip = function () { flash.display.Sprite.call(this); var a = new flash.display.Scene; a.labels = []; a.name = "Scene 1"; a.numFrames = 1; this.frameData_ = [{ scripts: [], parts: [], tags: [], label: "", repeat: false}]; this.labels_ = {}; this.sceneIndices_ = {}; this.currentSceneIndex_ = 0; this.scenes_ = [a]; this.currentFrameIndex_ = 0; this.currentLabel_ = null; this._enabled = false; this.totalFrames_ = this.framesLoaded_ = 1; this.next_ = null; this.playing_ = true; this.audio = []; fljs.Player.getInstance(); this.id = flash.display.MovieClip.id++; this.element_.getElement().setAttribute("id", "mc" + this.id); this.__buttonStateDown = this.__buttonStateOver = this.firstFrame = false; this.resources = new fljs.player.ResourceManager }; fljs.inherits(flash.display.MovieClip, flash.display.Sprite); fljs.addMethods(flash.display.MovieClip, { gotoAndPlay: function (a, b) { this.gotoAnd_(a, b, true) }, gotoAndStop: function (a, b) { this.gotoAnd_(a, b, false) }, gotoAnd_: function (a, b, c) { var d, e; if (typeof a.valueOf() == "string") if (d = this.labels_[a]) { d = d.frame - 1; e = 0 } else return; else if (!b) { d = a - 1; if (d == -1) d = 0; a = this.globalFrameIndexToLocal_(d); d = a[0]; e = a[1] } this.next_ = { frameIndex: d, sceneIndex: e, play: c }; this.next_.clear = d != this.currentFrameIndex_ + 1 }, globalFrameIndexToLocal_: function (a) { for (var b = 0; a >= this.scenes_[b].numFrames;) { a -= this.scenes_[b].numFrames; b += 1 } return [a, b] }, nextFrame: function () { var a = this.currentFrameIndex_ + 1, b = this.currentSceneIndex_; if (a == this.scenes_[this.currentSceneIndex_].numFrames) if (this.totalFrames_ > 1) { a = 0; b += 1; if (b == this.scenes_.length) b = 0 } else { this.next_ = null; return } this.next_ = { frameIndex: a, sceneIndex: b, play: this.next_ ? this.next_.play : this.playing_ } }, nextScene: function () { var a = this.currentSceneIndex_ + 1; if (a == this.scenes_.length) a = 0; this.next_ = { frameIndex: 0, sceneIndex: a, play: true } }, play: function () { this.next_ = this.next_ ? { frameIndex: this.next_.frameIndex, sceneIndex: this.next_.sceneIndex, play: true, clear: this.next_.clear } : { frameIndex: this.currentFrameIndex_, sceneIndex: this.currentSceneIndex_, play: true } }, prevFrame: function () { var a = this.currentFrameIndex_ - 1, b = this.currentSceneIndex_; if (a == -1) { b -= 1; if (b == -1) b = this.scenes_.length - 1; a = this.scenes_[b].numFrames - 1 } this.next_ = { frameIndex: a, sceneIndex: b, play: this.next_ ? this.next_.play : this.playing_ } }, prevScene: function () { var a = this.currentSceneIndex_ - 1; if (a == -1) a = this.scenes_.length - 1; frameIndex = this.scenes_[a].numFrames - 1; this.next_ = { frameIndex: frameIndex, sceneIndex: a, play: true } }, stop: function () { var a; if (this.next_) a = this.next_.clear; this.next_ = { frameIndex: this.currentFrameIndex_, sceneIndex: this.currentSceneIndex_, play: false, stop: true, clear: a } }, clear: function () { for (var a in this.displayList_) this.removeChildAt(a) }, onNewFrame: function () { if (this.getStage()) if (this.frameReady(this.currentFrameIndex_)) { this.pendingFrame = false; var a = this.frameData_[this.currentFrameIndex_]; if (a.label) this.currentLabel_ = a.label; for (var b = 0; b < a.tags.length; b++) { var c = a.tags[b]; c[0] && c[0].evaluate(fljs.Player.getInstance(), null, null, this) } if (a.parts) for (b in a.parts) this.addChildAt(a.parts[b], b) } else this.pendingFrame = true }, onEnterFrame: function () { var a = false; if (a = this.pendingFrame ? true : this.pickNextFrame()) { this.onNewFrame(); if (this.pendingFrame) return }(a = this._as2Object) && a._onEnterFrame && fljs.Player.getInstance().interpreter.callback(a, a._onEnterFrame) }, onCreate: function () { this.next_ = { frameIndex: 0, sceneIndex: 0, play: !this._enabled && this.totalFrames_ > 1 }; this.setCurrentFrame(); this.onNewFrame() }, setCurrentFrame: function () { this.updateSoundStream(); this.currentFrameIndex_ = this.next_.frameIndex; this.currentSceneIndex_ = this.next_.sceneIndex; this.playing_ = this.next_.play; this.next_ = null }, pickNextFrame: function () { if (this.playing_) if (!this.next_) { var a = this.currentFrameIndex_ + 1, b = this.currentSceneIndex_; if (a == this.scenes_[this.currentSceneIndex_].numFrames) if (a == this.totalFrames_) if (this.totalFrames_ > 1) { this.clear(); this.next_ = { frameIndex: 0, sceneIndex: 0, play: true } } else { this.playing_ = false; this.next_ = null } else this.next_ = { frameIndex: a, sceneIndex: b + 1, play: true }; else this.next_ = { frameIndex: a, sceneIndex: b, play: this.playing_ } } if (this.next_) if (this._enabled) this.next_.play = false; a = this.next_ && !this.next_.stop && this.next_.frameIndex != this.currentFrameIndex_; if (this.next_) { a && this.next_.clear && this.removeChildren(); this.setCurrentFrame(); this.next_ = null } return a }, onEnterFrame_: function (a) { fljs.console("mc").info("mc#" + this.id + " frame#" + this.currentFrameIndex_); this.onEnterFrame(a) }, updateSoundStream: function () { if (this.audioStream) if (this.next_) if (this.next_.play != this.playing_) if (this.next_.playing) this.audioStream.frameShouldPlay(this.next_.frameIndex) && this.audioStream.playFrame(this.next_.frameIndex); else this.audioStream.pause(); else this.next_.play && this.next_.frameIndex != this.currentFrameIndex_ + 1 && this.audioStream.frameShouldPlay(this.next_.frameIndex) && this.audioStream.playFrame(this.next_.frameIndex); else this.audioStream.pause() }, addFrameScript: function () { for (var a, b, c = 0; c < arguments.length; c += 2) { a = arguments[c]; b = this.globalFrameIndexToLocal_(a); a = b[0]; b = b[1]; this.scenes_[b].frameData_[a].scripts.push(arguments[c + 1]) } }, updateButtonState: function (a) { if (this._enabled) { var b = flash.events.MouseEvent, c = flash.events.KeyboardEvent, d, e; switch (a.type) { case b.CLICK: e = d = true; break; case b.MOUSE_OVER: d = true; e = this.__buttonStateDown; break; case b.MOUSE_OUT: d = false; e = this.__buttonStateDown; break; case b.MOUSE_DOWN: d = this.__buttonStateOver; e = true; break; case b.MOUSE_UP: d = this.__buttonStateOver; e = false; break; case c.KEY_DOWN: d = this.__buttonStateOver; e = true; break; case c.KEY_UP: d = this.__buttonStateOver; e = false; break } var f; if (this.__buttonStateOver != d) f = d ? e ? this.__buttonStateDown ? "CondOutDownToOverDown" : "CondIdleToOverDown" : "CondIdleToOverUp" : e ? "CondOverDownToOutDown" : "CondOverUpToIdle"; else if (this.__buttonStateDown != e) if (e) { if (d) f = "CondOverUpToOverDown" } else f = d ? "CondOverDownToOverUp" : "CondOutDownToIdle"; a = d ? e ? "down" : "over" : "up"; this.__buttonStateOver = d; this.__buttonStateDown = e; this.gotoAndStop("_" + a); if (f) for (var g in this.__buttonActions) { d = this.__buttonActions[g]; d[f] && fljs.Player.getInstance().doActions(this, d.Actions) } } }, needAudio: function () { for (var a = fljs.Player.getInstance(), b = 0; b < 2; b++) this.audio[b] = a.allocAudio() }, frameReady: function (a) { return this.frameData_[a] && this.frameData_[a].loaded && this.resources.frameReady(a) }, getEnabled: function () { return this._enabled }, setEnabled: function (a) { this._enabled = !! a } }); flash.display.MovieClip.id = 1; fljs.swf.tag.DefineSprite = function () {}; fljs.addMethods(fljs.swf.tag.DefineSprite, { read: function (a) { this.defId = this.SpriteId = a.readUI16(); this.FrameCount = a.readUI16(); this.frameData_ = [{ tags: []}]; this.labels_ = {}; this.framesLoaded_ = 0; this.totalFrames_ = this.FrameCount }, evaluate: function (a) { a.addDefinition(this, this.SpriteId) }, build: function (a, b) { a = new flash.display.MovieClip; a.def = this; b && a.getTransform().setColorTransform(b); b = new flash.display.Scene; b.labels = []; b.name = "Scene 1"; b.numFrames = this.FrameCount; a.frameData_ = []; for (var c = 0; c < this.FrameCount; c++) { var d = { scripts: [], parts: [], tags: [], label: "" }; d.tags = this.frameData_[c].tags; d.loaded = this.frameData_[c].loaded; a.frameData_.push(d) } a.labels_ = this.labels_; a.sceneIndices_ = {}; a.currentSceneIndex_ = 0; a.scenes_ = [b]; a.currentFrameIndex_ = 0; a.currentLabel_ = null; a._enabled = false; a.framesLoaded_ = this.FrameCount; a.totalFrames_ = this.FrameCount; a.next_ = null; a.playing_ = true; return a } }); fljs.swf.tag.DefineSound = function () {}; fljs.addMethods(fljs.swf.tag.DefineSound, { read: function (a, b) { this.SoundId = a.readUI16(); this.SoundFormat = a.readUB(4); this.SoundRate = a.readUB(2); this.SoundSize = a.readUB(1); this.SoundType = a.readUB(1); this.SoundSampleCount = a.readUI32(); this.Mp3SoundData = this.SoundData = a.readMp3SoundData(b.TagLength - 2 - 1 - 4) }, evaluate: function (a) { a.sounds[this.SoundId] = this } }); fljs.swf.tag.StartSound = function () {}; fljs.addMethods(fljs.swf.tag.StartSound, { read: function (a) { this.SoundId = a.readUI16(); this.SoundInfo = a.readSoundInfo() }, evaluate: function (a, b) { var c = a.sounds[this.SoundId]; if (!c.player) { c.player = a.allocAudio(); b = new fljs.swf.StringStream(a.reader.stream.stream.buffer); b.byteIndex = c.Mp3SoundData.byteIndex; b = b.readBytes(c.Mp3SoundData.byteCount).join(""); b = "data:audio/mpeg;base64," + btoa(b); c.player.setAttribute("src", b) } var d = c.player; if (this.SoundInfo.SyncStop) { d.fljsPlaying = false; d.pause() } else if (this.SoundInfo.SyncNoMultiple) { d.fljsPlaying = true; a.playing && d.play() } else { d.addEventListener("load", function () { d.currentTime = 0; d.fljsPlaying = true; a.playing && d.play() }, true); d.load() } } }); fljs.swf.tag.DefineShape2 = function () {}; fljs.inherits(fljs.swf.tag.DefineShape2, fljs.swf.tag.DefineShape); fljs.addMethods(fljs.swf.tag.DefineShape2, { read: function (a, b) { a.beginContext(fljs.swf.tag.DefineShape2); a.endByteIndex = a.stream.byteIndex + b.TagLength; this.ShapeId = a.readUI16(); this.ShapeBounds = a.readRECT(); a.stream.align(); this.Shapes = a.readSHAPEWITHSTYLE(); a.endContext() } }); fljs.swf.tag.SoundStreamHead2 = function () {}; fljs.inherits(fljs.swf.tag.SoundStreamHead2, fljs.swf.tag.SoundStreamHead); fljs.swf.tag.DefineFontInfo = function () {}; fljs.addMethods(fljs.swf.tag.DefineFontInfo, { read: function (a) { this.FontId = a.readUI16(); this.FontNameLen = a.readUI8(); var b = []; for (i = 0; i < this.FontNameLen; i++) b.push(String.fromCharCode(a.readUI8())); this.FontName = b.join(""); a.readUB(2); this.FontFlagsSmallText = a.readUB(1); this.FontFlagsShiftJis = a.readUB(1); this.FontFlagsAnsi = a.readUB(1); this.FontFlagsItalic = a.readUB(1); this.FontFlagsBold = a.readUB(1); this.FontFlagsWideCodes = a.readUB(1); b = fljs.Player.getInstance().fontsWithoutInfo[this.FontId]; this.CodeTable = []; if (this.FontFlagsWideCodes) for (i = 0; i < b.NumGlyphs; i++) this.CodeTable.push(a.readUI16()); else for (i = 0; i < this.NumGlyphs; i++) this.CodeTable.push(a.readUI8()); this.GlyphShapeTable = b.GlyphShapeTable }, evaluate: function (a) { var b = (new fljs.swf.build.FontBuilder(this, a)).buildDef(); a.defineFont2(this.FontId, this.GlyphShapeTable.length, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable) } }); fljs.swf.tag.DefineText = function () {}; fljs.addMethods(fljs.swf.tag.DefineText, { read: function (a) { this.CharacterId = a.readUI16(); this.TextBounds = a.readRECT(); a.stream.align(); this.TextMatrix = a.readMATRIX(); this.GlyphBits = a.readUI8(); this.AdvanceBits = a.readUI8(); a.GlyphBits = this.GlyphBits; a.AdvanceBits = this.AdvanceBits; a.context = fljs.swf.tag.DefineText; this.TextRecords = a.readTEXTRECORDS(); a.context = null }, buildMatrix_: function () { return new flash.geom.Matrix(this.TextMatrix.ScaleX, this.TextMatrix.RotateSkew0, this.TextMatrix.RotateSkew1, this.TextMatrix.ScaleY, this.TextMatrix.TranslateX, this.TextMatrix.TranslateY) }, evaluate: function (a) { a.addDefinition(this, this.CharacterId) }, build: function (a, b) { return this._buildTextField(a, b) }, _buildTextField: function (a, b) { if (!this.TextRecords || !this.TextRecords.length) return null; this.FontId = this.TextRecords[0].FontId; this.Bounds = this.TextBounds; var c = a.fonts2[this.FontId]; a = []; var d; fljs.console("definetext"); var e, f, g = 0, j; for (var h in this.TextRecords) { var m = this.TextRecords[h]; d = new flash.text.TextFormat; if (c) { d.bold = c.bold; d.italic = c.italic; d.font = c.name; d.fontid = this.FontId } if (m.TextColor) { var k = m.TextColor; e = 0; e += k.Red << 16; e += k.Green << 8; e += k.Blue; if (typeof m.TextColor.Alpha != "undefined") d.alpha = m.TextColor.Alpha / 255 } d.color = e; if (m.YOffset != null) { f = m.YOffset; g = 0 }; d.leading = f; if (m.XOffset != null) g = m.XOffset; d.indent = g; if (m.TextHeight != null) j = m.TextHeight; d.size = j; m = m.GlyphEntries; k = []; var l = []; if (m) for (var n in m) { var p = m[n]; c ? k.push(String.fromCharCode(c.codeTable[p.GlyphIndex])) : k.push(String.fromCharCode(p.GlyphIndex)); l.push(p.GlyphAdvance); g += p.GlyphAdvance } a.push({ text: k.join(""), advances: l, format: d }) } this.Indent = this.RightMargin = this.LeftMargin = this.Leading = this.Align = 0; this.FontHeight = this.TextRecords[0].TextHeight; this.TextColor = this.TextRecords[0].TextColor; e = new flash.text.TextField; e.setTextMatrix(this.buildMatrix_()); b && e.getTransform().setColorTransform(b); e.x = this.Bounds.Xmin; e.y = this.Bounds.Ymin; e.setWidth(this.Bounds.Xmax - this.Bounds.Xmin); e.setHeight(this.Bounds.Ymax - this.Bounds.Ymin); e.setDefaultTextFormat(d); e.__setSpans(a); return e } }); fljs.swf.tag.DefineFontInfo2 = function () {}; fljs.addMethods(fljs.swf.tag.DefineFontInfo2, { read: function (a, b) { var c = a.stream.byteIndex; this.FontId = a.readUI16(); this.FontNameLen = a.readUI8(); var d = []; for (i = 0; i < this.FontNameLen; i++) d.push(String.fromCharCode(a.readUI8())); this.FontName = d.join(""); a.readUB(2); this.FontFlagsSmallText = a.readUB(1); this.FontFlagsShiftJis = a.readUB(1); this.FontFlagsAnsi = a.readUB(1); this.FontFlagsItalic = a.readUB(1); this.FontFlagsBold = a.readUB(1); this.FontFlagsWideCodes = a.readUB(1); this.LanguageCode = a.readLangCode(); b = b.TagLength - (a.stream.byteIndex - c); this.CodeTable = []; if (this.FontFlagsWideCodes) { b = b / 2; for (i = 0; i < b; i++) this.CodeTable.push(a.readUI16()) } else { b = b; for (i = 0; i < b; i++) this.CodeTable.push(a.readUI8()) } }, evaluate: function (a) { this.GlyphShapeTable = a.fontsWithoutInfo[this.FontId].GlyphShapeTable; var b = (new fljs.swf.build.FontBuilder(this, a)).buildDef(); a.defineFont2(this.FontId, this.GlyphShapeTable.length, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable) } }); fljs.swf.tag.DefineShape3 = function () {}; fljs.inherits(fljs.swf.tag.DefineShape3, fljs.swf.tag.DefineShape); fljs.addMethods(fljs.swf.tag.DefineShape3, { read: function (a) { a.beginContext(fljs.swf.tag.DefineShape3); this.ShapeId = a.readUI16(); this.ShapeBounds = a.readRECT(); a.stream.align(); this.Shapes = a.readSHAPEWITHSTYLE(); a.endContext() } }); fljs.swf.tag.DoAction = function () {}; fljs.addMethods(fljs.swf.tag.DoAction, { read: function (a, b) { this.Actions = a.readActionRecords(b.TagLength) }, evaluate: function (a, b, c, d) { a.doActions(d, this.Actions) } }); fljs.swf.tag.Protect = function () {}; fljs.addMethods(fljs.swf.tag.Protect, { read: function (a, b) { a.skipBytes(b.TagLength) }, evaluate: function () {} }); flash.display.FrameLabel = function () {}; fljs.swf.tag.DefineButton2 = function () {}; fljs.addMethods(fljs.swf.tag.DefineButton2, { read: function (a, b) { var c = a.stream.byteIndex; a.context = fljs.swf.tag.DefineButton2; this.ButtonId = a.readUI16(); a.readUB(7); this.TrackAsMenu = a.readUB(1); this.ActionOffset = a.readUI16(); this.Characters = a.readButtonRecords(); this.Actions = this.ActionOffset ? a.readButtonCondActions(b.TagLength - (a.stream.byteIndex - c)) : []; a.context = null }, evaluate: function (a) { a.addDefinition(this, this.ButtonId) }, build: function (a, b) { if (b && b.__default) b = null; var c = new flash.display.MovieClip; c.def = this; c.setEnabled(true); c.trackAsMenu = this.TrackAsMenu; c.__buttonActions = this.Actions; var d = [["ButtonStateUp", "up"], ["ButtonStateDown", "down"], ["ButtonStateOver", "over"], ["ButtonStateHitTest", "hitTest"]], e = new flash.display.Scene; e.labels = []; e.name = "Scene 1"; e.numFrames = 3; c.frameData_ = []; c.labels_ = {}; var f, g = 0; for (var j in d) { var h = d[j][0], m = d[j][1]; f = null; for (var k in this.Characters) { var l = this.Characters[k]; if (l[h]) { f || (f = new flash.display.Sprite); var n = this.buildStateDisplayObject(a, l, false); n && f.addChildAt(n, l.PlaceDepth) } } for (k in this.Characters) { l = this.Characters[k]; if (l.ButtonStateHitTest) { f || (f = new flash.display.Sprite); if (n = this.buildStateDisplayObject(a, l, true)) { n.__setHitTarget(c); f.addChild(n) } } } if (m != "hitTest") { h = new flash.display.FrameLabel; h.name = "_" + m; h.frame = g + 1; m = { scripts: [], parts: [], tags: [], label: h.name, loaded: true }; f && m.parts.push(f); c.frameData_.push(m); c.labels_[h.name] = h } g += 1 } c.sceneIndices_ = {}; c.currentSceneIndex_ = 0; c.scenes_ = [e]; c.currentFrameIndex_ = 0; c.currentLabel_ = c.frameData_[c.currentFrameIndex_].label; c._enabled = true; c.framesLoaded_ = 3; c.totalFrames_ = 3; c.next_ = null; c.playing_ = false; c.gotoAndStop(1); b && c.getTransform().setColorTransform(b); return c }, buildStateDisplayObject: function (a, b, c) { var d = this.buildColorTransform(b.ColorTransform), e = this.buildMatrix(b.PlaceMatrix); c = (fljs.agent.OS == "iPad" || fljs.agent.OS == "iPhone") && c; b = a.dictionary[b.CharacterId]; var f; if (b instanceof fljs.swf.tag.DefineShape || b instanceof fljs.swf.tag.DefineEditText || b instanceof fljs.swf.tag.DefineText || b instanceof fljs.swf.tag.DefineSprite) f = b.build(a, d, c); if (f) { f.setMatrix(e); f.__clipActions = {}; b instanceof fljs.swf.tag.DefineSprite && f.onCreate() } return f }, buildMatrix: function (a) { return new flash.geom.Matrix(a.ScaleX, a.RotateSkew0, a.RotateSkew1, a.ScaleY, a.TranslateX, a.TranslateY) }, buildColorTransform: function (a) { a = new flash.geom.ColorTransform(a.RedMultTerm, a.GreenMultTerm, a.BlueMultTerm, a.AlphaMultTerm, a.RedAddTerm, a.GreenAddTerm, a.BlueAddTerm, a.AlphaAddTerm); return a.__default ? null : a } }); fljs.swf.tag.DefineText2 = function () {}; fljs.inherits(fljs.swf.tag.DefineText2, fljs.swf.tag.DefineText); fljs.addMethods(fljs.swf.tag.DefineText2, { read: function (a) { this.CharacterId = a.readUI16(); this.TextBounds = a.readRECT(); a.stream.align(); this.TextMatrix = a.readMATRIX(); this.GlyphBits = a.readUI8(); this.AdvanceBits = a.readUI8(); a.GlyphBits = this.GlyphBits; a.AdvanceBits = this.AdvanceBits; a.context = fljs.swf.tag.DefineText2; this.TextRecords = a.readTEXTRECORDS(); a.context = null } }); fljs.swf.tag.JpegTables = function () {}; fljs.addMethods(fljs.swf.tag.JpegTables, { read: function (a, b) { if (b.TagLength != 0) { a = a.readBytes(b.TagLength).join(""); var c = new fljs.swf.BigEndianStringStream(a); fljs.console("jpeg").info("" + b.TagType); b = 0; if (c.nextUShort() == 65497) { b = 4; c.nextUShort(); c.nextUShort() } this.JPEGData = a.substr(b, a.length - b - 2) } }, evaluate: function (a) { a.jpegTables = this.JPEGData } }); fljs.swf.tag.DefineBits = function () {}; fljs.inherits(fljs.swf.tag.DefineBits, fljs.swf.tag.DefineBitsJPEG2); fljs.addMethods(fljs.swf.tag.DefineBits, { read: function (a, b) { this.CharacterId = a.readUI16(); b = b.TagLength - 2; (new fljs.swf.build.JpegBuilder).parseJpeg(this, a, b, true) } }); fljs.swf.tag.FrameLabel = function () {}; fljs.addMethods(fljs.swf.tag.FrameLabel, { read: function (a) { this.Name = a.readString() }, evaluate: function (a, b, c, d) { if (d == a.stage) d = a.mainTimeline; d.frameData_[d.framesLoaded_].label = this.Name; a = d.labels_[this.Name] = new flash.display.FrameLabel; a.frame = d.framesLoaded_ + 1; a.name = this.Name } }); fljs.zip_inflate = {}; var zip_WSIZE = 32768, zip_STORED_BLOCK = 0, zip_STATIC_TREES = 1, zip_DYN_TREES = 2, zip_lbits = 9, zip_dbits = 6, zip_INBUFSIZ = 32768, zip_INBUF_EXTRA = 64, zip_slide, zip_wp, zip_fixed_tl = null, zip_fixed_td, zip_fixed_bl, fixed_bd, zip_bit_buf, zip_bit_len, zip_method, zip_eof, zip_copy_leng, zip_copy_dist, zip_tl, zip_td, zip_bl, zip_bd, zip_inflate_data, zip_inflate_pos, zip_MASK_BITS = new Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535), zip_cplens = new Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0), zip_cplext = new Array(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99), zip_cpdist = new Array(1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577), zip_cpdext = new Array(0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13), zip_border = new Array(16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); function zip_HuftList() { this.list = this.next = null } function zip_HuftNode() { this.n = this.b = this.e = 0; this.t = null } function zip_HuftBuild(a, b, c, d, e, f) { this.BMAX = 16; this.N_MAX = 288; this.status = 0; this.root = null; this.m = 0; var g = new Array(this.BMAX + 1), j, h, m, k, l, n, p, u = new Array(this.BMAX + 1), o, q, s, r = new zip_HuftNode, t = new Array(this.BMAX); k = new Array(this.N_MAX); var v, w = new Array(this.BMAX + 1), y, x, z; z = this.root = null; for (l = 0; l < g.length; l++) g[l] = 0; for (l = 0; l < u.length; l++) u[l] = 0; for (l = 0; l < t.length; l++) t[l] = null; for (l = 0; l < k.length; l++) k[l] = 0; for (l = 0; l < w.length; l++) w[l] = 0; j = b > 256 ? a[256] : this.BMAX; o = a; q = 0; l = b; do { g[o[q]]++; q++ } while (--l > 0); if (g[0] == b) { this.root = null; this.status = this.m = 0 } else { for (n = 1; n <= this.BMAX; n++) if (g[n] != 0) break; p = n; if (f < n) f = n; for (l = this.BMAX; l != 0; l--) if (g[l] != 0) break; m = l; if (f > l) f = l; for (y = 1 << n; n < l; n++, y <<= 1) if ((y -= g[n]) < 0) { this.status = 2; this.m = f; return } if ((y -= g[l]) < 0) { this.status = 2; this.m = f } else { g[l] += y; w[1] = n = 0; o = g; q = 1; for (s = 2; --l > 0;) w[s++] = n += o[q++]; o = a; l = q = 0; do if ((n = o[q++]) != 0) k[w[n]++] = l; while (++l < b); b = w[m]; w[0] = l = 0; o = k; q = 0; k = -1; v = u[0] = 0; s = null; for (x = 0; p <= m; p++) for (a = g[p]; a-- > 0;) { for (; p > v + u[1 + k];) { v += u[1 + k]; k++; x = (x = m - v) > f ? f : x; if ((h = 1 << (n = p - v)) > a + 1) { h -= a + 1; for (s = p; ++n < x;) { if ((h <<= 1) <= g[++s]) break; h -= g[s] } } if (v + n > j && v < j) n = j - v; x = 1 << n; u[1 + k] = n; s = new Array(x); for (h = 0; h < x; h++) s[h] = new zip_HuftNode; z = z == null ? (this.root = new zip_HuftList) : (z.next = new zip_HuftList); z.next = null; z.list = s; t[k] = s; if (k > 0) { w[k] = l; r.b = u[k]; r.e = 16 + n; r.t = s; n = (l & (1 << v) - 1) >> v - u[k]; t[k - 1][n].e = r.e; t[k - 1][n].b = r.b; t[k - 1][n].n = r.n; t[k - 1][n].t = r.t } } r.b = p - v; if (q >= b) r.e = 99; else if (o[q] < c) { r.e = o[q] < 256 ? 16 : 15; r.n = o[q++] } else { r.e = e[o[q] - c]; r.n = d[o[q++] - c] } h = 1 << p - v; for (n = l >> v; n < x; n += h) { s[n].e = r.e; s[n].b = r.b; s[n].n = r.n; s[n].t = r.t } for (n = 1 << p - 1; (l & n) != 0; n >>= 1) l ^= n; for (l ^= n; (l & (1 << v) - 1) != w[k];) { v -= u[k]; k-- } } this.m = u[1]; this.status = y != 0 && m != 1 ? 1 : 0 } } } function zip_GET_BYTE() { if (zip_inflate_data.length == zip_inflate_pos) return -1; return zip_inflate_data.charCodeAt(zip_inflate_pos++) & 255 } function zip_NEEDBITS(a) { for (; zip_bit_len < a;) { zip_bit_buf |= zip_GET_BYTE() << zip_bit_len; zip_bit_len += 8 } } function zip_GETBITS(a) { return zip_bit_buf & zip_MASK_BITS[a] } function zip_DUMPBITS(a) { zip_bit_buf >>= a; zip_bit_len -= a } function zip_inflate_codes(a, b, c) { var d, e, f; if (c == 0) return 0; for (f = 0;;) { zip_NEEDBITS(zip_bl); e = zip_tl.list[zip_GETBITS(zip_bl)]; for (d = e.e; d > 16;) { if (d == 99) return -1; zip_DUMPBITS(e.b); d -= 16; zip_NEEDBITS(d); e = e.t[zip_GETBITS(d)]; d = e.e } zip_DUMPBITS(e.b); if (d == 16) { zip_wp &= zip_WSIZE - 1; a[b + f++] = zip_slide[zip_wp++] = e.n } else { if (d == 15) break; zip_NEEDBITS(d); zip_copy_leng = e.n + zip_GETBITS(d); zip_DUMPBITS(d); zip_NEEDBITS(zip_bd); e = zip_td.list[zip_GETBITS(zip_bd)]; for (d = e.e; d > 16;) { if (d == 99) return -1; zip_DUMPBITS(e.b); d -= 16; zip_NEEDBITS(d); e = e.t[zip_GETBITS(d)]; d = e.e } zip_DUMPBITS(e.b); zip_NEEDBITS(d); zip_copy_dist = zip_wp - e.n - zip_GETBITS(d); for (zip_DUMPBITS(d); zip_copy_leng > 0 && f < c;) { zip_copy_leng--; zip_copy_dist &= zip_WSIZE - 1; zip_wp &= zip_WSIZE - 1; a[b + f++] = zip_slide[zip_wp++] = zip_slide[zip_copy_dist++] } } if (f == c) return c } zip_method = -1; return f } function zip_inflate_stored(a, b, c) { var d; d = zip_bit_len & 7; zip_DUMPBITS(d); zip_NEEDBITS(16); d = zip_GETBITS(16); zip_DUMPBITS(16); zip_NEEDBITS(16); if (d != (~zip_bit_buf & 65535)) return -1; zip_DUMPBITS(16); zip_copy_leng = d; for (d = 0; zip_copy_leng > 0 && d < c;) { zip_copy_leng--; zip_wp &= zip_WSIZE - 1; zip_NEEDBITS(8); a[b + d++] = zip_slide[zip_wp++] = zip_GETBITS(8); zip_DUMPBITS(8) } if (zip_copy_leng == 0) zip_method = -1; return d } function zip_inflate_fixed(a, b, c) { if (zip_fixed_tl == null) { var d, e = new Array(288); for (d = 0; d < 144; d++) e[d] = 8; for (; d < 256; d++) e[d] = 9; for (; d < 280; d++) e[d] = 7; for (; d < 288; d++) e[d] = 8; zip_fixed_bl = 7; d = new zip_HuftBuild(e, 288, 257, zip_cplens, zip_cplext, zip_fixed_bl); if (d.status != 0) { alert("HufBuild error: " + d.status); return -1 } zip_fixed_tl = d.root; zip_fixed_bl = d.m; for (d = 0; d < 30; d++) e[d] = 5; zip_fixed_bd = 5; d = new zip_HuftBuild(e, 30, 0, zip_cpdist, zip_cpdext, zip_fixed_bd); if (d.status > 1) { zip_fixed_tl = null; alert("HufBuild error: " + d.status); return -1 } zip_fixed_td = d.root; zip_fixed_bd = d.m } zip_tl = zip_fixed_tl; zip_td = zip_fixed_td; zip_bl = zip_fixed_bl; zip_bd = zip_fixed_bd; return zip_inflate_codes(a, b, c) } function zip_inflate_dynamic(a, b, c) { var d, e, f, g, j, h, m, k = new Array(316); for (d = 0; d < k.length; d++) k[d] = 0; zip_NEEDBITS(5); h = 257 + zip_GETBITS(5); zip_DUMPBITS(5); zip_NEEDBITS(5); m = 1 + zip_GETBITS(5); zip_DUMPBITS(5); zip_NEEDBITS(4); d = 4 + zip_GETBITS(4); zip_DUMPBITS(4); if (h > 286 || m > 30) return -1; for (e = 0; e < d; e++) { zip_NEEDBITS(3); k[zip_border[e]] = zip_GETBITS(3); zip_DUMPBITS(3) } for (; e < 19; e++) k[zip_border[e]] = 0; zip_bl = 7; e = new zip_HuftBuild(k, 19, 19, null, null, zip_bl); if (e.status != 0) return -1; zip_tl = e.root; zip_bl = e.m; g = h + m; for (d = f = 0; d < g;) { zip_NEEDBITS(zip_bl); j = zip_tl.list[zip_GETBITS(zip_bl)]; e = j.b; zip_DUMPBITS(e); e = j.n; if (e < 16) k[d++] = f = e; else if (e == 16) { zip_NEEDBITS(2); e = 3 + zip_GETBITS(2); zip_DUMPBITS(2); if (d + e > g) return -1; for (; e-- > 0;) k[d++] = f } else { if (e == 17) { zip_NEEDBITS(3); e = 3 + zip_GETBITS(3); zip_DUMPBITS(3) } else { zip_NEEDBITS(7); e = 11 + zip_GETBITS(7); zip_DUMPBITS(7) } if (d + e > g) return -1; for (; e-- > 0;) k[d++] = 0; f = 0 } } zip_bl = zip_lbits; e = new zip_HuftBuild(k, h, 257, zip_cplens, zip_cplext, zip_bl); if (zip_bl == 0) e.status = 1; if (e.status != 0) return -1; zip_tl = e.root; zip_bl = e.m; for (d = 0; d < m; d++) k[d] = k[d + h]; zip_bd = zip_dbits; e = new zip_HuftBuild(k, m, 0, zip_cpdist, zip_cpdext, zip_bd); zip_td = e.root; zip_bd = e.m; if (zip_bd == 0 && h > 257) return -1; if (e.status != 0) return -1; return zip_inflate_codes(a, b, c) } function zip_inflate_start() { if (zip_slide == null) zip_slide = new Array(2 * zip_WSIZE); zip_bit_len = zip_bit_buf = zip_wp = 0; zip_method = -1; zip_eof = false; zip_copy_leng = zip_copy_dist = 0; zip_tl = null } function zip_inflate_internal(a, b, c) { var d, e; for (d = 0; d < c;) { if (zip_eof && zip_method == -1) return d; if (zip_copy_leng > 0) { if (zip_method != zip_STORED_BLOCK) for (; zip_copy_leng > 0 && d < c;) { zip_copy_leng--; zip_copy_dist &= zip_WSIZE - 1; zip_wp &= zip_WSIZE - 1; a[b + d++] = zip_slide[zip_wp++] = zip_slide[zip_copy_dist++] } else { for (; zip_copy_leng > 0 && d < c;) { zip_copy_leng--; zip_wp &= zip_WSIZE - 1; zip_NEEDBITS(8); a[b + d++] = zip_slide[zip_wp++] = zip_GETBITS(8); zip_DUMPBITS(8) } if (zip_copy_leng == 0) zip_method = -1 } if (d == c) return d } if (zip_method == -1) { if (zip_eof) break; zip_NEEDBITS(1); if (zip_GETBITS(1) != 0) zip_eof = true; zip_DUMPBITS(1); zip_NEEDBITS(2); zip_method = zip_GETBITS(2); zip_DUMPBITS(2); zip_tl = null; zip_copy_leng = 0 } switch (zip_method) { case 0: e = zip_inflate_stored(a, b + d, c - d); break; case 1: e = zip_tl != null ? zip_inflate_codes(a, b + d, c - d) : zip_inflate_fixed(a, b + d, c - d); break; case 2: e = zip_tl != null ? zip_inflate_codes(a, b + d, c - d) : zip_inflate_dynamic(a, b + d, c - d); break; default: e = -1; break } if (e == -1) { if (zip_eof) return 0; return -1 } d += e } return d } function zip_inflate(a) { var b, c, d; zip_inflate_start(); zip_inflate_data = a; zip_inflate_pos = 0; b = new Array(1024); for (a = ""; (c = zip_inflate_internal(b, 0, b.length)) > 0;) for (d = 0; d < c; d++) a += String.fromCharCode(b[d]); zip_inflate_data = null; return a } fljs.swf.tag.DefineBitsJpeg3 = function () {}; fljs.inherits(fljs.swf.tag.DefineBitsJpeg3, fljs.swf.tag.DefineBitsJPEG2); fljs.addMethods(fljs.swf.tag.DefineBitsJpeg3, { read: function (a, b) { var c = a.stream.byteIndex; this.CharacterId = a.readUI16(); var d = fljs.Player.getInstance(); d.mainTimeline && d.mainTimeline.resources.addToFrame(this.CharacterId, d.mainTimeline.framesLoaded_); if (d.loadExtResources) { a.skipBytes(b.TagLength - 2); d = "img/" + d.name + "-" + this.CharacterId + ".png"; fljs.console("image").info(d); c = new Image; c.addEventListener("load", fljs.bind(this.onLoadImage, this, a, b, c), false); fljs.Player.getInstance().delayFrame++; c.src = d } else { d = this.AlphaDataOffset = a.readUI32(); (new fljs.swf.build.JpegBuilder).parseJpeg(this, a, d, true); d = b.TagLength - (a.stream.byteIndex - c); c = a.stream.byteIndex; var e = new Image; e.width = this.Width; e.height = this.Height; e.addEventListener("load", fljs.bind(this.onLoadData, this, a, b, e, c, d)); fljs.Player.getInstance().delayFrame++; e.src = this.DataUri } }, onLoadData: function (a, b, c, d, e) { a = a.stream.buffer.substr(d + 2, e - 2); a = zip_inflate(a); a = new fljs.swf.SwfStream(new fljs.swf.StringStream(a)); b = document.createElement("canvas"); b.width = this.Width; b.height = this.Height; d = b.getContext("2d"); d.drawImage(c, 0, 0); c = d.getImageData(0, 0, this.Width, this.Height); e = c.data; for (var f = 0; f < this.Width * this.Height * 4;) { e[f + 3] = a.readUI8(); f += 4 } d.putImageData(c, 0, 0); this.DataUri = b.toDataURL(); c = fljs.Player.getInstance(); if (c.dictionary) { this.evaluate(c); c.delayFrame--; c.mainTimeline.resources.remove(this.CharacterId) } else this.callback(this); return true }, onLoadImage: function (a, b, c) { this.Width = c.width; this.Height = c.height; a = document.createElement("canvas"); a.width = this.Width; a.height = this.Height; a.getContext("2d").drawImage(c, 0, 0); this.DataUri = a.toDataURL(); c = fljs.Player.getInstance(); this.evaluate(c); c.setTimeout(fljs.bind(this.afterLoadImage, this)); return true }, afterLoadImage: function () { c = fljs.Player.getInstance(); c.delayFrame--; c.mainTimeline.resources.remove(this.CharacterId) }, evaluate: function (a) { this.defId = "image" + this.CharacterId; a.addDefinition(this, this.CharacterId); a = new fljs.swf.def.BitmapDef; a.setCharaId(this.defId); a.element.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.DataUri], [null, "x", 0], [null, "y", 0], [null, "width", this.Width], [null, "height", this.Height]]); a.define(); this.def = a } }); fljs.swf.tag.ExportAssets = function () {}; fljs.addMethods(fljs.swf.tag.ExportAssets, { read: function (a) { this.Count = a.readUI16(); this.Tags = []; this.Names = []; for (var b = 0; b < this.Count; b++) { this.Tags[b] = a.readUI16(); this.Names[b] = a.readString() } }, evaluate: function (a) { for (var b = 0; b < this.Tags.length; b++) a.assets[this.Names[b]] = this.Tags[b] } }); fljs.swf.tag.PlaceObject3 = function () {}; fljs.inherits(fljs.swf.tag.PlaceObject3, fljs.swf.tag.PlaceObject2); fljs.addMethods(fljs.swf.tag.PlaceObject3, { read: function (a) { this.startByteIndex = a.stream.byteIndex; this.PlaceFlagHasClipActions = a.readUB(1); this.PlaceFlagHasClipDepth = a.readUB(1); this.PlaceFlagHasName = a.readUB(1); this.PlaceFlagHasRatio = a.readUB(1); this.PlaceFlagHasColorTransform = a.readUB(1); this.PlaceFlagHasMatrix = a.readUB(1); this.PlaceFlagHasCharacter = a.readUB(1); this.PlaceFlagMove = a.readUB(1); a.readUB(3); this.PlaceFlagHasImage = a.readUB(1); this.PlaceFlagHasClassName = a.readUB(1); this.PlaceFlagHasCacheAsBitmap = a.readUB(1); this.PlaceFlagHasBlendMode = a.readUB(1); this.PlaceFlagHasFilterList = a.readUB(1); this.Depth = a.readUI16(); if (this.PlaceFlagHasClassName || this.PlaceFlagHasImage && this.PlaceFlagHasCharacter) this.ClassName = a.readString(); if (this.PlaceFlagHasCharacter) this.CharacterId = a.readUI16(); if (this.PlaceFlagHasMatrix) this.Matrix = a.readMATRIX(); if (this.PlaceFlagHasColorTransform) this.ColorTransform = a.readCXFORMWITHALPHA(); if (this.PlaceFlagHasRatio) this.Ratio = a.readUI16(); if (this.PlaceFlagHasName) this.Name = a.readSTRING(); if (this.PlaceFlagHasClipDepth) this.ClipDepth = a.readUI16(); if (this.PlaceFlagHasFilterList) this.SurfaceFilterList = a.readFilterList(); if (this.PlaceFlagHasBlendMode) this.BlendMode = a.readUI8(); if (this.PlaceFlagHasClipActions) this.ClipActions = a.readCLIPACTIONS() } }); fljs.swf.tag.DefineShape4 = function () {}; fljs.inherits(fljs.swf.tag.DefineShape4, fljs.swf.tag.DefineShape); fljs.addMethods(fljs.swf.tag.DefineShape4, { read: function (a) { a.beginContext(fljs.swf.tag.DefineShape4); this.ShapeId = a.readUI16(); this.ShapeBounds = a.readRECT(); this.EdgeBounds = a.readRECT(); a.readUB(6); this.UsesNonScalingStrokes = a.readUB(1); this.UsesScalingStrokes = a.readUB(1); this.Shapes = a.readSHAPEWITHSTYLE(); a.endContext() } }); fljs.swf.tag.DefineBitsLossless2 = function () {}; fljs.addMethods(fljs.swf.tag.DefineBitsLossless2, { read: function (a, b) { var c = a.stream.byteIndex; this.CharacterId = a.readUI16(); this.BitmapFormat = a.readUI8(); this.BitmapWidth = a.readUI16(); this.BitmapHeight = a.readUI16(); if (this.BitmapFormat == 3) this.BitmapColorTableSize = a.readUI8(); a = a.stream.buffer.substr(a.stream.byteIndex + 2, b.TagLength - (a.stream.byteIndex - c) - 2); a = zip_inflate(a); a = new fljs.swf.SwfStream(new fljs.swf.StringStream(a)); b = document.createElement("canvas"); b.width = this.BitmapWidth; b.height = this.BitmapHeight; c = b.getContext("2d"); var d = c.createImageData(this.BitmapWidth, this.BitmapHeight), e = d.data; if (this.BitmapFormat == 3) { this.ColorTableRgb = []; for (var f = 0; f < this.BitmapColorTableSize + 1; f++) this.ColorTableRgb[f] = a.readRGBA(); var g = Math.floor((this.BitmapWidth + 3) / 4) * 4; for (var j = f = 0; f < this.BitmapWidth * this.BitmapHeight * 4;) { var h = this.ColorTableRgb[a.readUI8()]; e[f++] = h.Red; e[f++] = h.Green; e[f++] = h.Blue; e[f++] = h.Alpha; j++; if (j == this.BitmapWidth) { a.skipBytes(g - this.BitmapWidth); j = 0 } } } else for (f = 0; f < this.BitmapWidth * this.BitmapHeight * 4;) { h = a.readARGB(); e[f++] = h.Red; e[f++] = h.Green; e[f++] = h.Blue; e[f++] = h.Alpha } c.putImageData(d, 0, 0); this.DataUri = b.toDataURL() }, evaluate: function (a) { a.addDefinition(this, this.CharacterId); this.Width = this.BitmapWidth; this.Height = this.BitmapHeight; this.defId = "image" + this.CharacterId; a = new fljs.swf.def.BitmapDef; a.setCharaId(this.defId); a.element.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.DataUri], [null, "x", 0], [null, "y", 0], [null, "width", this.Width], [null, "height", this.Height]]); a.define(); this.def = a } }); fljs.swf.tag.DefineBitsLossless = function () {}; fljs.addMethods(fljs.swf.tag.DefineBitsLossless, { read: function (a, b) { var c = a.stream.byteIndex; this.CharacterId = a.readUI16(); this.BitmapFormat = a.readUI8(); this.BitmapWidth = a.readUI16(); this.BitmapHeight = a.readUI16(); if (this.BitmapFormat == 3) this.BitmapColorTableSize = a.readUI8(); a = a.stream.buffer.substr(a.stream.byteIndex + 2, b.TagLength - (a.stream.byteIndex - c) - 2); a = zip_inflate(a); a = new fljs.swf.SwfStream(new fljs.swf.StringStream(a)); b = document.createElement("canvas"); b.width = this.BitmapWidth; b.height = this.BitmapHeight; c = b.getContext("2d"); var d = c.createImageData(this.BitmapWidth, this.BitmapHeight), e = d.data; if (this.BitmapFormat == 3) { this.ColorTableRgb = []; for (var f = 0; f < this.BitmapColorTableSize + 1; f++) this.ColorTableRgb[f] = a.readRGB(); var g = Math.floor((this.BitmapWidth + 3) / 4) * 4; for (var j = f = 0; f < this.BitmapWidth * this.BitmapHeight * 4;) { var h = this.ColorTableRgb[a.readUI8()]; e[f++] = h.Red; e[f++] = h.Green; e[f++] = h.Blue; e[f++] = 255; j++; if (j == this.BitmapWidth) { a.skipBytes(g - this.BitmapWidth); j = 0 } } } else if (this.BitmapFormat == 4) { g = Math.floor((this.BitmapWidth * 2 + 3) / 4) * 4; for (j = f = 0; f < this.BitmapWidth * this.BitmapHeight * 4;) { h = a.readPix15(); e[f++] = h.Red; e[f++] = h.Green; e[f++] = h.Blue; e[f++] = 255; j++; if (j == this.BitmapWidth) { a.skipBytes(g - this.BitmapWidth); j = 0 } } } else if (this.BitmapFormat == 5) for (f = 0; f < this.BitmapWidth * this.BitmapHeight * 4;) { h = a.readARGB(); e[f++] = h.Red; e[f++] = h.Green; e[f++] = h.Blue; e[f++] = 255 } c.putImageData(d, 0, 0); this.DataUri = b.toDataURL() }, evaluate: function (a) { a.addDefinition(this, this.CharacterId); this.Width = this.BitmapWidth; this.Height = this.BitmapHeight; this.defId = "image" + this.CharacterId; a = new fljs.swf.def.BitmapDef; a.setCharaId(this.defId); a.element.sets([[fljs.dom.Namespace.Xlink, "xlink:href", this.DataUri], [null, "x", 0], [null, "y", 0], [null, "width", this.Width], [null, "height", this.Height]]); a.define(); this.def = a } }); fljs.swf.tag.DefineFont3 = function () {}; fljs.addMethods(fljs.swf.tag.DefineFont3, { read: function (a) { var b; this.FontId = a.readUI16(); this.FontFlagsHasLayout = a.readUB(1); this.FontFlagsShiftJIS = a.readUB(1); this.FontFlagsSmallText = a.readUB(1); this.FontFlagsANSI = a.readUB(1); this.FontFlagsWideOffsets = a.readUB(1); this.FontFlagsWideCodes = a.readUB(1); a.FontFlagsWideCodes = this.FontFlagsWideCodes; this.FontFlagsItalic = a.readUB(1); this.FontFlagsBold = a.readUB(1); this.LanguageCode = a.readLangCode(); this.FontNameLen = a.readUI8(); var c = []; for (b = 0; b < this.FontNameLen; b++) c.push(String.fromCharCode(a.readUI8())); this.FontName = c.join(""); this.NumGlyphs = a.readUI16(); this.OffsetTable = []; if (this.FontFlagsWideOffsets) { for (b = 0; b < this.NumGlyphs; b++) this.OffsetTable.push(a.readUI32()); this.CodeTableOffset = a.readUI32() } else { for (b = 0; b < this.NumGlyphs; b++) this.OffsetTable.push(a.readUI16()); this.CodeTableOffset = a.readUI16() } this.GlyphShapeTable = []; for (b = 0; b < this.NumGlyphs; b++) this.GlyphShapeTable.push(a.readShape()); this.CodeTable = []; for (b = 0; b < this.NumGlyphs; b++) this.CodeTable.push(a.readUI16()); if (this.FontFlagsHasLayout) { this.FontAscent = a.readSI16(); this.FontDescent = a.readSI16(); this.FontLeading = a.readSI16(); this.FontAdvanceTable = []; for (b = 0; b < this.NumGlyphs; b++) this.FontAdvanceTable.push(a.readSI16()); this.FontBoundsTable = []; for (b = 0; b < this.NumGlyphs; b++) { this.FontBoundsTable.push(a.readRECT()); a.stream.align() } this.KerningCount = a.readUI16(); this.FontKerningTable = []; for (b = 0; b < this.KerningCount; b++) this.FontKerningTable.push(a.readKerningRecord()) } }, evaluate: function (a) { var b = (new fljs.swf.build.FontBuilder(this, a)).buildDef(); a.defineFont2(this.FontId, this.GlyphShapeTable.length, b, this.FontName, this.FontFlagsBold, this.FontFlagsItalic, this.CodeTable, this) } }); fljs.swf.tag.DoInitAction = function () {}; fljs.addMethods(fljs.swf.tag.DoInitAction, { read: function (a, b) { this.SpriteId = a.readUI16(); this.Actions = a.readActionRecords(b.TagLength - 2 - 1); this.ActionEndFlag = a.readUI8() }, evaluate: function (a) { if (!this.processed) { this.processed = true; a.doInitAction(this) } } }); fljs.swf.tag.tagMap = { 0: fljs.swf.tag.End, 1: fljs.swf.tag.ShowFrame, 2: fljs.swf.tag.DefineShape, 4: fljs.swf.tag.PlaceObject, 5: fljs.swf.tag.RemoveObject, 6: fljs.swf.tag.DefineBits, 8: fljs.swf.tag.JpegTables, 9: fljs.swf.tag.SetBackgroundColor, 10: fljs.swf.tag.DefineFont, 11: fljs.swf.tag.DefineText, 12: fljs.swf.tag.DoAction, 13: fljs.swf.tag.DefineFontInfo, 14: fljs.swf.tag.DefineSound, 15: fljs.swf.tag.StartSound, 18: fljs.swf.tag.SoundStreamHead, 19: fljs.swf.tag.SoundStreamBlock, 20: fljs.swf.tag.DefineBitsLossless, 21: fljs.swf.tag.DefineBitsJPEG2, 22: fljs.swf.tag.DefineShape2, 24: fljs.swf.tag.Protect, 26: fljs.swf.tag.PlaceObject2, 28: fljs.swf.tag.RemoveObject2, 32: fljs.swf.tag.DefineShape3, 33: fljs.swf.tag.DefineText2, 34: fljs.swf.tag.DefineButton2, 35: fljs.swf.tag.DefineBitsJpeg3, 36: fljs.swf.tag.DefineBitsLossless2, 37: fljs.swf.tag.DefineEditText, 39: fljs.swf.tag.DefineSprite, 43: fljs.swf.tag.FrameLabel, 45: fljs.swf.tag.SoundStreamHead2, 48: fljs.swf.tag.DefineFont2, 56: fljs.swf.tag.ExportAssets, 59: fljs.swf.tag.DoInitAction, 62: fljs.swf.tag.DefineFontInfo2, 70: fljs.swf.tag.PlaceObject3, 75: fljs.swf.tag.DefineFont3, 82: fljs.swf.tag.DoAbc, 83: fljs.swf.tag.DefineShape4 }; fljs.swf.SwfStream = function (a) { this.stream = a; this.twipsPerPixel = 20; this.logger = fljs.console("parse") }; fljs.addMethods(fljs.swf.SwfStream, { _mark: function (a, b) { this.debug && this.logger.info(a + ": " + b) }, hasMore: function () { return this.stream.hasMore() }, skipBytes: function (a) { this.stream.skipBytes(a) }, readBytes: function (a) { return this.stream.readBytes(a) }, readUI8: function () { return this.stream.nextUByte() }, readUI16: function () { var a = this.stream.nextUShort(); this._mark("readUI16", a); return a }, readUI32: function () { return this.stream.nextULong() }, readSI8: function () { return this.stream.nextSByte() }, readSI16: function () { return this.stream.nextSShort() }, readSI32: function () { return this.stream.nextSLong() }, readUB: function (a) { return this.stream.nextUBits(a) }, readSB: function (a) { return this.stream.nextSBits(a) }, readFB: function (a) { return this.stream.nextFBits(a) }, readFIXED: function () { return this.readFixed() }, readFixed: function () { return this.stream.nextFLong() }, readFIXED8: function () { return this.readFixed8() }, readFixed8: function () { return this.stream.nextFShort() }, readFLOAT16: function () { return this.stream.nextHalfFloat() }, readFLOAT: function () { return this.readFloat() }, readFloat: function () { return this.stream.nextSingleFloat() }, readFloats: function (a) { for (var b = [], c = 0; c < a; c++) b.push(this.readFloat()); return b }, readDOUBLE: function () { return this.stream.nextDoubleFloat() }, readDouble: function () { return this.stream.nextDoubleFloat() }, readEncodedU32: function () { return this.stream.nextEncodedULong() }, readString: function () { return this.stream.nextString() }, readSTRING: function () { return this.stream.nextString() }, readSwfHeader: function () { var a = String.fromCharCode(this.readUI8(), this.readUI8(), this.readUI8()), b = this.readUI8(), c = this.readUI32(); if (a == "CWS") { var d = fljs.console("rar"); d.info("deflating..."); var e = this.stream.buffer.substr(this.stream.byteIndex + 2); d.info("unzipping..."); e = zip_inflate(e); d.info("streaming..."); this.stream = new fljs.swf.StringStream(e); d.info("done"); d.info(this.stream.buffer.length) } d = this.readRECT(); e = this.readFIXED8(); var f = this.readUI16(); return this.header = { Signature: a, Version: b, FileLength: c, FrameSize: d, FrameRate: e, FrameCount: f } }, readLANGCODE: function () { return { LanguageCode: this.readUI8() } }, readRecordHeader: function () { var a = this.readUI16(), b = a & 63; a = a >> 6 & 1023; if (b == 63) b = this.readSI32(); return { TagType: a, TagLength: b, byteIndex: this.stream.byteIndex } }, readMATRIX: function () { return this.readMatrix() }, readCXFORM: function () { var a = this.readUB(1), b = this.readUB(1), c = this.readUB(4), d = 1, e = 1, f = 1; if (b) { d = this.readSB(c) / 256; e = this.readSB(c) / 256; f = this.readSB(c) / 256 } var g = 0, j = 0, h = 0; if (a) { g = this.readSB(c); j = this.readSB(c); h = this.readSB(c) } return { HasAddTerms: a, HasMultTerms: b, Nbits: c, RedMultTerm: d, GreenMultTerm: e, BlueMultTerm: f, RedAddTerm: g, GreenAddTerm: j, BlueAddTerm: h, AlphaMultTerm: 1, AlphaAddTerm: 0 } }, readCXFORMWITHALPHA: function () { this.stream.align(); var a = this.readUB(1), b = this.readUB(1), c = this.readUB(4), d = 1, e = 1, f = 1, g = 1; if (b) { d = this.readSB(c) / 256; e = this.readSB(c) / 256; f = this.readSB(c) / 256; g = this.readSB(c) / 256 } var j = 0, h = 0, m = 0, k = 0; if (a) { j = this.readSB(c); h = this.readSB(c); m = this.readSB(c); k = this.readSB(c) } return { HasAddTerms: a, HasMultTerms: b, Nbits: c, RedMultTerm: d, GreenMultTerm: e, BlueMultTerm: f, AlphaMultTerm: g, RedAddTerm: j, GreenAddTerm: h, BlueAddTerm: m, AlphaAddTerm: k } }, readFILTERLIST: function () {}, readCLIPACTIONS: function () { this.readUI16(); var a = this.readClipEventFlags(), b = this.readClipActionRecords(); return { AllEventFlags: a, ClipActionRecords: b } }, readClipActionRecords: function () { for (var a = [], b; b = this.readClipActionRecord();) a.push(b); return a }, readClipActionRecord: function () { var a = this.readClipEventFlags(); if (!a) return null; var b = this.readUI32(), c = b, d; if (a & fljs.swf.ClipEventFlags.ClipEventKeyPress) { d = this.readUI8(); c -= 1 } c = this.readActionRecords(c); return { EventFlags: a, ActionRecordSize: b, KeyCode: d, Actions: c } }, readActionRecords: function (a) { for (var b = this.stream.byteIndex, c = []; this.stream.byteIndex != b + a;) c.push(this.readActionRecord()); if (c.length) { a = c[c.length - 1]; a.ActionCode != 0 && c.push({ code: "0x0", address: a.address + a.Length, ActionCode: 0, Action: "End" }) } return c }, readActionRecord: function () { var a = this.stream.byteIndex, b = this.readUI8(); a = { code: "0x" + b.toString(16), address: a, ActionCode: b }; if (b >= 128) a.Length = this.readUI16(); switch (b) { case 129: a.Action = "ActionGotoFrame"; a.Frame = this.readUI16(); break; case 131: a.Action = "ActionGetUrl"; a.UrlString = this.readString(); a.TargetString = this.readString(); break; case 4: a.Action = "ActionNextFrame"; break; case 5: a.Action = "ActionPrevFrame"; break; case 6: a.Action = "ActionPlay"; break; case 7: a.Action = "ActionStop"; break; case 8: a.Action = "ActionToggleQuality"; break; case 9: a.Action = "ActionStopSounds"; break; case 138: a.Action = "ActionWaitForFrame"; a.Frame = this.readUI16(); a.SkipCount = this.readUI8(); break; case 139: a.Action = "ActionSetTarget"; a.TargetName = this.readString(); break; case 8: a.Action = "ActionToggleQuality"; break; case 139: a.Action = "ActionSetTarget"; a.TargetName = this.readString(); break; case 140: a.Action = "ActionGotoLabel"; a.Label = this.readString(); break; case 150: this.readActionPush(a); break; case 153: a.Action = "ActionJump"; a.BranchOffset = this.readSI16(); break; case 157: a.Action = "ActionIf"; a.BranchOffset = this.readSI16(); break; case 154: a.Action = "ActionGetUrl2"; a.SendVarsMethod = this.readUB(2); a.Reserved = this.readUB(4); a.LoadTargetFlag = this.readUB(1); a.LoadVariablesFlag = this.readUB(1); break; case 159: this.readActionGotoFrame2(a); break; case 141: a.Action = "ActionWaitForFrame2"; a.SkipCount = this.readUI8(); break; case 136: this.readActionConstantPool(a); break; case 155: this.readActionDefineFunction(a); break; case 148: this.readActionWith(a); break; case 135: a.Action = "ActionStoreRegister"; a.RegisterNumber = this.readUI8(); break; case 142: this.readActionDefineFunction2(a); break; case 143: this.readActionTry(a); break; default: a.Action = "Unknown"; break } return a }, readActionPush: function (a) { for (var b = a.Length, c = this.stream.byteIndex, d = []; this.stream.byteIndex < c + b;) { var e = this.readUI8(), f; switch (e) { case 0: f = this.readString(); break; case 1: f = this.readFloat(); break; case 4: case 5: case 8: f = this.readUI8(); break; case 6: f = this.readDouble(); break; case 7: f = this.readUI32(); break; case 9: f = this.readUI16(); break } d.push({ Type: e, Value: f }) } a.Action = "ActionPush"; a.Values = d }, readActionGotoFrame2: function (a) { this.readUB(6); var b = this.readUB(1), c = this.readUB(1), d; if (b) d = this.readUI16(); a.Action = "ActionGotoFrame2"; a.SceneBiasFlag = b; a.PlayFlag = c; a.SceneBias = d }, readActionConstantPool: function (a) { for (var b = a.Length, c = this.stream.byteIndex, d = [], e = 0; this.stream.byteIndex < c + b;) { var f = this.readString(); e > 0 && d.push(f); e++ } a.Action = "ActionConstantPool"; a.Count = b; a.ConstantPool = d }, readActionDefineFunction: function (a) { for (var b = this.readString(), c = this.readUI16(), d = [], e = 0; e < c; e++) d.push(this.readString()); e = this.readUI16(); var f = this.readActionRecords(e); a.Action = "ActionDefineFunction"; a.FunctionName = b; a.NumParams = c; a.Params = d; a.CodeSize = e; a.Code = f }, readActionWith: function (a) { var b = this.readUI16(), c = this.readActionRecords(b); a.Action = "ActionWith"; a.Size = b; a.Code = c }, readActionDefineFunction2: function (a) { a.FunctionName = this.readString(); a.NumParams = this.readUI16(); a.RegisterCount = this.readUI8(); a.PreloadParentFlag = this.readUB(1); a.PreloadRootFlag = this.readUB(1); a.SupressSuperFlag = this.readUB(1); a.PreloadSuperFlag = this.readUB(1); a.SupressArgumentsFlag = this.readUB(1); a.PreloadArgumentsFlag = this.readUB(1); a.SupressThisFlag = this.readUB(1); a.PreloadThisFlag = this.readUB(1); this.readUB(7); a.PreloadGlobalFlag = this.readUB(1); a.Parameters = []; for (var b = 0; b < a.NumParams; b++) a.Parameters.push(this.readRegisterParam()); a.CodeSize = this.readUI16(); b = this.readActionRecords(a.CodeSize); a.Action = "ActionDefineFunction2"; a.Code = b }, readRegisterParam: function () { return { Register: this.readUI8(), ParamName: this.readString() } }, readActionTry: function (a) { this.readUB(5); a.CatchInRegisterFlag = this.readUB(1); a.FinallyBlockFlag = this.readUB(1); a.CatchBlockFlag = this.readUB(1); a.TrySize = this.readUI16(); a.CatchSize = this.readUI16(); a.FinallySize = this.readUI16(); if (a.CatchInRegisterFlag) a.CatchRegister = this.readUI8(); else a.CatchName = this.readString(); this.skipBytes(a.TrySize); this.skipBytes(a.CatchSize); this.skipBytes(a.FinallySize) }, readClipEventFlags: function () { return this.header.Version <= 5 ? this.readUB(16) << 16 : this.readUB(32) }, readRGB: function () { return { Red: this.readUI8(), Green: this.readUI8(), Blue: this.readUI8() } }, readRGBA: function () { return { Red: this.readUI8(), Green: this.readUI8(), Blue: this.readUI8(), Alpha: this.readUI8() } }, readARGB: function () { return { Alpha: this.readUI8(), Red: this.readUI8(), Green: this.readUI8(), Blue: this.readUI8() } }, readRect: function () { this.stream.align(); var a = this.readUB(5); return { Nbits: a, Xmin: this.readSB(a) / this.twipsPerPixel, Xmax: this.readSB(a) / this.twipsPerPixel, Ymin: this.readSB(a) / this.twipsPerPixel, Ymax: this.readSB(a) / this.twipsPerPixel } }, readRECT: function () { return this.readRect() }, readShapeWithStyle: function () { this.stream.align(); var a = this.readFILLSTYLEARRAY(), b = this.readLINESTYLEARRAY(); this.stream.align(); var c = this.readUB(4), d = this.readUB(4); this.NumFillBits = c; this.NumLineBits = d; var e = this.readSHAPERECORDS(); return { FillStyles: a, LineStyles: b, NumFillBits: c, NumLineBits: d, ShapeRecords: e } }, readSHAPEWITHSTYLE: function () { return this.readShapeWithStyle() }, readSHAPERECORDS: function () { for (var a = [], b = this.readSHAPERECORD(); !b.isEndOfShape;) { a.push(b); b = this.readSHAPERECORD() } this.stream.align(); return a }, readSHAPERECORD: function () { return this.readUB(1) == 0 ? this.readNonEdgeSHAPERECORD() : this.readEdgeSHAPERECORD() }, readNonEdgeSHAPERECORD: function () { var a = this.readUB(1), b = this.readUB(1), c = this.readUB(1), d = this.readUB(1), e = this.readUB(1); if (a == 0 && b == 0 && c == 0 && d == 0 && e == 0) return { isEndOfShape: true, type: "END" }; else { var f, g, j; if (e) { f = this.readUB(5); g = this.readSB(f); j = this.readSB(f) } var h; if (d) h = this.readUB(this.NumFillBits); var m; if (c) m = this.readUB(this.NumFillBits); var k; if (b) k = this.readUB(this.NumLineBits); var l, n, p, u; if (a) { l = this.readFILLSTYLEARRAY(); n = this.readLINESTYLEARRAY(); this.stream.align(); p = this.readUB(4); u = this.readUB(4); this.NumFillBits = p; this.NumLineBits = u } return { isEndOfShape: false, type: "NONEDGE", StateNewStyles: a, StateLineStyle: b, StateFillStyle1: c, StateFillStyle0: d, StateMoveTo: e, MoveBits: f, MoveDeltaX: g / this.twipsPerPixel, MoveDeltaY: j / this.twipsPerPixel, FillStyle0: h, FillStyle1: m, LineStyle: k, FillStyles: l, LineStyles: n, NumFillBits: p, NumLineBits: u } } }, readEdgeSHAPERECORD: function () { return this.readUB(1) == 1 ? this.readSTRAIGHTEDGERECORD() : this.readCURVEDEDGERECORD() }, readSTRAIGHTEDGERECORD: function () { var a = this.readUB(4), b = this.readUB(1), c; if (b == 0) c = this.readUB(1); var d; if (b == 1 || c == 0) { d = this.readSB(a + 2); if (c == 0) e = 0 } var e; if (b == 1 || c == 1) { e = this.readSB(a + 2); if (c == 1) d = 0 } return { isStraightEdge: true, type: "STRAIGHT", NumBits: a, GeneralLineFlag: b, VertLineFlag: c, DeltaX: d / this.twipsPerPixel, DeltaY: e / this.twipsPerPixel } }, readCURVEDEDGERECORD: function () { var a = this.readUB(4), b = this.readSB(a + 2), c = this.readSB(a + 2), d = this.readSB(a + 2), e = this.readSB(a + 2); return { isCurvedEdge: true, type: "CURVED", NumBits: a, ControlDeltaX: b / this.twipsPerPixel, ControlDeltaY: c / this.twipsPerPixel, AnchorDeltaX: d / this.twipsPerPixel, AnchorDeltaY: e / this.twipsPerPixel } }, readFILLSTYLEARRAY: function () { var a = this.readUI8(); if (this.context == fljs.swf.tag.DefineShape2 || this.context == fljs.swf.tag.DefineShape3 || this.context == fljs.swf.tag.DefineShape4) if (a == 255) a = a = this.readUI16(); for (var b = [], c = 0; c < a; c++) b[c] = this.readFILLSTYLE(); return b }, readFILLSTYLE: function () { var a = this.readUI8(), b; if (a == 0) b = this.context == fljs.swf.tag.DefineShape3 || this.context == fljs.swf.tag.DefineShape4 ? this.readRGBA() : this.readRGB(); var c, d; if (a == 16 || a == 18) { c = this.readMatrix(); d = this.readGRADIENT() } if (a == 19) { c = this.readMatrix(); d = this.readFOCALGRADIENT() } var e, f; if (a == 64 || a == 65 || a == 66 || a == 67) { e = this.readUI16(); f = this.readMatrix() } this.stream.align(); return { FillStyleType: a, Color: b, GradientMatrix: c, Gradient: d, BitmapId: e, BitmapMatrix: f } }, readLINESTYLEARRAY: function () { var a = this.readUI8(); if (a == 255) a = a = this.readUI16(); var b = []; if (this.context == fljs.swf.tag.DefineShape4) for (var c = 0; c < a; c++) b[c] = this.readLINESTYLE2(); else for (c = 0; c < a; c++) b[c] = this.readLINESTYLE(); return b }, readLINESTYLE: function () { var a = this.readUI16(), b; b = this.context == fljs.swf.tag.DefineShape || this.context == fljs.swf.tag.DefineShape2 ? this.readRGB() : this.readRGBA(); return { Width: a / this.twipsPerPixel, Color: b } }, readLINESTYLE2: function () { var a = this.readUI16(), b = this.readUB(2), c = this.readUB(2), d = this.readUB(1), e = this.readUB(1), f = this.readUB(1), g = this.readUB(1); this.readUB(5); var j = this.readUB(1), h = this.readUB(2), m; if (c == 2) m = this.readUI16(); var k; if (d == 0) k = this.readRGBA(); var l; if (d == 1) l = this.readFILLSTYLE(); return { Width: a / this.twipsPerPixel, StartCapStyle: b, JoinStyle: c, HasFillFlag: d, NoHScaleFlag: e, NoVScaleFlag: f, PixelHintingFlag: g, NoClose: j, EndCapStyle: h, MiterLimitFactor: m, Color: k, FillType: l } }, readGRADIENT: function () { this.stream.align(); for (var a = this.readUB(2), b = this.readUB(2), c = this.readUB(4), d = [], e = 0; e < c; e++) d.push(this.readGRADRECORD()); return { SpreadMode: a, InterpolationMode: b, NumGradients: c, GradientRecords: d } }, readFOCALGRADIENT: function () { this.stream.align(); for (var a = this.readUB(2), b = this.readUB(2), c = this.readUB(4), d = [], e = 0; e < c; e++) d.push(this.readGRADRECORD()); e = this.readFIXED8(); return { SpreadMode: a, InterpolationMode: b, NumGradients: c, GradientRecords: d, FocalPoint: e } }, readGRADRECORD: function () { var a = this.readUI8(), b; b = this.context == fljs.swf.tag.DefineShape || this.context == fljs.swf.tag.DefineShape2 ? this.readRGB() : this.readRGBA(); return { Ratio: a, Color: b } }, readID: function () {}, readMatrix: function () { this.stream.align(); var a = this.readUB(1), b, c, d; if (a) { b = this.readUB(5); c = this.readFB(b); d = this.readFB(b) } var e = this.readUB(1), f, g, j; if (e) { f = this.readUB(5); g = this.readFB(f); j = this.readFB(f) } var h = this.readUB(5), m = this.readSB(h), k = this.readSB(h); return { HasScale: a, NScaleBits: b, ScaleX: c, ScaleY: d, HasRotate: e, NRotateBits: f, RotateSkew0: g, RotateSkew1: j, NTranslateBits: h, TranslateX: m / this.twipsPerPixel, TranslateY: k / this.twipsPerPixel } }, readSHAPE: function () { var a = this.readUB(4), b = this.readUB(4); this.NumFillBits = a; this.NumLineBits = b; var c = this.readSHAPERECORDS(); return { NumFillBits: a, NumLineBits: b, ShapeRecords: c } }, readShape: function () { return this.readSHAPE() }, readTEXTRECORDS: function () { for (var a = [];;) { this.stream.align(); if (this.readUB(1)) a.push(this.readTEXTRECORD()); else { this.stream.align(); break } } return a }, readTEXTRECORD: function () { var a = this.readUB(3), b = this.readUB(1), c = this.readUB(1), d = this.readUB(1), e = this.readUB(1), f; if (b) f = this.readUI16(); var g; if (c) g = this.context == fljs.swf.tag.DefineText2 ? this.readRGBA() : this.readRGB(); var j; if (e) j = this.readSI16() / this.twipsPerPixel; var h; if (d) h = this.readSI16() / this.twipsPerPixel; var m; if (b) m = this.readUI16() / this.twipsPerPixel; for (var k = this.readUI8(), l = [], n = 0; n < k; n++) l.push(this.readGLYPHENTRY()); return { StyleFlagsReserved: a, StyleFlagsHasFont: b, StyleFlagsHasColor: c, StyleFlagsHasYOffset: d, StyleFlagsHasXOffset: e, FontId: f, TextColor: g, XOffset: j, YOffset: h, TextHeight: m, GlyphCount: k, GlyphEntries: l } }, readGLYPHENTRY: function () { return { GlyphIndex: this.readUB(this.GlyphBits), GlyphAdvance: this.readSB(this.AdvanceBits) / this.twipsPerPixel } }, readLangCode: function () { return this.readUI8() }, readKerningRecord: function () { var a, b; if (this.FontFlagsWideCodes) { a = this.readUI16(); b = this.readUI16() } else { a = this.readUI8(); b = this.readUI8() } var c = this.readSI16(); return { FontKerningCode1: a, FontKerningCode2: b, FontKerningAdjustment: c } }, readMp3SoundData: function (a) { for (var b = this.stream.byteIndex, c = this.readSI16(), d = this.stream.byteIndex, e = []; this.stream.byteIndex < b + a;) e.push(this.readMp3Frame(e.length)); a = this.stream.byteIndex - d; return { SeekSamples: c, Mp3Frames: e, byteIndex: d, byteCount: a, buffer: this.stream.buffer } }, readMp3Frame: function (a) { var b = this.readUB(11); if (b != 2047) throw new Error("readMp3Frame: Syncword is wrong in frame# " + a + " @ " + this.stream.byteIndex); a = this.readUB(2); var c = this.readUB(2), d = this.readUB(1), e = this.readUB(4), f = this.readUB(2), g = this.readUB(1); this.readUB(1); var j = this.readUB(2), h = this.readUB(2), m = this.readUB(1), k = this.readUB(1), l = this.readUB(2); d == 0 && this.readUI16(); var n = Math.floor((a == { MPEG2_5: 0, MPEG2: 2, MPEG1: 3 }.MPEG1 ? 144 : 72) * { 1: [null, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320], 2: [null, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160] }[{ 0: 2, 2: 2, 3: 1}[a]][e] * 1E3 / { 0: [11025, 12E3, 8E3], 2: [22050, 24E3, 16E3], 3: [44100, 48E3, 32E3] }[a][f]) + g - 4, p = this.readBytes(n); return { Syncword: b, MpegVersion: a, Layer: c, ProtectionBit: d, Bitrate: e, SamplingRate: f, PaddingBit: g, ChannelMode: j, ModeExtension: h, Copyright: m, Original: k, Emphasis: l, byteCount: n, SampleData: p } }, readSoundInfo: function () { this.readUB(2); var a = this.readUB(1), b = this.readUB(1), c = this.readUB(1), d = this.readUB(1), e = this.readUB(1), f = this.readUB(1), g; if (f) g = this.readUI32(); var j; if (e) j = this.readUI32(); var h; if (d) h = this.readUI16(); var m, k; if (c) { m = this.readUI8(); k = []; for (var l = 0; l < m; l++) k.push(this.readEnvelopeRecord()) } return { SyncStop: a, SyncNoMultiple: b, HasEnvelope: c, HasLoops: d, HasOutPoint: e, HasInPoint: f, InPoint: g, OutPoint: j, LoopCount: h, EnvPoints: m, EnvelopeRecords: k } }, readEnvelopeRecord: function () { return { Pos44: this.readUI32(), LeftLevel: this.readUI16(), RightLevel: this.readUI16() } }, readButtonRecords: function () { for (var a = [], b; b = this.readButtonRecord();) a.push(b); return a }, readButtonRecord: function () { var a = {}; this.stream.align(); this.readUB(2); a.ButtonHasBlendMode = this.readUB(1); a.ButtonHasFilterList = this.readUB(1); a.ButtonStateHitTest = this.readUB(1); a.ButtonStateDown = this.readUB(1); a.ButtonStateOver = this.readUB(1); a.ButtonStateUp = this.readUB(1); if (!a.ButtonHasBlendMode && !a.ButtonHasFilterList && !a.ButtonStateHitTest && !a.ButtonStateDown && !a.ButtonStateOver && !a.ButtonStateUp) return null; a.CharacterId = this.readUI16(); a.PlaceDepth = this.readUI16(); a.PlaceMatrix = this.readMatrix(); if (this.context == fljs.swf.tag.DefineButton2) { a.ColorTransform = this.readCXFORMWITHALPHA(); if (a.ButtonHasFilterList) a.FilterList = this.readFilterList(); if (a.ButtonHasBlendMode) a.BlendMode = this.readUI8() } return a }, readFilterList: function () { for (var a = [], b = this.readUI8(), c = 0; c < b; c++) a.push(this.readFilter()); return a }, readFilter: function () { var a = {}; a.FilterId = this.readUI8(); switch (a.FilterId) { case 0: a.DropShadowFilter = this.readDropShadowFilter(); break; case 1: a.BlurFilter = this.readBlurFilter(); break; case 2: a.GlowFilter = this.readGlowFilter(); break; case 3: a.BevelFilter = this.readBevelFilter(); break; case 4: a.GradientGlowFilter = this.readGradientGlowFilter(); break; case 5: a.ConvolutionFilter = this.readConvolutionFilter(); break; case 6: a.ColorMatrixFilter = this.readColorMatrixFilter(); break; case 7: a.GradientBevelFitler = this.readGradientBevelFilter(); break } return a }, readColorMatrixFilter: function () { return { Matrix: this.readFloats(20) } }, readConvolutionFilter: function () { var a = {}; a.MatrixX = this.readUI8(); a.MatrixY = this.readUI8(); a.Divisor = this.readFloat(); a.Bias = this.readFloat(); a.Matrix = this.readFloats(a.MatrixX * a.MatrixY); a.DefaultColor = this.readRGBA(); this.readUB(6); a.Clamp = this.readUB(1); a.PreserveAlpha = this.readUB(1); return a }, readBlurFilter: function () { var a = { BlurX: this.readFixed(), BlurY: this.readFixed(), Passes: this.readUB(5) }; this.readUB(3); return a }, readDropShadowFilter: function () { return { DropShadowColor: this.readRGBA(), BlurX: this.readFixed(), BlurY: this.readFixed(), Angle: this.readFixed(), Distance: this.readFixed(), Strength: this.readFixed8(), InnerShadow: this.readUB(1), Knockout: this.readUB(1), CompositeSource: this.readUB(1), Passes: this.readUB(5) } }, readGlowFilter: function () { return { GlowColor: this.readRGBA(), BlurX: this.readFixed(), BlurY: this.readFixed(), Strength: this.readFixed8(), InnerGlow: this.readUB(1), Knockout: this.readUB(1), CompositeSource: this.readUB(1), Passes: this.readUB(5) } }, readBevelFilter: function () { return { ShadowColor: this.readRGBA(), HighlightColor: this.readRGBA(), BlurX: this.readFixed(), BlurY: this.readFixed(), Angle: this.readFixed(), Distance: this.readFixed(), Strength: this.readFixed8(), InnerShadow: this.readUB(1), Knockout: this.readUB(1), CompositeSource: this.readUB(1), OnTop: this.readUB(1), Passes: this.readUB(4) } }, readGradientGlowFilter: function () { var a = {}; a.NumColors = this.readUI8(); a.GradientColors = []; for (var b = 0; b < a.NumColors; b++) a.GradientColors.push(this.readRGBA()); a.GradientRatios = []; for (b = 0; b < a.NumColors; b++) a.GradientRatios.push(this.readUI8()); a.BlurX = this.readFixed(); a.BlurY = this.readFixed(); a.Angle = this.readFixed(); a.Distance = this.readFixed(); a.Strength = this.readFixed8(); a.InnerShadow = this.readUB(1); a.Knockout = this.readUB(1); a.CompositeSource = this.readUB(1); a.OnTop = this.readUB(1); a.Passes = this.readUB(4); return a }, readGradientBevelFilter: function () { var a = {}; a.NumColors = this.readUI8(); a.GradientColors = []; for (var b = 0; b < a.NumColors; b++) a.GradientColors.push(this.readRGBA()); a.GradientRatios = []; for (b = 0; b < a.NumColors; b++) a.GradientRatios.push(this.readUI8()); a.BlurX = this.readFixed(); a.BlurY = this.readFixed(); a.Angle = this.readFixed(); a.Distance = this.readFixed(); a.Strength = this.readFixed8(); a.InnerShadow = this.readUB(1); a.Knockout = this.readUB(1); a.CompositeSource = this.readUB(1); a.OnTop = this.readUB(1); a.Passes = this.readUB(4); return a }, readButtonCondActions: function (a) { for (var b = [], c = this.stream.byteIndex, d; d = this.readUI16();) b.push(this.readButtonCondAction(d - 2)); b.push(this.readButtonCondAction(a - (this.stream.byteIndex - c))); return b }, readButtonCondAction: function (a) { var b = {}; b.CondActionSize = a + 2; b.CondIdleToOverDown = this.readUB(1); b.CondOutDownToIdle = this.readUB(1); b.CondOutDownToOverDown = this.readUB(1); b.CondOverDownToOutDown = this.readUB(1); b.CondOverDownToOverUp = this.readUB(1); b.CondOverUpToOverDown = this.readUB(1); b.CondOverUpToIdle = this.readUB(1); b.CondIdleToOverUp = this.readUB(1); b.CondKeyPress = this.readUB(7); b.CondOverDownToIdle = this.readUB(1); b.Actions = this.readActionRecords(a - 2); return b }, readPix15: function () { this.stream.align(); this.readUB(1); return { Red: Math.floor(this.readUB(5) * 8.226), Green: Math.floor(this.readUB(5) * 8.226), Blue: Math.floor(this.readUB(5) * 8.226) } }, beginContext: function (a) { this.context = a }, endContext: function () { this.NumLineBits = this.NumFillBits = this.context = null } }); fljs.swf.StringStream = function (a) { this.buffer = String(a); this.bitIndex = this.byteIndex = this._byte = 0; this.byteIndexForBits = -1; this.logger = fljs.console("parse") }; fljs.addMethods(fljs.swf.StringStream, { length: function () { return this.buffer.length }, hasMore: function () { return this.byteIndex < this.buffer.length }, seek: function (a) { this._byte = 0; this.byteIndex = a; this.bitIndex = 0; this.byteIndexForBits = -1 }, skipBytes: function (a) { this.byteIndex += a }, readBytes: function (a) { for (var b = [], c = 0; c < a; c++) b.push(String.fromCharCode(this.buffer.charCodeAt(this.byteIndex++) & 255)); return b }, readBytesRev: function (a) { for (var b = [], c = 0; c < a; c++) b.unshift(String.fromCharCode(this.buffer.charCodeAt(this.byteIndex++) & 255)); return b }, align: function () { this.bitIndex = 8 }, nextUByte: function () { return this.buffer.charCodeAt(this.byteIndex++) & 255 }, nextSByte: function () { var a = this.buffer.charCodeAt(this.byteIndex++) & 255; if (a >= 128) a -= 256; return a }, nextUShort: function () { var a = (this.buffer.charCodeAt(this.byteIndex++) & 255) + ((this.buffer.charCodeAt(this.byteIndex++) & 255) << 8); if (a < 0) a += 65536; return a }, nextSShort: function () { var a = this.nextUShort(); if (a > 32767) a -= 65536; return a }, nextULong: function () { var a = this.buffer.charCodeAt(this.byteIndex++) & 255, b = this.buffer.charCodeAt(this.byteIndex++) & 255, c = this.buffer.charCodeAt(this.byteIndex++) & 255, d = this.buffer.charCodeAt(this.byteIndex++) & 255; a = a + (b << 8) + (c << 16) + (d << 24); if (a < 0) a += 4294967296; return a }, nextSLong: function () { var a = this.nextULong(); if (a > 2147483647) a -= 4294967296; return a }, nextEncodedULong: function () { var a = this.buffer.charCodeAt(this.byteIndex++) & 255; if (!(a & 128)) return a; a = a & 127 | (this.buffer.charCodeAt(this.byteIndex++) & 255) << 7; if (!(a & 16384)) return a; a = a & 16383 | (this.buffer.charCodeAt(this.byteIndex++) & 255) << 14; if (!(a & 2097152)) return a; a = a & 2097151 | (this.buffer.charCodeAt(this.byteIndex++) & 255) << 21; if (!(a & 268435456)) return a; return a = a & 268435455 | (this.buffer.charCodeAt(this.byteIndex++) & 255) << 28 }, nextString: function () { for (var a = [], b; b = this.nextUByte();) a.push(String.fromCharCode(b)); return a.join("") }, _nextByteForBits: function () { this._byte = this.nextUByte(); this.bitIndex = 0; this.byteIndexForBits = this.byteIndex }, nextUBits: function (a) { this.byteIndex != this.byteIndexForBits && this._nextByteForBits(); for (var b = 0, c = 0; c < a; c++) { this.bitIndex == 8 && this._nextByteForBits(); b = (b << 1) + (this._byte >> 7 - this.bitIndex & 1); this.bitIndex += 1 } return b }, nextSBits: function (a, b) { b = this.nextUBits(a, b); if (b >> a - 1) b -= Math.pow(2, a); return b }, nextFShort: function () { return this.nextSShort() * Math.pow(2, -8) }, nextFLong: function () { return this.nextSLong() * Math.pow(2, -16) }, nextFBits: function (a) { return this.nextSBits(a) * Math.pow(2, -16) }, nextHalfFloat: function () { return this.nextUShort() }, nextSingleFloat: function () { return this.nextULong() }, nextDoubleFloat: function () { return this.nextULong() + this.nextULong() } }); fljs.swf.TagHeader = function () {}; fljs.addMethods(fljs.swf.TagHeader, { tagClass: function () { return fljs.swf.tag.tagMap[this.type] } }); fljs.swf.TagReader = function (a) { this.stream = new fljs.swf.SwfStream(new fljs.swf.StringStream(a)); this.tagMap = fljs.swf.tag.tagMap }; fljs.addMethods(fljs.swf.TagReader, { position: function () { return this.stream.stream.byteIndex }, readSwfHeader: function () { return this.stream.readSwfHeader() }, readTagHeader: function () { var a = this.stream.readRecordHeader(), b = new fljs.swf.TagHeader; b.data = a; b.type = a.TagType; b.length = a.TagLength; return b }, readTag: function (a, b) { var c = a.tagClass(); if (c) { var d = new c; c = this.stream.stream.byteIndex; d.read(this.stream, a.data, this, null, fljs.Player.getInstance().stage); d.header = a; d.byteIndex = c; if (!b && this.stream.stream.byteIndex < c + a.length) this.stream.skipBytes(c + a.length - this.stream.stream.byteIndex); else b || this.checkLocation(d) } return d }, skipTag: function (a) { this.stream.skipBytes(a.length) }, checkLocation: function (a) { if (this.stream.stream.byteIndex != a.byteIndex + a.header.length) { fljs.console("parse"); } } }); fljs.swf.DefinitionParser = function (a) { this.reader = new fljs.swf.TagReader(a); this.pendingSprite = this.pendingHeader = null; this.done = false }; fljs.addMethods(fljs.swf.DefinitionParser, { readHeader: function () { var a = this.reader.readSwfHeader(); return this.reader.stream.header = a }, readSomeTags: function (a) { fljs.console("parse"); if (!this.done) { var b; b = this.pendingSprite ? this.pendingSprite.tag : a.mainTimeline; for (var c = this.reader, d = 0, e = c.stream.stream.byteIndex; c.stream.hasMore();) { var f = c.stream.stream.byteIndex, g; if (this.pendingHeader) { g = this.pendingHeader; this.pendingHeader = null } else g = c.readTagHeader(); if (d > 0 && g.length > 2E4) { this.pendingHeader = g; a.mainTimeline.__bytesLoaded += e - c.stream.stream.byteIndex; return } var j = c.stream.stream.byteIndex; switch (g.tagClass()) { case fljs.swf.tag.DefineShape: case fljs.swf.tag.DefineShape2: case fljs.swf.tag.DefineShape3: case fljs.swf.tag.DefineShape4: case fljs.swf.tag.DefineFont: case fljs.swf.tag.DefineFont2: case fljs.swf.tag.DefineFont3: case fljs.swf.tag.DefineFontInfo: case fljs.swf.tag.DefineFontInfo2: case fljs.swf.tag.DefineText: case fljs.swf.tag.DefineText2: case fljs.swf.tag.DefineEditText: case fljs.swf.tag.DefineSound: case fljs.swf.tag.JpegTables: case fljs.swf.tag.DefineBits: case fljs.swf.tag.DefineBitsJPEG2: case fljs.swf.tag.DefineBitsLossless: case fljs.swf.tag.DefineBitsLossless2: case fljs.swf.tag.DefineButton2: case fljs.swf.tag.FrameLabel: case fljs.swf.tag.ExportAssets: var h = c.readTag(g); if (c.stream.stream.byteIndex != j + g.length) { rar.rar = true; return } h.evaluate(a, this, null, b); break; case fljs.swf.tag.DefineBitsJpeg3: c.readTag(g); if (c.stream.stream.byteIndex != j + g.length) { rar.rar = true; return } break; case fljs.swf.tag.DefineSprite: h = c.readTag(g, true); h.evaluate(a, this, null, a.stage); this.pendingSprite = { header: g, tag: h, endByteIndex: j + g.length }; b = h; break; case fljs.swf.tag.PlaceObject: case fljs.swf.tag.RemoveObject: case fljs.swf.tag.SetBackgroundColor: case fljs.swf.tag.DoAction: case fljs.swf.tag.DoInitAction: case fljs.swf.tag.Protect: case fljs.swf.tag.StartSound: case fljs.swf.tag.SoundStreamHead: case fljs.swf.tag.SoundStreamBlock: case fljs.swf.tag.PlaceObject2: case fljs.swf.tag.PlaceObject3: case fljs.swf.tag.RemoveObject2: case fljs.swf.tag.SoundStreamHead2: case fljs.swf.tag.DoAbc: case fljs.swf.tag.End: h = c.readTag(g); b.frameData_[b.framesLoaded_].tags.push([h, g]); if (c.stream.stream.byteIndex != j + g.length) { rar.rar = true; return } break; case fljs.swf.tag.ShowFrame: c.readTag(g); b.frameData_[b.framesLoaded_].loaded = true; b.framesLoaded_ += 1; if (b.framesLoaded_ == b.totalFrames_) if (this.pendingSprite) { c.stream.stream.byteIndex < this.pendingSprite.endByteIndex && c.stream.skipBytes(this.pendingSprite.endByteIndex - c.stream.stream.byteIndex); b.__bytesLoaded = b.__bytesTotal; this.pendingSprite = null; b = a.mainTimeline } else { b.__bytesLoaded = b.__bytesTotal; this.done = true; return } else b.frameData_[b.framesLoaded_] = { tags: [] }; break; default: fljs.console("unk"); c.skipTag(g) } d += c.stream.stream.byteIndex - f; if (d > 2E4) { a.mainTimeline.__bytesLoaded += c.stream.stream.byteIndex - e; return } } } } }); fljs.swf.DefParser = fljs.swf.DefinitionParser; fljs.swf.act = {}; fljs.swf.act.ActionInterpreter = function (a) { this.player = a; this.trace = false; this.consts = new fljs.swf.act.ConstantsPool; this.globals = new fljs.swf.act.Globals(a); this.traceLogger = fljs.console("trace") }; fljs.swf.act.ActionInterpreter.ActionCode = { End: 0, NextFrame: 4, PreviousFrame: 5, Play: 6, Stop: 7, Subtract: 11, Multiply: 12, Divide: 13, Not: 18, Pop: 23, ToInteger: 24, GetVariable: 28, SetVariable: 29, Trace: 38, StartDrag: 39, EndDrag: 40, GetTime: 52, Delete: 58, DefineLocal: 60, CallFunction: 61, Return: 62, NewObject: 64, DefineLocal2: 65, InitObject: 67, TypeOf: 68, Add2: 71, Less2: 72, Equals2: 73, PushDuplicate: 76, GetMember: 78, SetMember: 79, Increment: 80, Decrement: 81, CallMethod: 82, Greater: 103, GotoFrame: 129, GetUrl: 131, StoreRegister: 135, ConstantPool: 136, WaitForFrame: 138, SetTarget: 139, GotoLabel: 140, DefineFunction2: 142, With: 148, Push: 150, Jump: 153, GetUrl2: 154, DefineFunction: 155, If: 157, GotoFrame2: 159 }; fljs.addMethods(fljs.swf.act.ActionInterpreter, { value: function (a, b) { switch (b.Type) { case 0: case 2: case 3: case 5: case 10: case 11: return b; case 1: case 6: case 7: return { Type: 1, Value: b.Value }; case 4: return a.reg(b.Value); case 8: case 9: return { Type: 0, Value: this.consts.lookup(b.Value) }; default: return "[ERR: unknown value]" } }, callFunction: function (a, b, c, d) { a = new fljs.swf.act.Context(c, b.Context, this, false, b.Value.SupressThisFlag); for (var e = 0; e < b.Value.NumParams; e++) { var f = b.Value.Parameters[e].Register, g = d[e]; g || (g = { Type: 3, Value: undefined }); f ? a.setReg(f, g) : a.setLocal(b.Value.Parameters[e].ParamName, g) } f = 1; if (b.Value.PreloadThisFlag) { a.setReg(f, a.locals.get("this")); f += 1 } if (b.Value.PreloadArgumentsFlag) { a.setReg(f, { Type: 3, Value: undefined }); f += 1 } if (b.Value.PreloadSuperFlag) { a.setReg(f, { Type: 3, Value: undefined }); f += 1 } if (b.Value.PreloadRootFlag) { a.setReg(f, a.locals.get("_root")); f += 1 } if (b.Value.PreloadParentFlag) { a.setReg(f, a.locals.get("_parent")); f += 1 } b.Value.PreloadGlobalFlag && a.setReg(f, a.locals.get("_global")); d = this.consts; this.consts = b.Consts; b = this.eval(c, b.Value.Code, a); this.consts = d; return b }, callMethod: function (a, b, c, d) { var e; switch (b.Type) { case 0: a = new fljs.swf.act.String(b.Value); e = a.get(c).apply(a, d); break; case 3: break; case 11: c = b.Value.get(c); switch (c.Type) { case 10: e = c.Value.apply(b.Value, d); break; case 12: e = this.callFunction(a, c, b.Value, d); break } break } return e }, callWith: function (a, b, c) { a = new fljs.swf.act.Context(c, a, this, true); this.eval(c, b.Value.Code, a) }, callback: function (a, b, c) { c || (c = []); switch (b.Type) { case 10: b.Value.apply(a, c); break; case 12: this.callFunction(null, b, a, c); break } }, eval: function (a, b, c) { c || (c = new fljs.swf.act.Context(a, null, this)); for (var d = fljs.swf.act.ActionInterpreter.ActionCode, e = [], f = 0; f < b.length; f++) { var g = b[f]; g = b[f]; switch (g.ActionCode) { case d.ConstantPool: this.consts = new fljs.swf.act.ConstantsPool; for (var j in g.ConstantPool) this.consts.push(g.ConstantPool[j]); this.trace && e.push("ConstantPool = " + this.consts); break; case d.Push: for (j in g.Values) c.stack.push(this.value(c, g.Values[j])); if (this.trace) { var h = []; for (j in g.Values) h.push(this.value(c, g.Values[j])); e.push("Push(" + h + ")") } break; case d.GetVariable: g = c.stack.pop().Value; h = c.get(g); c.stack.push(h); this.trace && e.push("GetVariable(" + [g, h] + ")"); break; case d.CallMethod: g = c.stack.pop().Value; var m = c.stack.pop(), k = c.stack.pop().Value; h = []; for (j = 0; j < k; j++) h.push(c.stack.pop()); var l; if (g) l = this.callMethod(c, m, g, h); else switch (m.Type) { case 10: l = m.Value.apply(null, h); break; case 12: l = this.callFunction(c, m, null, h); break } if (typeof l == "undefined") l = { Type: 3, Value: undefined }; c.stack.push(l); this.trace && e.push("Call(" + [m, g, h, l] + ")"); break; case d.SetVariable: h = c.stack.pop(); k = c.stack.pop().Value; m = k.split(":"); if (m.length == 1) { a = c.self; g = m[0] } else { a = c.resolvePath(m[0]); g = m[1] } switch (h.Type) { case 0: case 1: case 2: case 3: case 5: case 6: case 7: a.set(g, { Type: h.Type, Value: h.Value }); break; default: a.set(g, h); break } this.trace && e.push("Set: " + [k, g, h]); break; case d.Divide: g = c.stack.pop(); h = c.stack.pop(); k = { Type: 1, Value: h.Value / g.Value }; if (fljs.Player.getInstance().swfVersion == 4 && (isNaN(k.Value) || k.Value == Number.POSITIVE_INFINITY || k.Value == Number.NEGATIVE_INFINITY)) k = { Type: 0, Value: "#ERROR#" }; c.stack.push(k); this.trace && e.push([g, "/", h].toString()); break; case d.Multiply: g = c.stack.pop(); h = c.stack.pop(); c.stack.push({ Type: 1, Value: Number(g.Value) * Number(h.Value) }); this.trace && e.push([g, "*", h].toString()); break; case d.Equals2: g = c.stack.pop(); h = c.stack.pop(); c.stack.push({ Type: 5, Value: g.Value == h.Value }); this.trace && e.push([g, "==", h].toString()); break; case d.Not: g = Number(c.stack.pop().Value); if (fljs.Player.getInstance().swfVersion == 4) g == 0 ? c.stack.push({ Type: 1, Value: 1 }) : c.stack.push({ Type: 1, Value: 0 }); else c.stack.push({ Type: 5, Value: !g }); this.trace && e.push(["!", g].toString()); break; case d.If: h = c.stack.pop(); if (h.Value) { for (j = f + 1; b[j] && b[j].address != b[f + 1].address + g.BranchOffset;) if (g.BranchOffset > 0) j += 1; else j -= 1; f = j - 1 } this.trace && e.push(["if(", h, ")", f].toString()); break; case d.Pop: c.stack.pop(); this.trace && e.push("pop"); break; case d.WaitForFrame: if (c.self.get__framesloaded().Value < g.Frame + 1) f += 1 + g.SkipCount; this.trace && e.push("waitForFrame(" + [g.Frame + 1, g.SkipCount] + ")"); break; case d.GotoFrame: c.self.gotoFrame({ Type: 1, Value: g.Frame + 1 }); this.trace && e.push("gotoFrame(" + (g.Frame + 1) + ")"); break; case d.GetUrl: c.self.getUrl({ Type: 0, Value: g.UrlString }, { Type: 0, Value: g.TargetString }); this.trace && e.push('getUrl("' + g.UrlString + '")'); break; case d.GetUrl2: if (g.LoadTargetFlag) this.trace && e.push("unsupported getUrl call"); else if (g.LoadVariablesFlag) this.trace && e.push("unsupported getUrl call"); else { g.SendVarsMethod && this.trace && e.push("unsupported getUrl call"); g = c.stack.pop(); h = c.stack.pop(); c.self.getUrl(h, g); this.trace && e.push('getUrl("' + h + '", "' + g + '")') } break; case d.Play: c.self.play(); this.trace && e.push("play()"); break; case d.Stop: c.self.stop(); this.trace && e.push("stop()"); break; case d.DefineFunction: if (g.FunctionName) { c.set(g.FunctionName, { Type: 12, Value: g, Consts: this.consts, Context: c }); this.trace && e.push(g.FunctionName + " = function() {}") } else { c.stack.push({ Type: 12, Value: g, Consts: this.consts, Context: c }); this.trace && e.push("Push(function " + g.FunctionName + "() {})") } break; case d.SetTarget: c.setTarget(g.TargetName); this.trace && e.push("SetTarget(" + g.TargetName + ")"); break; case d.PreviousFrame: c.self.prevFrame(); this.trace && e.push("PrevFrame()"); break; case d.NextFrame: c.self.nextFrame(); this.trace && e.push("NextFrame()"); break; case d.Jump: h = g.BranchOffset > 0 ? 1 : -1; for (j = f + 1; b[j] && b[j].address != b[f + 1].address + g.BranchOffset;) j += h; f = j - 1; this.trace && e.push("Jump(" + g.BranchOffset + ")"); break; case d.NewObject: g = c.stack.pop().Value; k = c.stack.pop().Value; h = []; for (j = 0; j < k; j++) h.push(c.stack.pop()); k = c.get(g); switch (k.Type) { case 11: a = new k.Value; a.init.apply(a, h); a = { Type: 11, Value: a }; break } c.stack.push(a); this.trace && e.push("New(" + g + ")"); break; case d.GetMember: g = c.stack.pop().Value; a = c.stack.pop(); c.stack.push(a.Value.get(g)); this.trace && e.push("GetMember (" + [a, g] + ")"); break; case d.SetMember: h = c.stack.pop(); g = c.stack.pop().Value; a = c.stack.pop(); a.Value.set(g, h); this.trace && e.push("SetMember (" + [a, g, h] + ")"); break; case d.InitObject: k = c.stack.pop().Value; a = new fljs.swf.act.Object; for (f = 0; f < k; f++) { h = c.stack.pop(); g = c.stack.pop().Value; a.set(g, h) } this.trace && e.push("InitObject (" + [a, k] + ")"); break; case d.Trace: h = c.stack.pop(); this.traceLogger.info(h.Value); this.trace && e.push("Trace (" + h.Value + ")"); break; case d.Increment: h = c.stack.pop(); c.stack.push({ Type: h.Type, Value: h.Value + 1 }); this.trace && e.push("Increment (" + h.Value + ")"); break; case d.With: a = c.stack.pop(); this.callWith(c, g, a.Value); this.trace && e.push("With (" + a + ")"); break; case d.End: this.trace && e.push("End"); break; case d.DefineFunction2: if (g.FunctionName) { c.set(g.FunctionName, { Type: 12, Value: g, Consts: this.consts, Context: c }); this.trace && e.push(g.FunctionName + " = function() {}") } else { c.stack.push({ Type: 12, Value: g, Consts: this.consts, Context: c }); this.trace && e.push("Push(function " + g.FunctionName + "() {})") } this.trace && e.push("DefineFunction2(" + g.FunctionName + ")"); break; case d.StoreRegister: c.setReg(g.RegisterNumber, c.stack[c.stack.length - 1]); this.trace && e.push("StoreRegister(" + g.RegisterNumber + ")"); break; case d.GotoLabel: c.self.gotoFrame({ Type: 0, Value: g.Label }); this.trace && e.push("GotoLabel(" + g.Label + ")"); break; case d.StartDrag: c.stack.pop(); c.stack.pop(); if (c.stack.pop().Value) { c.stack.pop(); c.stack.pop(); c.stack.pop(); c.stack.pop() } break; case d.EndDrag: break; case d.Add2: h = c.stack.pop(); k = c.stack.pop(); g = h.Type == 0 || k.Type == 0 ? 0 : h.Type == 6 || k.Type == 6 ? 6 : h.Type == 1 || k.Type == 1 ? 1 : 7; c.stack.push({ Type: g, Value: k.Value + h.Value }); break; case d.Subtract: g = Number(c.stack.pop().Value); h = Number(c.stack.pop().Value); c.stack.push({ Type: 1, Value: h - g }); break; case d.DefineLocal: h = c.stack.pop(); g = c.stack.pop().Value; c.setLocal(g, h); break; case d.PushDuplicate: h = c.stack[c.stack.length - 1]; switch (h.Type) { case 0: case 1: case 2: case 3: case 5: case 6: case 7: g = { Type: h.Type, Value: h.Value }; break; default: g = h; break } c.stack.push(g); break; case d.GetTime: c.stack.push({ Type: 1, Value: fljs.now() - fljs.Player.getInstance().startTime }); break; case d.Greater: h = c.stack.pop(); k = c.stack.pop(); c.stack.push({ Type: 5, Value: k.Value > h.Value }); break; case d.CallFunction: g = c.stack.pop().Value; k = c.stack.pop().Value; h = []; for (j = 0; j < k; j++) h.push(c.stack.pop()); k = c.get(g); if (g) switch (k.Type) { case 10: l = k.Value.apply(null, h); break; case 12: l = this.callFunction(c, k, null, h); break } if (typeof l == "undefined") l = { Type: 3, Value: undefined }; c.stack.push(l); break; case d.DefineLocal2: g = c.stack.pop().Value; g in c.locals || c.setLocal(g, { Type: 3, Value: undefined }); break; case d.TypeOf: h = c.stack.pop(); g = { 0: "string", 1: "number", 2: "null", 3: "undefined", 5: "boolean", 6: "number", 7: "number", 10: "function", 11: "object", 12: "function" }[h.Type]; if (h.Value instanceof fljs.swf.act.MovieClip) g = "movieclip"; c.stack.push({ Type: 0, Value: g }); break; case d.ToInteger: h = Number(c.stack.pop().Value); h = h >= 0 ? Math.floor(h) : Math.ceil(h); c.stack.push({ Type: 1, Value: h }); break; case d.Return: return c.stack.pop(); case d.GotoFrame2: h = c.stack.pop(); if (h.Type == 0) { m = h.Value.split(":"); if (m.length == 1) { a = c.self; h = m[0] } else { a = c.resolvePath(m[0]); h = m[1] } h = parseInt(h) ? { Type: 1, Value: parseInt(h) } : { Type: 0, Value: h } } else { a = c.self; h = h } if (g.SceneBias) h.Value += g.SceneBias; g.PlayFlag ? c.self.gotoandPlay(h) : c.self.gotoFrame(h); break; case d.Less2: h = c.stack.pop().Value; k = c.stack.pop().Value; c.stack.push({ Type: 5, Value: k < h }); break; case d.Decrement: h = c.stack.pop(); c.stack.push({ Type: h.Type, Value: h.Value - 1 }); break; case d.Delete: g = c.stack.pop().Value; a = c.stack.pop(); a.Value.del(g); break; default: rar.rar = rar; this.trace && e.push("skipped: 0x" + g.ActionCode.toString(16)) } } this.trace && fljs.console("actions").info(e.join("\n")) } }); fljs.swf.act.Context = function (a, b, c, d, e) { this.self = a; if (this.parent = b) this.root = b.root ? b.root : b; this.withCtx = d; this.stack = []; this.interp = c; this.locals = this.withCtx ? this.parent.locals : new fljs.swf.act.Object; if (!this.withCtx) { a = fljs.Player.getInstance().mainTimeline.getAs2Object(); this.locals.set("_root", { Type: 11, Value: a }); this.locals.set("_level0", { Type: 11, Value: a }); this.locals.set("_global", { Type: 11, Value: c.globals }); if (this.self) { for (c = this; !c.self;) c = c.parent; b = c.self; c = b.dispObj.getParent() ? b.dispObj.getParent().getAs2Object() : a } else b = c = a; this.locals.set("_parent", { Type: 11, Value: c }); e || this.locals.set("this", { Type: 11, Value: b }) } this.regs = [] }; fljs.addMethods(fljs.swf.act.Context, { set: function (a, b) { if (a in this.locals) this.locals.set(a, b); else { if (this.withCtx) if (a in this.self) { this.self.set(a, b); return } this.parent ? this.parent.set(a, b) : this.self.set(a, b) } }, setLocal: function (a, b) { this.parent ? this.locals.set(a, b) : this.set(a, b) }, get: function (a) { var b; b = this.locals.get(a); if (b.Type != 3) return b; if (this.withCtx) { b = this.self.get(a); if (b.Type != 3) return b } if (this.parent) return this.parent.get(a); else b = this.root ? this.root.get(a) : this.self.get(a); if (b.Type != 3) return b; return this.interp.globals.get(a) }, reg: function (a) { return this.regs[a] }, setReg: function (a, b) { this.regs[a] = b }, resolvePath: function (a) { var b; b = a.indexOf(".") == -1 ? "/" : "."; a = a.split(b); b = this.self; if (a[0] == "" && a.length > 1) b = this.root ? this.root.self : this.self; for (var c in a) { var d = a[c]; if (d) if (d != ".") b = d == ".." ? b.parent.Value : b.dispObj.__childNames[d].getAs2Object() } return b }, setTarget: function (a) { if (a) { a = this.resolvePath(a); if (!this.origTarget) this.origTarget = this.self } else a = this.origTarget; this.self = a } }); fljs.swf.act.ConstantsPool = function () { this.consts = [] }; fljs.addMethods(fljs.swf.act.ConstantsPool, { clear: function () { this.consts = [] }, push: function (a) { this.consts.push(a) }, lookup: function (a) { return this.consts[a] } }); fljs.swf.act.Object = function () { this.self = {}; this.funcs = {}; this.props = {} }; fljs.swf.act.Object.Type = { Bool: 5, Func: 10 }; fljs.addMethods(fljs.swf.act.Object, { setNativeFunc: function (a, b) { this.funcs[a] = b }, setNativeProperty: function (a, b) { this.props[a] = b }, set: function (a, b) { if (this.props && a in this.props) this["set_" + this.props[a]](b); else this.self[a] = b }, get: function (a) { if (this.funcs && a in this.funcs) return { Type: 10, Value: this[this.funcs[a]] }; if (this.props && a in this.props) return this["get_" + this.props[a]](); else if (this.self && a in this.self) { a = this.self[a]; return a == null ? { Type: 2, Value: null } : a } else return { Type: 3, Value: undefined } }, del: function (a) { if (this.props && a in this.props) this["set_" + this.props[a]]({ Type: 3, Value: undefined }); else delete this.self[a] } }); fljs.swf.act.MovieClip = function (a) { fljs.swf.act.Object.call(this); this.dispObj = a; this.logger = fljs.console("mcaction"); this.funcs = fljs.swf.act.MovieClip.funcs; this.props = fljs.swf.act.MovieClip.props }; fljs.inherits(fljs.swf.act.MovieClip, fljs.swf.act.Object); fljs.swf.act.MovieClip.props = { _framesloaded: "_framesloaded", _visible: "_visible", _x: "_x", _y: "_y", onEnterFrame: "onEnterFrame", onRollOver: "onRollOver", onRollOut: "onRollOut", onPress: "onPress", onRelease: "onRelease", _xmouse: "_ymouse", _xscale: "_xscale", _yscale: "_yscale", _width: "_width" }; fljs.swf.act.MovieClip.funcs = { nextFrame: "nextFrame", prevFrame: "prevFrame", gotoFrame: "gotoFrame", gotoAndStop: "gotoFrame", gotoAndPlay: "gotoAndPlay", play: "play", stop: "stop", localToGlobal: "localToGlobal", hitTest: "hitTest", getBytesLoaded: "getBytesLoaded", getBytesTotal: "getBytesTotal" }; fljs.addMethods(fljs.swf.act.MovieClip, { get: function (a) { var b = this.dispObj.__childNames[a]; return b ? { Type: 11, Value: b.getAs2Object() } : fljs.base(this, "get", a) }, nextFrame: function () { this.logger.info("nextFrame"); this.dispObj.currentFrameIndex_ < this.dispObj.totalFrames_ - 1 && this.dispObj.nextFrame() }, prevFrame: function () { this.logger.info("prevFrame"); this.dispObj.currentFrameIndex_ > 0 && this.dispObj.prevFrame() }, gotoFrame: function (a) { this.logger.info("gotoFrame: " + a); this.dispObj.gotoAndStop(a.Value) }, gotoAndPlay: function (a) { this.logger.info("gotoAndPlay: " + a); this.dispObj.gotoAndPlay(a.Value) }, play: function () { this.logger.info("play"); this.dispObj.play() }, stop: function () { this.logger.info("stop"); this.dispObj.stop() }, getUrl: function (a, b) { if (b.Value == "") window.location = a.Value; if (a.Value.substr(0, 10) == "FSCommand:") switch (a.Value.substr(10)) { case "quit": fljs.Player.getInstance().pause(); break; case "fullscreen": break; case "allowscale": break; case "showmenu": break; case "exec": break; case "trapallkeys": break } else { b = b.Value; if (fljs.agent.OS == "iPhone" || fljs.agent.OS == "iPad") if (b == "_blank") b = "_self"; window.open(a.Value, b); return { Type: 0, Value: "" } } }, localToGlobal: function (a) { a = new flash.geom.Point(a.Value.get("x"), a.Value.get("y")); a = this.dispObj.localToGlobal(a); var b = new fljs.swf.act.Object; b.set("x", a.x); b.set("y", a.y); return { Type: 11, Value: b } }, hitTest: function (a, b, c) { if (arguments.length == 1) { c = arguments[0]; var d; if (c.Type != 0) d = c.Value; return { Type: 5, Value: this.dispObj.hitTestObject(d.Value.dispObj) } } }, getBytesLoaded: function () { return { Type: 1, Value: this.dispObj.__bytesLoaded } }, getBytesTotal: function () { return { Type: 1, Value: this.dispObj.__bytesTotal } }, get__framesloaded: function () { return { Type: 1, Value: this.dispObj.framesLoaded_ } }, get__xscale: function () { return { Type: 1, Value: this.dispObj.scaleX } }, set__xscale: function (a) { this.dispObj.scaleX = a.Value }, get__yscale: function () { return { Type: 1, Value: this.dispObj.scaleY } }, set__yscale: function (a) { this.dispObj.scaleY = a.Value }, get__visible: function () { return { Type: 5, Value: this.dispObj.getVisible() } }, set__visible: function (a) { this.dispObj.setVisible(a.Value) }, get__x: function () { return { Type: 1, Value: this.dispObj.x } }, set__x: function (a) { this.dispObj.x = a.Value }, get__y: function () { return { Type: 1, Value: this.dispObj.y } }, set__y: function (a) { this.dispObj.y = a.Value }, set_onEnterFrame: function (a) { this._onEnterFrame = a }, set_onRollOver: function (a) { this.set_onMouseEvent(flash.events.MouseEvent.MOUSE_OVER, a) }, set_onRollOut: function (a) { this.set_onMouseEvent(flash.events.MouseEvent.MOUSE_OUT, a) }, set_onPress: function (a) { this.set_onMouseEvent(flash.events.MouseEvent.MOUSE_DOWN, a) }, set_onRelease: function (a) { this.set_onMouseEvent(flash.events.MouseEvent.MOUSE_UP, a) }, set_onMouseEvent: function (a, b) { var c = this["_on" + a] && !(this["_on" + a].Type == 2 || this["_on" + a].Type == 3), d = !(b.Type == 2 || b.Type == 3); c && !d && this.dispObj.removeEventListener(a, this["_on" + a + "Handler"]); if (!c && d) { this["_on" + a + "Handler"] || (this["_on" + a + "Handler"] = fljs.bind(this.onMouseEventHandler, this, a)); this.dispObj.addEventListener(a, this["_on" + a + "Handler"]) } this["_on" + a] = b }, get_xmouse: function () { return this.dispObj.get_mouseX() }, get_ymouse: function () { return this.dispObj.get_mouseY() }, onMouseEventHandler: function (a) { fljs.Player.getInstance().interpreter.callback(this, this["_on" + a]) }, get__width: function () { return { Type: 1, Value: this.dispObj.getWidth() } }, set__width: function (a) { this.dispObj.setWidth(a.Value) } }); fljs.swf.act.Mouse = function () { fljs.swf.act.Object.call(this); this.funcs = fljs.swf.act.Mouse.funcs; this.props = fljs.swf.act.Mouse.props }; fljs.inherits(fljs.swf.act.Mouse, fljs.swf.act.Object); fljs.swf.act.Mouse.props = {}; fljs.swf.act.Mouse.funcs = { hide: "hide", show: "show", addListener: "addListener", removeListener: "removeListener" }; fljs.addMethods(fljs.swf.act.Mouse, { hide: function () { fljs.Player.getInstance().element.getElement().setAttributeNS(null, "cursor", 'url("img/nothing.cur")') }, show: function () { fljs.Player.getInstance().element.getElement().setAttributeNS(null, "cursor", "") }, addListener: function () {}, removeListener: function () {} }); fljs.swf.act.Mouse._self = {}; fljs.swf.act.Mouse._props = {}; fljs.swf.act.Mouse._funcs = { hide: "hide", show: "show" }; fljs.addStaticMethods(fljs.swf.act.Mouse, { set: function (a, b) { delete this._funcs[a]; delete this._props[a]; this._self[a] = b }, get: function (a) { var b = this._funcs[a]; if (b) return { Type: 10, Value: this[b] }; if (b = this._props[a]) return this[b]; else { a = this._self[a]; return a == null ? { Type: 2, Value: null } : a } }, hide: function () { fljs.Player.getInstance().element.getElement().setAttributeNS(null, "cursor", 'url("img/nothing.cur")') }, show: function () { fljs.Player.getInstance().element.getElement().setAttributeNS(null, "cursor", "") } }); fljs.swf.act.Sound = function () { this.funcs = fljs.swf.act.Sound.funcs; this.props = {} }; fljs.inherits(fljs.swf.act.Sound, fljs.swf.act.Object); fljs.swf.act.Sound.funcs = { attachSound: "attachSound", start: "start", stop: "stop" }; fljs.addMethods(fljs.swf.act.Sound, { init: function (a) { this.target = a }, attachSound: function (a) { var b = fljs.Player.getInstance(); this.target = b.sounds[b.assets[a.Value]] }, start: function () { var a = fljs.Player.getInstance(); if (!this.audio) this.audio = a.allocAudio(); var b = this.audio, c = this.target, d = new fljs.swf.StringStream(a.reader.stream.stream.buffer); d.byteIndex = c.Mp3SoundData.byteIndex; c = d.readBytes(c.Mp3SoundData.byteCount).join(""); c = "data:audio/mpeg;base64," + btoa(c); b.setAttribute("src", c); b.addEventListener("load", function () { b.currentTime = 0; b.fljsPlaying = true; a.playing && b.play() }, true); b.load() }, stop: function () { if (this.audio) { fljs.Player.getInstance(); var a = this.audio; a.fljsPlaying = false; a.pause() } } }); fljs.swf.act.Math = function () { this.funcs = fljs.swf.act.Math.funcs; this.props = fljs.swf.act.Math.props }; fljs.inherits(fljs.swf.act.Math, fljs.swf.act.Object); fljs.swf.act.Math.props = {}; fljs.swf.act.Math.funcs = { floor: "floor" }; fljs.addMethods(fljs.swf.act.Math, { floor: function (a) { return { Type: 1, Value: Math.floor(a.Value) } } }); fljs.swf.act.Math._self = {}; fljs.swf.act.Math._props = {}; fljs.swf.act.Math._funcs = { floor: "floor", random: "random" }; fljs.addStaticMethods(fljs.swf.act.Math, { set: function (a, b) { delete this._funcs[a]; delete this._props[a]; this._self[a] = b }, get: function (a) { var b = this._funcs[a]; if (b) return { Type: 10, Value: this[b] }; if (b = this._props[a]) return this[b]; else { a = this._self[a]; return a == null ? { Type: 2, Value: null } : a } }, floor: function (a) { return { Type: 1, Value: Math.floor(a.Value) } }, random: function () { return { Type: 1, Value: Math.random() } } }); fljs.swf.act.System = function () { this.funcs = {}; this.props = fljs.swf.act.System.props; this.security = new fljs.swf.act.SystemSecurity }; fljs.inherits(fljs.swf.act.System, fljs.swf.act.Object); fljs.swf.act.System.props = { security: "security" }; fljs.swf.act.SystemSecurity = function () { this.funcs = fljs.swf.act.SystemSecurity.funcs; this.props = {} }; fljs.inherits(fljs.swf.act.SystemSecurity, fljs.swf.act.Object); fljs.swf.act.SystemSecurity.funcs = { allowDomain: "allowDomain" }; fljs.addMethods(fljs.swf.act.SystemSecurity, { allowDomain: function () {}, get_security: function () { return { Type: 11, Value: this.security } } }); fljs.swf.act.String = function (a) { this.str = a; this.funcs = fljs.swf.act.String.funcs; this.props = {} }; fljs.inherits(fljs.swf.act.String, fljs.swf.act.Object); fljs.swf.act.String.funcs = { substr: "substr" }; fljs.addMethods(fljs.swf.act.String, { substr: function (a, b) { return { Type: 0, Value: this.str.substr(a.Value, b.Value) } } }); fljs.swf.act.Globals = function () { fljs.swf.act.Object.call(this); this.funcs = fljs.swf.act.Globals.funcs; this.props = fljs.swf.act.Globals.props; this.Mouse = { Type: 11, Value: fljs.swf.act.Mouse }; this.Sound = { Type: 11, Value: fljs.swf.act.Sound }; this.System = { Type: 11, Value: fljs.swf.act.System }; this.Math = { Type: 11, Value: fljs.swf.act.Math } }; fljs.inherits(fljs.swf.act.Globals, fljs.swf.act.Object); fljs.swf.act.Globals.props = { Mouse: "Mouse", Sound: "Sound", System: "System", Math: "Math", setInterval: "setInterval", clearInterval: "clearInterval" }; fljs.swf.act.Globals.funcs = {}; fljs.addMethods(fljs.swf.act.Globals, { get_Mouse: function () { return this.Mouse }, get_Sound: function () { return this.Sound }, get_System: function () { return this.System }, get_Math: function () { return this.Math }, get_setInterval: function () { return { Type: 10, Value: fljs.bind(this.setInterval, this) } }, get_clearInterval: function () { return { Type: 10, Value: fljs.bind(this.clearInterval, this) } }, setInterval: function () { var a = fljs.Player.getInstance().interpreter, b; b = []; switch (arguments[0].Type) { case 10: b = [arguments[0].Value, null]; for (var c = 2; c < arguments.length; c++) b.push(arguments[c]); a = fljs.bind.apply(null, b); b = arguments[1].Value; b = [a, b]; break; case 11: b = []; for (c = 3; c < arguments.length; c++) b.push(arguments[c]); a = fljs.bind(a.callMethod, a, null, arguments[0], arguments[1], b); b = arguments[2].Value; b = [a, b]; break; case 12: b = []; for (c = 2; c < arguments.length; c++) b.push(arguments[c]); a = fljs.bind(a.callFunction, a, null, arguments[0], null, b); b = arguments[1].Value; b = [a, b]; break } return { Type: 1, Value: setInterval.apply(null, b) } }, clearInterval: function (a) { clearInterval(a.Value) } }); flash.display.Document = function () { flash.display.MovieClip.call(this) }; fljs.inherits(flash.display.Document, flash.display.MovieClip); fljs.player.AbsTimeSync = function (a) { this.frameRate = a }; fljs.addMethods(fljs.player.AbsTimeSync, { start: function () { this.frameCount = 1; this.frameStart = 0; this.startAt = +new Date }, delay: function () { this.frameCount++; return 1E3 * (this.frameCount - this.frameStart) / this.frameRate - (+new Date - this.startAt) } }); fljs.player.AudioSync = function (a) { this.frameRate = a; this.oneFrame = 1E3 / this.frameRate; this.audio = null; this.frames = {}; this.timeSync = new fljs.player.AbsTimeSync(a) }; fljs.addMethods(fljs.player.AudioSync, { setAudio: function (a) { this.audio = a; this.audio.setSync(this) }, setFrameTime: function (a, b) { this.frames[a] = b }, start: function (a) { if (this.audio.frameShouldPlay(a) && typeof this.frames[a] != "undefined") this.audioSync = true; else { this.timeSync.start(); this.audioSync = false } this.lastFrame = a }, stop: function () {}, delay: function (a) { if (a != this.lastFrame + 1) { this.start(a); return this.oneFrame } this.lastFrame = a; if (this.audioSync) if (this.audio.frameShouldPlay(a) && typeof this.frames[a] != "undefined") { expTime = this.audio.currentTime(); time = this.frames[a]; return time - expTime } else { this.timeSync.start(); this.audioSync = false; return this.oneFrame } else if (this.audio.frameShouldPlay(a) && typeof this.frames[a] != "undefined") { this.audioSync = true; return this.oneFrame } else return this.timeSync.delay(a) } }); fljs.enterFrameDispatcher = function () { this.enterFrameListeners = [] }; fljs.addMethods(fljs.enterFrameDispatcher, { addEventListener: function (a, b) { this.enterFrameListeners.push(b) }, removeEventListener: function (a, b) { for (var c in this.enterFrameListeners) this.enterFrameListeners[c] == b && this.enterFrameListeners.splice(c, 1) }, dispatchEvent: function (a) { for (var b in this.enterFrameListeners) this.enterFrameListeners[b](a) } }); fljs.Player = function () { this.muted = this.debug = this.predefine = false; this.playing = true; this.audioId = 1; this.audios = {}; this._volume = 1; this.params = {}; this.renderTextAsGlyphs = false; this.loadExtResources = fljs.agent.browser == "Safari" || fljs.agent.browser == "Firefox" || fljs.agent.browser == "Opera" }; fljs.Player.getInstance = function () { return fljs.Player._instance || (fljs.Player._instance = new fljs.Player) }; fljs.addMethods(fljs.Player, { initialize: function (a) { fljs.debug = this.debug; this.containerElement = a; this.dictionary = {}; this.displayList = []; this.frameNum = -1; this.fontsWithoutInfo = {}; this.fonts = {}; this.fonts2 = {}; this.fonts2ByName = {}; this.fonts2ByStyle = {}; this.sounds = {}; this.tagMap = fljs.swf.tag.tagMap; this.logger = fljs.console("player"); this.dispatcher = new fljs.enterFrameDispatcher; this.buildSvg(); this.assets = {}; this.actionQueue = []; this.initActionQueue = []; this.delayFrame = 0; this.startTime = fljs.now(); this.initTimeoutHandler() }, initTimeoutHandler: function () { this.timeouts = []; this.timeoutMessageName = "fljs-timeout-message"; window.addEventListener("message", fljs.bind(this.timeoutHandler, this), true) }, timeoutHandler: function (a) { if (a.source == window && a.data == this.timeoutMessageName) { a.stopPropagation(); this.timeouts.length > 0 && this.timeouts.shift()() } }, setTimeout: function (a) { this.timeouts.push(a); window.postMessage(this.timeoutMessageName, "*") }, buildSvg: function () { for (var a = this.containerElement.firstChild, b; a;) { if (a.nodeName == "SVG") { b = new fljs.dom.Element(a); break } a = a.nextSibling } if (!a) { for (var a = this.containerElement.firstChild, b; a;) { b = a.nextSibling; this.containerElement.removeChild(a); a = b }; b = new fljs.dom.Element; b.create(fljs.dom.Namespace.Svg, "svg") } b.set(null, "overflow", "hidden"); b.sets([[null, "width", this.containerElement.offsetWidth], [null, "height", this.containerElement.offsetHeight], [null, "stroke-linecap", "round"], [null, "stroke-linejoin", "round"], [null, "fill-rule", "evenodd"], [null, "clip-rule", "evenodd"]]); if (fljs.agent.OS == "iPhone" || fljs.agent.OS == "iPad") b.sets([[null, "color-rendering", "optimizeSpeed"], [null, "image-rendering", "optimizeSpeed"]]); b.update(); this.svg = this.element = this.element_ = b; a || this.containerElement.appendChild(b.element); b = this.defs = new fljs.dom.Element; b.create(fljs.dom.Namespace.Svg, "defs"); this.svg.append(b) }, createStage: function () { new flash.display.DisplayObject; this.stage = new flash.display.Stage; this.stage.setParent(this); this.svg.append(this.stage._clipElement); this.stage.initialize(); this.stage.setFrameRate(this.header.FrameRate) }, addDefinition: function (a, b) { this.dictionary[b] = a }, defineFont: function (a, b, c) { this.fonts[a] = { glyphCount: b, element: c }; this.defs.element.appendChild(c) }, defineFont2: function (a, b, c, d, e, f, g, j) { this.fonts2[a] = { glyphCount: b, element: c, name: d, bold: e, italic: f, codeTable: g, tag: j }; this.fonts2ByName[d] = a; this.fonts2ByStyle[[d, e, f].toString()] = a; for (var h in c) this.defs.append(c[h]) }, lookupFontByName: function (a) { return "font-" + String(this.fonts2ByName[a]) }, lookupFontByStyle: function (a, b, c) { a = [a, b, c].toString(); return "font-" + String(this.fonts2ByStyle[a]) }, addToDisplayList: function (a, b) { this.displayList[b] = a }, loadSwf: function (a, b, c, d, e, f) { b.style.width = c + "px"; b.style.height = d + "px"; this.name = e; for (var g in f) this.params[g] = f[g]; this.initialize(b); (new fljs.swf.SwfLoader).load(a, fljs.bind(this.readSwf, this)) }, readSwf: function (a) { this.parser = new fljs.swf.DefinitionParser(a.stream.buffer); this.readHeader(); this.createStage(); this.buildMainTimeline(); this.interpreter = new fljs.swf.act.ActionInterpreter(this); this.sync = new fljs.player.AbsTimeSync(this.header.FrameRate); this.sync.start(); this.enterFrame() }, showFrame: function () { delay = this.sync.delay(this.mainTimeline.currentFrameIndex_, this.delayFrame); delay = Math.max(0, delay); this.lastFrameAt = fljs.now(); this.waitingOnFrame = true; if (fljs.agent.browser == "Opera") { this.element.getElement().setAttributeNS(null, "fill-color", "red"); this.element.getElement().setAttributeNS(null, "fill-color", "none") } var a = fljs.bind(this.enterFrame, this, this.frameNum); delay >= 10 ? setTimeout(a, delay) : this.setTimeout(a) }, enterFrame: function (a) { if (!this.delayFrame) { this.logger.info("player frame#" + a); this.waitingOnFrame = false; if (!this.playing) return; this.frameNum += 1; var b; if (this.element.getElement().suspendRedraw) b = this.element.getElement().suspendRedraw(100); this.dispatcher.dispatchEvent(new flash.events.Event(flash.events.Event.ENTER_FRAME)); this.parser.readSomeTags(this); this.doActionQueue(); this.element.getElement().unsuspendRedraw && this.element.getElement().unsuspendRedraw(b) } this.showFrame() }, doActions: function (a, b) { this.actionQueue.push({ target: this.containingDispObj(a).getAs2Object(), actions: b }) }, doInitAction: function (a) { this.initActionQueue.push({ target: null, actions: a.Actions }) }, containingDispObj: function (a) { for (; !(a instanceof flash.display.MovieClip && !a.getEnabled());) a = a.getParent(); return a }, doActionQueue: function () { for (var a in this.initActionQueue) { var b = this.initActionQueue[a]; this.interpreter.eval(null, b.actions) } this.initActionQueue = []; for (a in this.actionQueue) { b = this.actionQueue[a]; this.interpreter.eval(b.target, b.actions) } this.actionQueue = [] }, readHeader: function () { var a = this.parser.readHeader(); this.header = a; this.swfVersion = a.Version; var b = a.FrameSize.Xmin, c = a.FrameSize.Ymin; this.svg.sets([[null, "viewBox", [b, c, a.FrameSize.Xmax - b, a.FrameSize.Ymax - c].join(" ")], [null, "preserveAspectRatio", "none"]]); this.svg.update() }, buildMainTimeline: function () { var a = new flash.display.Document; a.setName("_root"); a.__frameNum = 0; var b = new flash.display.Scene; b.labels = []; b.name = "Scene 1"; b.numFrames = this.header.FrameCount; a.frameData_ = []; for (var c = 0; c < this.header.FrameCount; c++) a.frameData_.push({ scripts: [], parts: [], tags: [], label: "" }); a.labels_ = {}; a.sceneIndices_ = {}; a.currentSceneIndex_ = 0; a.scenes_ = [b]; a.currentFrameIndex_ = 0; a.currentLabel_ = null; a._enabled = false; a.framesLoaded_ = 0; a.totalFrames_ = this.header.FrameCount; a.next_ = null; a.playing_ = true; a.__bytesLoaded = this.parser.reader.stream.stream.byteIndex; a.__bytesTotal = this.header.FileLength; this.mainTimeline = a; b = a.getAs2Object(); for (c in this.params) b.set(c, { Type: 0, Value: this.params[c] }); this.stage.addChild(a); a.onCreate() }, play: function () { if (!this.playing) { for (var a in this.audios) { var b = this.audios[a]; b.fljsPlaying && b.play() } this.playing = true; this.setPlayingControl(); this.waitingOnFrame || this.enterFrame() } }, pause: function () { if (this.playing) { this.playing = false; this.setPlayingControl(); for (var a in this.audios) this.audios[a].pause() } }, mute: function () { this.prevVolume = this.getVolume(); this.setVolume(0); this.setVolumeControl(); for (var a in this.audios) this.audioSetVolume(this.audios[a]) }, unmute: function () { this.setVolume(this.prevVolume); this.setVolumeControl(); for (var a in this.audios) this.audioSetVolume(this.audios[a]) }, allocAudio: function () { var a = new Audio, b = this; a.addEventListener("loadedmetadata", function () { b.audioSetVolume(a) }, false); a.fljsPlay = a.play; a.play = function () { a.fljsPlaying = true; b.playing && a.fljsPlay() }; a.fljsId = this.audioId++; return this.audios[a.fljsId] = a }, releaseAudio: function (a) { delete this.audios[a.fljsId] }, audioSetVolume: function (a) { if (!a.fljsWaiting) { a.volume = Math.max(0, Math.min(this._volume + 0.0010, 1)); a.volume = Math.max(0, Math.min(this._volume, 1)) } }, buildControls: function (a) { if (fljs.agent.browser != "Explorer") { var b = a.ownerDocument, c = b.createElement("input"); c.setAttribute("type", "button"); var d = this; c.addEventListener("click", function () { d.playing ? d.pause() : d.play() }, true); a.appendChild(c); b = b.createElement("input"); b.setAttribute("type", "button"); b.addEventListener("click", function () { d.getVolume() > 0 ? d.mute() : d.unmute() }, true); a.appendChild(b); this.controls = { playing: c, volume: b }; this.setPlayingControl(); this.setVolumeControl() } }, setPlayingControl: function () { if (this.controls) this.controls.playing.value = this.playing ? "pause" : "play" }, setVolumeControl: function () { if (this.controls) this.controls.volume.value = this.muted ? "unmute" : "mute" }, getVolume: function () { return this._volume == 0.999 ? 1 : this._volume }, setSolume: function (a) { this.prevVolume = this._volume; this._volume = a; this.muted = this._volume == 0; if (this._volume == 1) this._volume = 0.999; this.setVolumeControl() } }); fljs.base64 = {}; fljs.base64.chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; fljs.base64.atob = function (a) { for (var b = a.length, c = [], d = 0, e, f, g, j, h, m = fljs.base64.chars; d < b;) { e = m.indexOf(a.charAt(d++)); f = m.indexOf(a.charAt(d++)); g = m.indexOf(a.charAt(d++)); j = m.indexOf(a.charAt(d++)); e = e << 2 | f >> 4; f = (f & 15) << 4 | g >> 2; h = (g & 3) << 6 | j; c.push(String.fromCharCode(4096 | e)); g != 64 && c.push(String.fromCharCode(4096 | f)); j != 64 && c.push(String.fromCharCode(4096 | h)) } String(c.join("")) }; fljs.swf.SwfLoader = function () { var a; this.complete = false; try { a = new XMLHttpRequest } catch (b) { a = false } if (!a) return null; this.xmlhttp = a }; fljs.addMethods(fljs.swf.SwfLoader, { load: function (a, b) { if (fljs.agent.browser == "Explorer" || fljs.agent.browser == "Opera") a += ".b64"; this.logger = fljs.console("demo"); this.complete = false; try { this.xmlhttp.overrideMimeType && this.xmlhttp.overrideMimeType("text/plain; charset=x-user-defined"); this.xmlhttp.open("GET", a, true); this.xmlhttp.onreadystatechange = fljs.bind(this.onLoad, this, b); this.xmlhttp.send(null) } catch (c) { return false } return true }, onLoad: function (a) { if (!(this.xmlhttp.readyState != 4 || this.complete)) { this.complete = true; var b; b = fljs.agent.browser == "Explorer" ? fljs.base64.atob(this.xmlhttp.responseText) : fljs.agent.browser == "Opera" ? window.atob(this.xmlhttp.responseText) : this.xmlhttp.responseText; b = new fljs.swf.StringStream(b); b = new fljs.swf.SwfStream(b); a(b) } } }); var player = fljs.Player.getInstance(); player.loadSwf(url, element, width, height, name, params); return player }