www.gusucode.com > xmxx 微信朋友圈小游戏源码程序 > xmxx/targets/main-html.js

    "use strict";
(function() {
    function e(e, t) {
        function n() {}
        n.prototype = e;
        var r = new n,
            i;
        for (i in t) r[i] = t[i];
        t.toString !== Object.prototype.toString && (r.toString = t.toString);
        return r
    }

    function t(e) {
        return e instanceof Array ? function() {
            return l.iter(e)
        } : "function" == typeof e.iterator ? n(e, e.iterator) : e.iterator
    }

    function n(e, t) {
        if (null == t) return null;
        null == t.__id__ && (t.__id__ = Qn++);
        var n;
        null == e.hx__closures__ ? e.hx__closures__ = {} : n = e.hx__closures__[t.__id__];
        null == n && (n = function() {
            return n.method.apply(n.scope, arguments)
        }, n.scope = e, n.method = t, e.hx__closures__[t.__id__] = n);
        return n
    }
    var r = {},
        i = function() {
            return In.__string_rec(this, "")
        },
        s = function(e, t) {
            t = t.split("u").join("");
            this.r = RegExp(e, t)
        };
    r.EReg = s;
    s.__name__ = ["EReg"];
    s.prototype = {
        match: function(e) {
            this.r.global && (this.r.lastIndex = 0);
            this.r.m = this.r.exec(e);
            this.r.s = e;
            return null != this.r.m
        },
        matched: function(e) {
            if (null != this.r.m && 0 <= e && e < this.r.m.length) return this.r.m[e];
            throw "EReg::matched"
        },
        matchedPos: function() {
            if (null == this.r.m) throw "No string matched";
            return {
                pos: this.r.m.index,
                len: this.r.m[0].length
            }
        },
        split: function(e) {
            return e.replace(this.r, "#__delim__#").split("#__delim__#")
        },
        __class__: s
    };
    var o = function() {};
    r.G = o;
    o.__name__ = ["G"];
    o.saveHiScore = function(e) {
        e > o.HI_SCORE && (o.HI_SCORE = e, Kn.saveData("hi_score", o.HI_SCORE))
    };
    o.loadHiScore = function() {
        var e = Kn.loadData("hi_score");
        o.HI_SCORE = 0 < e ? e : 0
    };
    var u = function(e, t) {
        null == t && (t = 0);
        null == e && (e = 0);
        this.x = e;
        this.y = t
    };
    r["flambe.math.Point"] = u;
    u.__name__ = ["flambe", "math", "Point"];
    u.prototype = {
        __class__: u
    };
    var a = function(e, t, n) {
        a.ref = this;
        this.rootRef = e;
        this.width = t;
        this.height = n;
        a.offsetX = (Kn.width - t * (a.pieceWidth + a.gap)) / 2 + a.pieceWidth / 2 | 0;
        e = [];
        t = 0;
        for (n = this.height; t < n;) t++, e.push(function(e) {
            for (var t = [], n = 0, e = e.width; n < e;) n++, t.push(null);
            return t
        }(this));
        this.grid = e;
        f.canMakeAction = !0
    };
    r.Grid = a;
    a.__name__ = ["Grid"];
    a.prototype = {
        addRandPiece: function(e, t) {
            return new f(e, t, m.random(a.pieceTypes))
        },
        addBonusPieceAt: function(e, t) {
            var n = new f(t, 0, a.pieceTypes + e);
            return this.grid[0][t] = n
        },
        addRandRows: function(e) {
            for (var t = this.grid.length - 1, e = t - e; t > e;) {
                for (var n = 0, r = this.grid[t].length; n < r;) {
                    var i = n++;
                    this.grid[t][i] = this.addRandPiece(i, t)
                }
                t--
            }
        },
        getPiecesOfType: function(e) {
            for (var t = [], n = 0, r = this.grid.length; n < r;)
                for (var i = n++, s = 0, o = this.grid[i].length; s < o;) {
                    var u = s++;
                    null != this.grid[i][u] && this.grid[i][u].type == e && t.push(this.grid[i][u])
                }
            return t
        },
        pushPiecesUp: function() {
            var e = this.getPiecesAtTop();
            if (0 < e.length)
                for (var t = 0, n = e.length; t < n;) {
                    var r = t++;
                    if (!(e[r].type > a.pieceTypes - 1)) return !1
                }
            e = 0;
            for (t = this.grid.length; e < t;)
                for (var n = e++, r = 0, i = this.grid[n].length; r < i;) {
                    var s = r++;
                    null != this.grid[n][s] && (0 != n ? (this.grid[n - 1][s] = this.grid[n][s], this.grid[n - 1][s].gridY = n - 1, this.grid[n - 1][s].tweenOnPushUp(), this.grid[n][s] = null) : this.grid[n][s].type > a.pieceTypes - 1 && (this.grid[n][s].tweenOnBonusDeath(), this.grid[n][s] = null))
                }
            this.getPiecesAtTop();
            return !0
        },
        getPiecesAtTop: function() {
            for (var e = [], t = 0, n = this.grid[0].length; t < n;) {
                var r = t++;
                null != this.grid[0][r] && (e.push(this.grid[0][r]), this.grid[0][r].tweenOnTop())
            }
            return e
        },
        coordsInGrid: function(e, t) {
            return 0 <= e && 0 <= t && e < this.width && t < this.height
        },
        getPiece: function(e, t) {
            return this.coordsInGrid(e, t) && null != this.grid[t][e] ? this.grid[t][e] : null
        },
        neighbourOf: function(e, t) {
            var n = e.relativeCoordinates(t, 1);
            return this.getPiece(n.x | 0, n.y | 0)
        },
        neighboursOf: function(e) {
            for (var t = [], n = 0, r = a.dirs.length; n < r;) {
                var i = n++;
                t.push(this.neighbourOf(e, a.dirs[i]))
            }
            return t
        },
        getDeepMatches: function(e) {
            null == e && (e = 2);
            for (var t = [], n = [], r = 0, i = this.grid.length; r < i;)
                for (var s = this.grid[r++], o = 0, u = s.length; o < u;) {
                    var a = o++,
                        f = s[a];
                    if (null != f && -1 == c.indexOf(t, f)) {
                        for (var a = f.deepMatchingNeighbours(), l = 0, h = a.length; l < h;) {
                            var p = l++;
                            t.push(a[p])
                        }
                        if (a.length >= e && null != f) {
                            f = 0;
                            for (l = a.length; f < l;) h = f++, n.push(a[h])
                        }
                    }
                }
            return n
        },
        applyGravityDown: function() {
            for (var e = this.grid.length - 1, t = []; 0 < e;) {
                for (var n = this.grid[e], r = 0, i = n.length; r < i;) {
                    var s = r++;
                    if (null == n[s])
                        for (var o = e; 0 < o;) o--, null != this.grid[o][s] && (this.grid[e][s] = this.grid[o][s], this.grid[e][s].gridY = e, t.push(this.grid[e][s]), this.grid[o][s] = null, o = 0)
                }
                e--
            }
            return t
        },
        slideToLeft: function() {
            for (var e = this.grid[this.grid.length - 1], t = 0, n = [], r = 0, i = e.length; r < i;) {
                var s = r++;
                if (null == e[s] && s != e.length - 1 && (t++, null != e[s + 1])) {
                    for (var s = s + 1, o = e[s]; null != o;) {
                        for (var o = 0, u = this.grid.length; o < u;) {
                            var a = o++;
                            null != this.grid[a][s] && (this.grid[a][s - t] = this.grid[a][s], this.grid[a][s - t].gridX = s - t, n.push(this.grid[a][s - t]), this.grid[a][s] = null)
                        }
                        s++;
                        o = e[s]
                    }
                    t = 0
                }
            }
            return n
        },
        clear: function() {
            for (var e = 0, t = this.grid.length; e < t;)
                for (var n = e++, r = 0, i = this.grid[n].length; r < i;) {
                    var s = r++;
                    null != this.grid[n][s] && this.grid[n][s].tweenOnGameOver();
                    this.grid[n][s] = null
                }
        },
        clear2: function() {
            for (var e = 0, t = this.grid.length; e < t;)
                for (var n = e++, r = 0, i = this.grid[n].length; r < i;) {
                    var s = r++;
                    null != this.grid[n][s] && this.grid[n][s].tweenOnLevelEnd();
                    this.grid[n][s] = null
                }
        },
        __class__: a
    };
    var f = function(e, t, n) {
        this.gridX = e;
        this.gridY = t;
        this.type = n;
        this.init()
    };
    r.Piece = f;
    f.__name__ = ["Piece"];
    f.prototype = {
        init: function() {
            var e = this;
            f.canMakeAction = !0;
            this.pieceEnt = Kn.addImageSprite(a.ref.rootRef, this.getX(), this.initY(), "bl" + this.type);
            this.pieceEnt.add(new yn);
            this.pieceEnt._compMap.Disposer_2.connect1(this.pieceEnt._compMap.Sprite_0.get_pointerUp(), n(this, this.onPointerUp));
            null == f.actionSequence && (f.actionSequence = new wn, f.actionSequence.add(new dn(function() {
                f.canMakeAction = !1;
                for (var e = a.ref.applyGravityDown(), t = 0, n = e.length; t < n;) {
                    var r = t++;
                    e[r].tweenOnGravityDown()
                }
            })), f.actionSequence.add(new vn(.1)), f.actionSequence.add(new dn(function() {
                for (var t = a.ref.slideToLeft(), n = 0, r = t.length; n < r;) {
                    var i = n++;
                    t[i].tweenOnSlideLeft()
                }
                e.showBonusInfo()
            })), f.actionSequence.add(new dn(function() {
                a.ref.rootRef._compMap.GameSceneComp_7.checkForMatches()
            })), f.actionSequence.add(new dn(function() {
                f.canMakeAction = !0
            })));
            this.tweenOnInit();
            this.showBonusInfo()
        },
        onPointerUp: function() {
            if (f.canMakeAction)
                if (this.type > a.pieceTypes - 1) this.activateBonus3(this.type - a.pieceTypes);
                else {
                    var e = this.deepMatchingNeighbours();
                    if (0 < e.length) {
                        $n.playSfx("pop_sfx");
                        for (var t = 0, n = e.length; t < n;) {
                            var r = t++;
                            this.tweenOnRemove(e[r])
                        }
                        this.updateGrid(e);
                        e.length > a.minMatchForBonus - 1 && this.addBonus(Kn.rand(a.pieceTypes))
                    } else this.tweenShake()
                }
        },
        updateGrid: function(e, t) {
            null == t && (t = !1);
            var n = e.length,
                r = 10 * n * n * n - 10 * n;
            t && (r = 10 * n * n);
            a.ref.rootRef._compMap.GameSceneComp_7.updateScore(r);
            var i;
            i = Kn.addLabel(a.ref.rootRef, this.getX(), this.getY(), "+" + r, 1.2, 1, !0)._compMap.Sprite_0;
            Jn.to(i, .5, {
                y: i.y._value - 45
            }, 0, function() {
                i.dispose()
            }, F.cubeOut);
            a.ref.rootRef._compMap.Script_3.run(f.actionSequence)
        },
        addBonus: function(e) {
            var t = this;
            a.ref.rootRef._compMap.Script_3.run(new wn([new vn(.1), new dn(function() {
                a.ref.addBonusPieceAt(e, t.gridX);
                a.ref.rootRef._compMap.Script_3.run(f.actionSequence)
            })]))
        },
        activateBonus3: function(e) {
            e = a.ref.getPiecesOfType(e);
            if (0 == e.length) this.tweenShake();
            else {
                for (var t = 0, n = e.length; t < n;) {
                    var r = t++;
                    this.tweenOnRemove(e[r])
                }
                this.tweenOnRemove(this);
                $n.playSfx("bonus_sfx", 1);
                a.ref.rootRef._compMap.Script_3.run(new En(10, 0, .5));
                this.updateGrid(e, !0)
            }
        },
        showBonusInfo: function() {
            for (var e = [], t = [], n = 0, r = a.ref.grid.length; n < r;)
                for (var i = n++, s = 0, o = a.ref.grid[i].length; s < o;) {
                    var u = s++;
                    if (null != a.ref.grid[i][u]) {
                        a.ref.grid[i][u].pieceEnt.disposeChildren();
                        var f = a.ref.grid[i][u].deepMatchingNeighbours();
                        if (f.length > a.minMatchForBonus - 1 && -1 == c.indexOf(e, a.ref.grid[i][u])) {
                            t.push(a.ref.grid[i][u]);
                            for (var u = 0, l = f.length; u < l;) {
                                var h = u++;
                                e.push(f[h])
                            }
                        }
                    }
                }
            e = 0;
            for (n = t.length; e < n;) r = e++, Kn.addImageSprite(t[r].pieceEnt, (a.pieceWidth / 2 | 0) + 5, a.pieceHeight / 2 | 0, "bonus_marker")
        },
        getX: function() {
            return this.gridX * (a.pieceWidth + a.gap) + (a.gap / 2 | 0) + a.offsetX
        },
        getY: function() {
            return this.gridY * (a.pieceHeight + a.gap) + (a.gap / 2 | 0) + a.offsetY
        },
        initY: function() {
            return this.type < a.pieceTypes ? this.getY() + Kn.height + (a.pieceHeight / 2 | 0) - a.offsetY : -100
        },
        tweenOnInit: function() {
            this.pieceEnt._compMap.Sprite_0.y.animateTo(this.getY(), .4, F.bounceIn)
        },
        tweenOnRemove: function(e) {
            this.removeJitterBehavior();
            a.ref.grid[e.gridY][e.gridX] = null;
            e.pieceEnt._compMap.Sprite_0.setAlpha(.7);
            Jn.to(e.pieceEnt._compMap.Sprite_0, .4, {
                alpha: .5,
                scaleX: 0,
                scaleY: 0
            }, 0, function() {
                e.pieceEnt.dispose()
            }, F.backIn)
        },
        tweenOnBonusDeath: function() {
            var e = this;
            this.removeJitterBehavior();
            this.pieceEnt._compMap.Sprite_0.setAlpha(.7);
            this.pieceEnt._compMap.Sprite_0.y.animateTo(Kn.height + 100, 1, F.backIn);
            Jn.to(this.pieceEnt._compMap.Sprite_0, 3, {
                rotation: 720
            }, 0, function() {
                e.pieceEnt.dispose()
            }, F.backIn)
        },
        tweenOnLevelEnd: function() {
            f.canMakeAction = !1
        },
        tweenOnGameOver: function() {
            var e = this;
            this.removeJitterBehavior();
            f.canMakeAction = !1;
            Jn.to(this.pieceEnt._compMap.Sprite_0, .4, {
                y: this.getY() - 20
            }, 0, function() {
                e.pieceEnt._compMap.Sprite_0.y.animateTo(Kn.height + 100, 1, F.backIn);
                e.pieceEnt._compMap.Sprite_0.rotation.animateTo(720 * Kn.randSign(), 3, F.quadIn)
            }, F.backIn)
        },
        tweenOnTop: function() {
            var e = this;
            this.type > a.pieceTypes - 1 || this.pieceEnt._compMap.Script_3.run(new wn([new vn(.6), new dn(function() {
                e.pieceEnt._compMap.Sprite_0.x.set_behavior(new I(e.getX(), 2));
                e.pieceEnt._compMap.Sprite_0.y.set_behavior(new I(e.getY(), 2));
                if (null == a.ref.rootRef.firstChild.firstChild) {
                    var t;
                    t = Kn.addFillSprite(a.ref.rootRef.firstChild, 0, 0, 16711680, Kn.width, Kn.height, .2, !1)._compMap.Sprite_0;
                    Kn.addDelay(t.owner, .2, function() {.2 == t.alpha._value ? t.alpha.set__(0) : t.alpha.set__(.2)
                    }, !0)
                }
            })]))
        },
        removeJitterBehavior: function() {
            this.pieceEnt._compMap.Script_3.stopAll();
            this.pieceEnt._compMap.Sprite_0.x.set_behavior(null);
            this.pieceEnt._compMap.Sprite_0.y.set_behavior(null);
            0 == a.ref.getPiecesAtTop().length && null != a.ref.rootRef.firstChild.firstChild && a.ref.rootRef.firstChild.disposeChildren()
        },
        tweenOnSlideLeft: function() {
            var e = this;
            f.canMakeAction = !1;
            this.pieceEnt._compMap.Sprite_0.x.animateTo(this.getX(), .4, F.backInOut);
            Jn.to(this.pieceEnt._compMap.Sprite_0, .1, {
                rotation: 10,
                scaleX: .7
            }, .1, function() {
                Jn.to(e.pieceEnt._compMap.Sprite_0, .15, {
                    rotation: 0,
                    scaleX: 1
                }, 0, null, F.backOut)
            }, F.backIn)
        },
        tweenOnPushUp: function() {
            f.canMakeAction = !1;
            Jn.to(this.pieceEnt._compMap.Sprite_0, .4, {
                y: this.getY()
            }, 0, function() {
                f.canMakeAction = !0
            }, F.backIn)
        },
        tweenOnGravityDown: function() {
            var e = this;
            this.removeJitterBehavior();
            this.pieceEnt._compMap.Sprite_0.y.animateTo(this.getY(), .4, F.backIn);
            Jn.to(this.pieceEnt._compMap.Sprite_0, .15, {
                scaleX: 1.2,
                scaleY: .7
            }, .1, function() {
                Jn.to(e.pieceEnt._compMap.Sprite_0, .25, {
                    scaleX: 1,
                    scaleY: 1
                }, 0, null, F.backInOut)
            }, F.bounceInOut)
        },
        tweenShake: function() {
            $n.playSfx("no_match_sfx", .5);
            this.pieceEnt._compMap.Sprite_0.x.set__(this.getX());
            this.pieceEnt._compMap.Sprite_0.y.set__(this.getY());
            this.pieceEnt._compMap.Script_3.run(new En(10, 0, .3))
        },
        relativeCoordinates: function(e, t) {
            return new u(this.gridX + t * e.x, this.gridY + t * e.y)
        },
        neighbours: function() {
            return a.ref.neighboursOf(this)
        },
        matchingNeighbours: function() {
            for (var e = [], t = this.neighbours(), n, r = 0, i = t.length; r < i;) n = r++, n = t[n], null != n && n.type == this.type && this.type < a.pieceTypes && e.push(n);
            return e
        },
        deepMatchingNeighbours: function() {
            var e = [],
                t = null,
                t = function(n) {
                    for (var n = n.matchingNeighbours(), r = 0, i = n.length; r < i;) {
                        var s = r++,
                            s = n[s]; - 1 == c.indexOf(e, s) && (e.push(s), t(s))
                    }
                };
            t(this);
            return e
        },
        __class__: f
    };
    var l = function() {};
    r.HxOverrides = l;
    l.__name__ = ["HxOverrides"];
    l.dateStr = function(e) {
        var t = e.getMonth() + 1,
            n = e.getDate(),
            r = e.getHours(),
            i = e.getMinutes(),
            s = e.getSeconds();
        return e.getFullYear() + "-" + (10 > t ? "0" + t : "" + t) + "-" + (10 > n ? "0" + n : "" + n) + " " + (10 > r ? "0" + r : "" + r) + ":" + (10 > i ? "0" + i : "" + i) + ":" + (10 > s ? "0" + s : "" + s)
    };
    l.strDate = function(e) {
        switch (e.length) {
            case 8:
                var e = e.split(":"),
                    t = new Date;
                t.setTime(0);
                t.setUTCHours(e[0]);
                t.setUTCMinutes(e[1]);
                t.setUTCSeconds(e[2]);
                return t;
            case 10:
                return e = e.split("-"), new Date(e[0], e[1] - 1, e[2], 0, 0, 0);
            case 19:
                return t = e.split(" "), e = t[0].split("-"), t = t[1].split(":"), new Date(e[0], e[1] - 1, e[2], t[0], t[1], t[2]);
            default:
                throw "Invalid date format : " + e
        }
    };
    l.cca = function(e, t) {
        var n = e.charCodeAt(t);
        return n != n ? void 0 : n
    };
    l.substr = function(e, t, n) {
        if (null != t && 0 != t && null != n && 0 > n) return "";
        null == n && (n = e.length);
        0 > t ? (t = e.length + t, 0 > t && (t = 0)) : 0 > n && (n = e.length + n - t);
        return e.substr(t, n)
    };
    l.remove = function(e, t) {
        var n = e.indexOf(t);
        if (-1 == n) return !1;
        e.splice(n, 1);
        return !0
    };
    l.iter = function(e) {
        return {
            cur: 0,
            arr: e,
            hasNext: function() {
                return this.cur < this.arr.length
            },
            next: function() {
                return this.arr[this.cur++]
            }
        }
    };
    var c = function() {};
    r.Lambda = c;
    c.__name__ = ["Lambda"];
    c.array = function(e) {
        for (var n = [], e = t(e)(); e.hasNext();) {
            var r = e.next();
            n.push(r)
        }
        return n
    };
    c.count = function(e, n) {
        var r = 0;
        if (null == n)
            for (var i = t(e)(); i.hasNext();) i.next(), r++;
        else
            for (i = t(e)(); i.hasNext();) {
                var s = i.next();
                n(s) && r++
            }
        return r
    };
    c.indexOf = function(e, n) {
        for (var r = 0, i = t(e)(); i.hasNext();) {
            var s = i.next();
            if (n == s) return r;
            r++
        }
        return -1
    };
    var h = function() {
        this.length = 0
    };
    r.List = h;
    h.__name__ = ["List"];
    h.prototype = {
        add: function(e) {
            e = [e];
            null == this.h ? this.h = e : this.q[1] = e;
            this.q = e;
            this.length++
        },
        iterator: function() {
            return {
                h: this.h,
                hasNext: function() {
                    return null != this.h
                },
                next: function() {
                    if (null == this.h) return null;
                    var e = this.h[0];
                    this.h = this.h[1];
                    return e
                }
            }
        },
        __class__: h
    };
    var p = function() {};
    r.Main = p;
    p.__name__ = ["Main"];
    p.main = function() {
        P.init();
        Kn.systemBgColor = 5459013;
        (new Kn(640, 960)).init.connect(p.onInit).once()
    };
    p.onInit = function() {
        o.loadHiScore();
        Kn.buttonClickSfx = "button_click_sfx";
        Kn.goToScene((new Xn).root)
    };
    var d = function() {};
    r.IMap = d;
    d.__name__ = ["IMap"];
    Math.__name__ = ["Math"];
    var v = function() {};
    r.Reflect = v;
    v.__name__ = ["Reflect"];
    v.field = function(e, t) {
        try {
            return e[t]
        } catch (n) {
            return null
        }
    };
    v.getProperty = function(e, t) {
        var n;
        return null == e ? null : e.__properties__ && (n = e.__properties__["get_" + t]) ? e[n]() : e[t]
    };
    v.callMethod = function(e, t, n) {
        return t.apply(e, n)
    };
    v.fields = function(e) {
        var t = [];
        if (null != e) {
            var n = Object.prototype.hasOwnProperty,
                r;
            for (r in e) "__id__" != r && "hx__closures__" != r && n.call(e, r) && t.push(r)
        }
        return t
    };
    v.isFunction = function(e) {
        return "function" == typeof e && !(e.__name__ || e.__ename__)
    };
    v.deleteField = function(e, t) {
        if (!Object.prototype.hasOwnProperty.call(e, t)) return !1;
        delete e[t];
        return !0
    };
    var m = function() {};
    r.Std = m;
    m.__name__ = ["Std"];
    m.is = function(e, t) {
        return In.__instanceof(e, t)
    };
    m.string = function(e) {
        return In.__string_rec(e, "")
    };
    m["int"] = function(e) {
        return e | 0
    };
    m.parseInt = function(e) {
        var t = parseInt(e, 10);
        if (0 == t && (120 == l.cca(e, 1) || 88 == l.cca(e, 1))) t = parseInt(e);
        return isNaN(t) ? null : t
    };
    m.parseFloat = function(e) {
        return parseFloat(e)
    };
    m.random = function(e) {
        return 0 >= e ? 0 : Math.floor(Math.random() * e)
    };
    var g = function() {
        this.b = ""
    };
    r.StringBuf = g;
    g.__name__ = ["StringBuf"];
    g.prototype = {
        add: function(e) {
            this.b += m.string(e)
        },
        __class__: g
    };
    var y = function() {};
    r.StringTools = y;
    y.__name__ = ["StringTools"];
    y.startsWith = function(e, t) {
        return e.length >= t.length && l.substr(e, 0, t.length) == t
    };
    y.replace = function(e, t, n) {
        return e.split(t).join(n)
    };
    y.fastCodeAt = function(e, t) {
        return e.charCodeAt(t)
    };
    var b = r.ValueType = {
        __ename__: ["ValueType"],
        __constructs__: "TNull,TInt,TFloat,TBool,TObject,TFunction,TClass,TEnum,TUnknown".split(",")
    };
    b.TNull = ["TNull", 0];
    b.TNull.toString = i;
    b.TNull.__enum__ = b;
    b.TInt = ["TInt", 1];
    b.TInt.toString = i;
    b.TInt.__enum__ = b;
    b.TFloat = ["TFloat", 2];
    b.TFloat.toString = i;
    b.TFloat.__enum__ = b;
    b.TBool = ["TBool", 3];
    b.TBool.toString = i;
    b.TBool.__enum__ = b;
    b.TObject = ["TObject", 4];
    b.TObject.toString = i;
    b.TObject.__enum__ = b;
    b.TFunction = ["TFunction", 5];
    b.TFunction.toString = i;
    b.TFunction.__enum__ = b;
    b.TClass = function(e) {
        e = ["TClass", 6, e];
        e.__enum__ = b;
        e.toString = i;
        return e
    };
    b.TEnum = function(e) {
        e = ["TEnum", 7, e];
        e.__enum__ = b;
        e.toString = i;
        return e
    };
    b.TUnknown = ["TUnknown", 8];
    b.TUnknown.toString = i;
    b.TUnknown.__enum__ = b;
    var w = function() {};
    r.Type = w;
    w.__name__ = ["Type"];
    w.getClassName = function(e) {
        return e.__name__.join(".")
    };
    w.getEnumName = function(e) {
        return e.__ename__.join(".")
    };
    w.resolveClass = function(e) {
        e = r[e];
        return null == e || !e.__name__ ? null : e
    };
    w.resolveEnum = function(e) {
        e = r[e];
        return null == e || !e.__ename__ ? null : e
    };
    w.createEmptyInstance = function(e) {
        function t() {}
        t.prototype = e.prototype;
        return new t
    };
    w.createEnum = function(e, t, n) {
        var r = v.field(e, t);
        if (null == r) throw "No such constructor " + t;
        if (v.isFunction(r)) {
            if (null == n) throw "Constructor " + t + " need parameters";
            return r.apply(e, n)
        }
        if (null != n && 0 != n.length) throw "Constructor " + t + " does not need parameters";
        return r
    };
    w.getEnumConstructs = function(e) {
        return e.__constructs__.slice()
    };
    w["typeof"] = function(e) {
        switch (typeof e) {
            case "boolean":
                return b.TBool;
            case "string":
                return b.TClass(String);
            case "number":
                return Math.ceil(e) == e % 2147483648 ? b.TInt : b.TFloat;
            case "object":
                if (null == e) return b.TNull;
                var t = e.__enum__;
                if (null != t) return b.TEnum(t);
                e = e instanceof Array && null == e.__enum__ ? Array : e.__class__;
                return null != e ? b.TClass(e) : b.TObject;
            case "function":
                return e.__name__ || e.__ename__ ? b.TObject : b.TFunction;
            case "undefined":
                return b.TNull;
            default:
                return b.TUnknown
        }
    };
    var E = function() {};
    r["flambe.util.Disposable"] = E;
    E.__name__ = ["flambe", "util", "Disposable"];
    E.prototype = {
        __class__: E
    };
    var S = function() {};
    r["flambe.Component"] = S;
    S.__name__ = ["flambe", "Component"];
    S.__interfaces__ = [E];
    S.prototype = {
        onAdded: function() {},
        onRemoved: function() {},
        onUpdate: function() {},
        dispose: function() {
            null != this.owner && this.owner.remove(this)
        },
        get_name: function() {
            return null
        },
        init: function(e, t) {
            this.owner = e;
            this.next = t
        },
        __class__: S,
        __properties__: {
            get_name: "get_name"
        }
    };
    var x = function() {
        this._disposables = []
    };
    r["flambe.Disposer"] = x;
    x.__name__ = ["flambe", "Disposer"];
    x.__super__ = S;
    x.prototype = e(S.prototype, {
        get_name: function() {
            return "Disposer_2"
        },
        add: function(e) {
            this._disposables.push(e);
            return this
        },
        connect1: function(e, t) {
            this.add(e.connect(t));
            return this
        },
        onRemoved: function() {
            this.freeDisposables()
        },
        dispose: function() {
            S.prototype.dispose.call(this);
            this.freeDisposables()
        },
        freeDisposables: function() {
            var e = this._disposables;
            this._disposables = [];
            for (var t = 0; t < e.length;) {
                var n = e[t];
                ++t;
                n.dispose()
            }
        },
        __class__: x
    });
    var T = function() {
        this.parent = this.firstChild = this.next = this.firstComponent = null;
        this._compMap = {}
    };
    r["flambe.Entity"] = T;
    T.__name__ = ["flambe", "Entity"];
    T.__interfaces__ = [E];
    T.prototype = {
        add: function(e) {
            null != e.owner && e.owner.remove(e);
            var t = e.get_name(),
                n = this._compMap[t];
            null != n && this.remove(n);
            this._compMap[t] = e;
            t = null;
            for (n = this.firstComponent; null != n;) t = n, n = n.next;
            null != t ? t.next = e : this.firstComponent = e;
            e.init(this, null);
            e.onAdded();
            return this
        },
        remove: function(e) {
            for (var t = null, n = this.firstComponent; null != n;) {
                var r = n.next;
                if (n == e) return null == t ? this.firstComponent = r : t.init(this, r), delete this._compMap[n.get_name()], n.onRemoved(), n.init(null, null), !0;
                t = n;
                n = r
            }
            return !1
        },
        addChild: function(e, t) {
            null == t && (t = !0);
            null != e.parent && e.parent.removeChild(e);
            e.parent = this;
            if (t) {
                for (var n = null, r = this.firstChild; null != r;) n = r, r = r.next;
                null != n ? n.next = e : this.firstChild = e
            } else e.next = this.firstChild, this.firstChild = e;
            return this
        },
        removeChild: function(e) {
            for (var t = null, n = this.firstChild; null != n;) {
                var r = n.next;
                if (n == e) {
                    null == t ? this.firstChild = r : t.next = r;
                    n.parent = null;
                    n.next = null;
                    break
                }
                t = n;
                n = r
            }
        },
        disposeChildren: function() {
            for (; null != this.firstChild;) this.firstChild.dispose()
        },
        dispose: function() {
            for (null != this.parent && this.parent.removeChild(this); null != this.firstComponent;) this.firstComponent.dispose();
            this.disposeChildren()
        },
        __class__: T
    };
    var N = function() {};
    r["flambe.util.PackageLog"] = N;
    N.__name__ = ["flambe", "util", "PackageLog"];
    var C = function() {};
    r["flambe.platform.Platform"] = C;
    C.__name__ = ["flambe", "platform", "Platform"];
    C.prototype = {
        __class__: C
    };
    var k = function() {};
    r["flambe.platform.html.HtmlPlatform"] = k;
    k.__name__ = ["flambe", "platform", "html", "HtmlPlatform"];
    k.__interfaces__ = [C];
    k.prototype = {
        init: function() {
            var e = this;
            tn.fixAndroidMath();
            var t = null;
            try {
                t = window.flambe.canvas
            } catch (n) {}
            t.setAttribute("tabindex", "0");
            t.style.outlineStyle = "none";
            t.style.webkitTapHighlightColor = "transparent";
            t.setAttribute("moz-opaque", "true");
            this._stage = new Zt(t);
            this._pointer = new Tt;
            this._mouse = new Kt(this._pointer, t);
            this._renderer = this.createRenderer(t);
            this.mainLoop = new qt;
            this.musicPlaying = !1;
            this._canvas = t;
            this._container = t.parentElement;
            this._container.style.overflow = "visible";
            this._container.style.position = "relative";
            this._container.style.msTouchAction = "none";
            var r = 0,
                i = function(n) {
                    if (!(1e3 > n.timeStamp - r)) {
                        var i = t.getBoundingClientRect(),
                            s = e.getX(n, i),
                            i = e.getY(n, i);
                        switch (n.type) {
                            case "mousedown":
                                n.target == t && (n.preventDefault(), e._mouse.submitDown(s, i, n.button), t.focus());
                                break;
                            case "mousemove":
                                e._mouse.submitMove(s, i);
                                break;
                            case "mouseup":
                                e._mouse.submitUp(s, i, n.button);
                                break;
                            case "mousewheel":
                            case "DOMMouseScroll":
                                e._mouse.submitScroll(s, i, "mousewheel" == n.type ? n.wheelDelta / 40 : -n.detail) && n.preventDefault()
                        }
                    }
                };
            window.addEventListener("mousedown", i, !1);
            window.addEventListener("mousemove", i, !1);
            window.addEventListener("mouseup", i, !1);
            t.addEventListener("mousewheel", i, !1);
            t.addEventListener("DOMMouseScroll", i, !1);
            t.addEventListener("contextmenu", function(e) {
                e.preventDefault()
            }, !1);
            var s = "undefined" != typeof window.ontouchstart,
                i = "msMaxTouchPoints" in window.navigator && 1 < window.navigator.msMaxTouchPoints;
            if (s || i) {
                var o = new kt(this._pointer, s ? 4 : window.navigator.msMaxTouchPoints);
                this._touch = o;
                i = function(t) {
                    var n;
                    n = s ? t.changedTouches : [t];
                    var i = t.target.getBoundingClientRect();
                    r = t.timeStamp;
                    switch (t.type) {
                        case "touchstart":
                        case "MSPointerDown":
                        case "pointerdown":
                            t.preventDefault();
                            tn.SHOULD_HIDE_MOBILE_BROWSER && tn.hideMobileBrowser();
                            for (t = 0; t < n.length;) {
                                var u = n[t];
                                ++t;
                                var a = e.getX(u, i),
                                    f = e.getY(u, i);
                                o.submitDown((s ? u.identifier : u.pointerId) | 0, a, f)
                            }
                            break;
                        case "touchmove":
                        case "MSPointerMove":
                        case "pointermove":
                            t.preventDefault();
                            for (t = 0; t < n.length;) u = n[t], ++t, a = e.getX(u, i), f = e.getY(u, i), o.submitMove((s ? u.identifier : u.pointerId) | 0, a, f);
                            break;
                        case "touchend":
                        case "touchcancel":
                        case "MSPointerUp":
                        case "pointerup":
                            for (t = 0; t < n.length;) u = n[t], ++t, a = e.getX(u, i), f = e.getY(u, i), o.submitUp((s ? u.identifier : u.pointerId) | 0, a, f)
                    }
                };
                s ? (t.addEventListener("touchstart", i, !1), t.addEventListener("touchmove", i, !1), t.addEventListener("touchend", i, !1), t.addEventListener("touchcancel", i, !1)) : (t.addEventListener("MSPointerDown", i, !1), t.addEventListener("MSPointerMove", i, !1), t.addEventListener("MSPointerUp", i, !1))
            } else this._touch = new Pt;
            var u = window.onerror;
            window.onerror = function(e, t, n) {
                P.uncaughtError.emit(e);
                return null != u ? u(e, t, n) : !1
            };
            var a = tn.loadExtension("hidden", window.document);
            null != a.value ? (i = function() {
                P.hidden.set__(v.field(window.document, a.field))
            }, i(null), window.document.addEventListener(a.prefix + "visibilitychange", i, !1)) : (i = function(e) {
                P.hidden.set__("pagehide" == e.type)
            }, window.addEventListener("pageshow", i, !1), window.addEventListener("pagehide", i, !1));
            P.hidden.get_changed().connect(function(t) {
                t || (e._skipFrame = !0)
            });
            this._skipFrame = !1;
            this._lastUpdate = Date.now();
            var f = tn.loadExtension("requestAnimationFrame").value,
                i = tn.loadExtension("requestAnimationFrame").prefix;
            if (null != f && "webkit" != i) {
                var l = window.performance,
                    c = null != l && tn.polyfill("now", l);
                c ? this._lastUpdate = l.now() : null;
                var h = null,
                    h = function(n) {
                        e.update(c ? l.now() : n);
                        f(h, t)
                    };
                f(h, t)
            } else window.setInterval(function() {
                e.update(Date.now())
            }, 16);
            H.info("Initialized HTML platform", ["renderer", this._renderer.get_type()])
        },
        loadAssetPack: function(e) {
            return (new Jt(this, e)).promise
        },
        getStage: function() {
            return this._stage
        },
        getStorage: function() {
            if (null == this._storage) {
                var e = qn.getLocalStorage();
                this._storage = null != e ? new en(e) : new Dt
            }
            return this._storage
        },
        update: function(e) {
            var t = (e - this._lastUpdate) / 1e3;
            this._lastUpdate = e;
            P.hidden._value || (this._skipFrame ? this._skipFrame = !1 : (this.mainLoop.update(t), this.mainLoop.render(this._renderer)))
        },
        getPointer: function() {
            return this._pointer
        },
        getRenderer: function() {
            return this._renderer
        },
        getX: function(e, t) {
            return (e.clientX - t.left) * this._stage.get_width() / t.width
        },
        getY: function(e, t) {
            return (e.clientY - t.top) * this._stage.get_height() / t.height
        },
        createRenderer: function(e) {
            return new Xt(e)
        },
        __class__: k
    };
    var L = function(e, t) {
        this._value = e;
        this._changed = null != t ? new M(t) : null
    };
    r["flambe.util.Value"] = L;
    L.__name__ = ["flambe", "util", "Value"];
    L.prototype = {
        watch: function(e) {
            e(this._value, this._value);
            return this.get_changed().connect(e)
        },
        set__: function(e) {
            var t = this._value;
            e != t && (this._value = e, null != this._changed && this._changed.emit(e, t));
            return e
        },
        get_changed: function() {
            null == this._changed && (this._changed = new M);
            return this._changed
        },
        __class__: L,
        __properties__: {
            get_changed: "get_changed",
            set__: "set__"
        }
    };
    var A = function(e, t) {
        this._next = null;
        this._signal = e;
        this._listener = t;
        this.stayInList = !0
    };
    r["flambe.util.SignalConnection"] = A;
    A.__name__ = ["flambe", "util", "SignalConnection"];
    A.__interfaces__ = [E];
    A.prototype = {
        once: function() {
            this.stayInList = !1;
            return this
        },
        dispose: function() {
            null != this._signal && (this._signal.disconnect(this), this._signal = null)
        },
        __class__: A
    };
    var O = function(e) {
        this._head = null != e ? new A(this, e) : null;
        this._deferredTasks = null
    };
    r["flambe.util.SignalBase"] = O;
    O.__name__ = ["flambe", "util", "SignalBase"];
    O.prototype = {
        connectImpl: function(e, t) {
            var n = this,
                r = new A(this, e);
            this._head == O.DISPATCHING_SENTINEL ? this.defer(function() {
                n.listAdd(r, t)
            }) : this.listAdd(r, t);
            return r
        },
        disconnect: function(e) {
            var t = this;
            this._head == O.DISPATCHING_SENTINEL ? this.defer(function() {
                t.listRemove(e)
            }) : this.listRemove(e)
        },
        defer: function(e) {
            for (var t = null, n = this._deferredTasks; null != n;) t = n, n = n.next;
            e = new An(e);
            null != t ? t.next = e : this._deferredTasks = e
        },
        willEmit: function() {
            var e = this._head;
            this._head = O.DISPATCHING_SENTINEL;
            return e
        },
        didEmit: function(e) {
            this._head = e;
            e = this._deferredTasks;
            for (this._deferredTasks = null; null != e;) e.fn(), e = e.next
        },
        listAdd: function(e, t) {
            if (t) e._next = this._head, this._head = e;
            else {
                for (var n = null, r = this._head; null != r;) n = r, r = r._next;
                null != n ? n._next = e : this._head = e
            }
        },
        listRemove: function(e) {
            for (var t = null, n = this._head; null != n;) {
                if (n == e) {
                    e = n._next;
                    null == t ? this._head = e : t._next = e;
                    break
                }
                t = n;
                n = n._next
            }
        },
        __class__: O
    };
    var M = function(e) {
        O.call(this, e)
    };
    r["flambe.util.Signal2"] = M;
    M.__name__ = ["flambe", "util", "Signal2"];
    M.__super__ = O;
    M.prototype = e(O.prototype, {
        connect: function(e, t) {
            null == t && (t = !1);
            return this.connectImpl(e, t)
        },
        emit: function(e, t) {
            var n = this;
            this._head == O.DISPATCHING_SENTINEL ? this.defer(function() {
                n.emitImpl(e, t)
            }) : this.emitImpl(e, t)
        },
        emitImpl: function(e, t) {
            for (var n = this.willEmit(), r = n; null != r;) r._listener(e, t), r.stayInList || r.dispose(), r = r._next;
            this.didEmit(n)
        },
        __class__: M
    });
    var _ = function(e) {
        O.call(this, e)
    };
    r["flambe.util.Signal1"] = _;
    _.__name__ = ["flambe", "util", "Signal1"];
    _.__super__ = O;
    _.prototype = e(O.prototype, {
        connect: function(e, t) {
            null == t && (t = !1);
            return this.connectImpl(e, t)
        },
        emit: function(e) {
            var t = this;
            this._head == O.DISPATCHING_SENTINEL ? this.defer(function() {
                t.emitImpl(e)
            }) : this.emitImpl(e)
        },
        emitImpl: function(e) {
            for (var t = this.willEmit(), n = t; null != n;) n._listener(e), n.stayInList || n.dispose(), n = n._next;
            this.didEmit(t)
        },
        __class__: _
    });
    var D = function(e, t) {
        this._behavior = null;
        L.call(this, e, t)
    };
    r["flambe.animation.AnimatedFloat"] = D;
    D.__name__ = ["flambe", "animation", "AnimatedFloat"];
    D.__super__ = L;
    D.prototype = e(L.prototype, {
        set__: function(e) {
            this._behavior = null;
            return L.prototype.set__.call(this, e)
        },
        update: function(e) {
            null != this._behavior && (L.prototype.set__.call(this, this._behavior.update(e)), this._behavior.isComplete() && (this._behavior = null))
        },
        animateTo: function(e, t, n) {
            this.set_behavior(new q(this._value, e, t, n))
        },
        set_behavior: function(e) {
            this._behavior = e;
            this.update(0);
            return e
        },
        __class__: D,
        __properties__: e(L.prototype.__properties__, {
            set_behavior: "set_behavior"
        })
    });
    var P = function() {};
    r["flambe.System"] = P;
    P.__name__ = ["flambe", "System"];
    P.init = function() {
        P._calledInit || (P._platform.init(), P._calledInit = !0)
    };
    P.loadAssetPack = function(e) {
        return P._platform.loadAssetPack(e)
    };
    var H = function() {};
    r["flambe.Log"] = H;
    H.__name__ = ["flambe", "Log"];
    H.info = function() {
        null
    };
    H.__super__ = N;
    H.prototype = e(N.prototype, {
        __class__: H
    });
    var B = function() {
        this._realDt = 0
    };
    r["flambe.SpeedAdjuster"] = B;
    B.__name__ = ["flambe", "SpeedAdjuster"];
    B.__super__ = S;
    B.prototype = e(S.prototype, {
        get_name: function() {
            return "SpeedAdjuster_6"
        },
        onUpdate: function(e) {
            0 < this._realDt && (e = this._realDt, this._realDt = 0);
            this.scale.update(e)
        },
        __class__: B
    });
    var j = function() {};
    r["flambe.animation.Behavior"] = j;
    j.__name__ = ["flambe", "animation", "Behavior"];
    j.prototype = {
        __class__: j
    };
    var F = function() {};
    r["flambe.animation.Ease"] = F;
    F.__name__ = ["flambe", "animation", "Ease"];
    F.linear = function(e) {
        return e
    };
    F.quadIn = function(e) {
        return e * e
    };
    F.quadOut = function(e) {
        return e * (2 - e)
    };
    F.cubeOut = function(e) {
        return 1 + --e * e * e
    };
    F.bounceIn = function(e) {
        e = 1 - e;
        return .36363636363636365 > e ? 1 - 7.5625 * e * e : .7272727272727273 > e ? 1 - (7.5625 * (e - .5454545454545454) * (e - .5454545454545454) + .75) : .9090909090909091 > e ? 1 - (7.5625 * (e - .8181818181818182) * (e - .8181818181818182) + .9375) : 1 - (7.5625 * (e - .9545454545454546) * (e - .9545454545454546) + .984375)
    };
    F.bounceOut = function(e) {
        return .36363636363636365 > e ? 7.5625 * e * e : .7272727272727273 > e ? 7.5625 * (e - .5454545454545454) * (e - .5454545454545454) + .75 : .9090909090909091 > e ? 7.5625 * (e - .8181818181818182) * (e - .8181818181818182) + .9375 : 7.5625 * (e - .9545454545454546) * (e - .9545454545454546) + .984375
    };
    F.bounceInOut = function(e) {
        if (.5 > e) return e = 1 - 2 * e, .36363636363636365 > e ? (1 - 7.5625 * e * e) / 2 : .7272727272727273 > e ? (1 - (7.5625 * (e - .5454545454545454) * (e - .5454545454545454) + .75)) / 2 : .9090909090909091 > e ? (1 - (7.5625 * (e - .8181818181818182) * (e - .8181818181818182) + .9375)) / 2 : (1 - (7.5625 * (e - .9545454545454546) * (e - .9545454545454546) + .984375)) / 2;
        e = 2 * e - 1;
        return .36363636363636365 > e ? 7.5625 * e * e / 2 + .5 : .7272727272727273 > e ? (7.5625 * (e - .5454545454545454) * (e - .5454545454545454) + .75) / 2 + .5 : .9090909090909091 > e ? (7.5625 * (e - .8181818181818182) * (e - .8181818181818182) + .9375) / 2 + .5 : (7.5625 * (e - .9545454545454546) * (e - .9545454545454546) + .984375) / 2 + .5
    };
    F.backIn = function(e) {
        return e * e * (2.70158 * e - 1.70158)
    };
    F.backOut = function(e) {
        return 1 - --e * e * (-2.70158 * e - 1.70158)
    };
    F.backInOut = function(e) {
        e *= 2;
        if (1 > e) return e * e * (2.70158 * e - 1.70158) / 2;
        e -= 2;
        return (1 - e * e * (-2.70158 * e - 1.70158)) / 2 + .5
    };
    var I = function(e, t) {
        this.base = e;
        this.strength = t
    };
    r["flambe.animation.Jitter"] = I;
    I.__name__ = ["flambe", "animation", "Jitter"];
    I.__interfaces__ = [j];
    I.prototype = {
        update: function() {
            return this.base + 2 * Math.random() * this.strength - this.strength
        },
        isComplete: function() {
            return !1
        },
        __class__: I
    };
    var q = function(e, t, n, r) {
        this._from = e;
        this._to = t;
        this._duration = n;
        this.elapsed = 0;
        this._easing = null != r ? r : F.linear
    };
    r["flambe.animation.Tween"] = q;
    q.__name__ = ["flambe", "animation", "Tween"];
    q.__interfaces__ = [j];
    q.prototype = {
        update: function(e) {
            this.elapsed += e;
            return this.elapsed >= this._duration ? this._to : this._from + (this._to - this._from) * this._easing(this.elapsed / this._duration)
        },
        isComplete: function() {
            return this.elapsed >= this._duration
        },
        __class__: q
    };
    var R = function() {};
    r["flambe.asset.Asset"] = R;
    R.__name__ = ["flambe", "asset", "Asset"];
    R.__interfaces__ = [E];
    R.prototype = {
        __class__: R
    };
    var U = r["flambe.asset.AssetFormat"] = {
        __ename__: ["flambe", "asset", "AssetFormat"],
        __constructs__: "WEBP,JXR,PNG,JPG,GIF,DDS,PVR,PKM,MP3,M4A,OPUS,OGG,WAV,Data".split(",")
    };
    U.WEBP = ["WEBP", 0];
    U.WEBP.toString = i;
    U.WEBP.__enum__ = U;
    U.JXR = ["JXR", 1];
    U.JXR.toString = i;
    U.JXR.__enum__ = U;
    U.PNG = ["PNG", 2];
    U.PNG.toString = i;
    U.PNG.__enum__ = U;
    U.JPG = ["JPG", 3];
    U.JPG.toString = i;
    U.JPG.__enum__ = U;
    U.GIF = ["GIF", 4];
    U.GIF.toString = i;
    U.GIF.__enum__ = U;
    U.DDS = ["DDS", 5];
    U.DDS.toString = i;
    U.DDS.__enum__ = U;
    U.PVR = ["PVR", 6];
    U.PVR.toString = i;
    U.PVR.__enum__ = U;
    U.PKM = ["PKM", 7];
    U.PKM.toString = i;
    U.PKM.__enum__ = U;
    U.MP3 = ["MP3", 8];
    U.MP3.toString = i;
    U.MP3.__enum__ = U;
    U.M4A = ["M4A", 9];
    U.M4A.toString = i;
    U.M4A.__enum__ = U;
    U.OPUS = ["OPUS", 10];
    U.OPUS.toString = i;
    U.OPUS.__enum__ = U;
    U.OGG = ["OGG", 11];
    U.OGG.toString = i;
    U.OGG.__enum__ = U;
    U.WAV = ["WAV", 12];
    U.WAV.toString = i;
    U.WAV.__enum__ = U;
    U.Data = ["Data", 13];
    U.Data.toString = i;
    U.Data.__enum__ = U;
    var z = function(e, t, n, r) {
        this.name = e;
        this.url = t;
        this.format = n;
        this.bytes = r
    };
    r["flambe.asset.AssetEntry"] = z;
    z.__name__ = ["flambe", "asset", "AssetEntry"];
    z.prototype = {
        __class__: z
    };
    var W = function() {};
    r["flambe.asset.AssetPack"] = W;
    W.__name__ = ["flambe", "asset", "AssetPack"];
    W.__interfaces__ = [E];
    W.prototype = {
        __class__: W
    };
    var X = function() {};
    r["flambe.asset.File"] = X;
    X.__name__ = ["flambe", "asset", "File"];
    X.__interfaces__ = [R];
    X.prototype = {
        __class__: X
    };
    var V = function() {
        this._localBase = this._remoteBase = null;
        this._entries = []
    };
    r["flambe.asset.Manifest"] = V;
    V.__name__ = ["flambe", "asset", "Manifest"];
    V.fromAssets = function(e, t) {
        null == t && (t = !0);
        var n = v.field(Fn.getType(V).assets[0], e);
        if (null == n) {
            if (t) throw On.withFields("Missing asset pack", ["name", e]);
            return null
        }
        var r = new V;
        r.set_localBase("assets");
        for (var i = 0; i < n.length;) {
            var s = n[i];
            ++i;
            var o = s.name,
                u = e + "/" + o + "?v=" + m.string(s.md5),
                a = V.inferFormat(o);
            a != U.Data && (o = On.removeFileExtension(o));
            r.add(o, u, s.bytes, a)
        }
        return r
    };
    V.inferFormat = function(e) {
        e = On.getUrlExtension(e);
        if (null != e) switch (e.toLowerCase()) {
            case "gif":
                return U.GIF;
            case "jpg":
            case "jpeg":
                return U.JPG;
            case "jxr":
            case "wdp":
                return U.JXR;
            case "png":
                return U.PNG;
            case "webp":
                return U.WEBP;
            case "dds":
                return U.DDS;
            case "pvr":
                return U.PVR;
            case "pkm":
                return U.PKM;
            case "m4a":
                return U.M4A;
            case "mp3":
                return U.MP3;
            case "ogg":
                return U.OGG;
            case "opus":
                return U.OPUS;
            case "wav":
                return U.WAV
        } else null;
        return U.Data
    };
    V.prototype = {
        add: function(e, t, n, r) {
            null == n && (n = 0);
            null == r && (r = V.inferFormat(t));
            e = new z(e, t, r, n);
            this._entries.push(e);
            return e
        },
        iterator: function() {
            return l.iter(this._entries)
        },
        getFullURL: function(e) {
            var t;
            t = null != this.get_remoteBase() && V._supportsCrossOrigin ? this.get_remoteBase() : this.get_localBase();
            return null != t ? On.joinPath(t, e.url) : e.url
        },
        get_localBase: function() {
            return this._localBase
        },
        set_localBase: function(e) {
            null != e && xn.that(!y.startsWith(e, "http://") && !y.startsWith(e, "https://"), "localBase must be a path on the same domain, NOT starting with http(s)://", null);
            return this._localBase = e
        },
        get_remoteBase: function() {
            return this._remoteBase
        },
        __class__: V,
        __properties__: {
            get_remoteBase: "get_remoteBase",
            set_localBase: "set_localBase",
            get_localBase: "get_localBase"
        }
    };
    var $ = r["flambe.display.BlendMode"] = {
        __ename__: ["flambe", "display", "BlendMode"],
        __constructs__: ["Normal", "Add", "Mask", "Copy"]
    };
    $.Normal = ["Normal", 0];
    $.Normal.toString = i;
    $.Normal.__enum__ = $;
    $.Add = ["Add", 1];
    $.Add.toString = i;
    $.Add.__enum__ = $;
    $.Mask = ["Mask", 2];
    $.Mask.toString = i;
    $.Mask.__enum__ = $;
    $.Copy = ["Copy", 3];
    $.Copy.toString = i;
    $.Copy.__enum__ = $;
    var J = function() {
        this.blendMode = this.scissor = null;
        var e = this;
        this._flags = 139;
        this._localMatrix = new vt;
        var t = function() {
            e._flags |= 12
        };
        this.x = new D(0, t);
        this.y = new D(0, t);
        this.rotation = new D(0, t);
        this.scaleX = new D(1, t);
        this.scaleY = new D(1, t);
        this.anchorX = new D(0, t);
        this.anchorY = new D(0, t);
        this.alpha = new D(1)
    };
    r["flambe.display.Sprite"] = J;
    J.__name__ = ["flambe", "display", "Sprite"];
    J.hitTest = function(e, t, n) {
        var r = e._compMap.Sprite_0;
        if (null != r) {
            if (3 != (r._flags & 3)) return null;
            r.getLocalMatrix().inverseTransform(t, n, J._scratchPoint) && (t = J._scratchPoint.x, n = J._scratchPoint.y);
            var i = r.scissor;
            if (null != i && !i.contains(t, n)) return null
        }
        e = J.hitTestBackwards(e.firstChild, t, n);
        return null != e ? e : null != r && r.containsLocal(t, n) ? r : null
    };
    J.render = function(e, t) {
        var n = e._compMap.Sprite_0;
        if (null != n) {
            var r = n.alpha._value;
            if (0 == (n._flags & 1) || 0 >= r) return;
            t.save();
            1 > r && t.multiplyAlpha(r);
            null != n.blendMode && t.setBlendMode(n.blendMode);
            var r = n.getLocalMatrix(),
                i = r.m02,
                s = r.m12;
            0 != (n._flags & 128) && (i = Math.round(i), s = Math.round(s));
            t.transform(r.m00, r.m10, r.m01, r.m11, i, s);
            r = n.scissor;
            null != r && t.applyScissor(r.x, r.y, r.width, r.height);
            n.draw(t)
        }
        r = e._compMap.Director_5;
        if (null != r) {
            r = r.occludedScenes;
            for (i = 0; i < r.length;) s = r[i], ++i, J.render(s, t)
        }
        for (r = e.firstChild; null != r;) i = r.next, J.render(r, t), r = i;
        null != n && t.restore()
    };
    J.hitTestBackwards = function(e, t, n) {
        if (null != e) {
            var r = J.hitTestBackwards(e.next, t, n);
            return null != r ? r : J.hitTest(e, t, n)
        }
        return null
    };
    J.__super__ = S;
    J.prototype = e(S.prototype, {
        get_name: function() {
            return "Sprite_0"
        },
        getNaturalWidth: function() {
            return 0
        },
        getNaturalHeight: function() {
            return 0
        },
        containsLocal: function(e, t) {
            return 0 <= e && e < this.getNaturalWidth() && 0 <= t && t < this.getNaturalHeight()
        },
        getLocalMatrix: function() {
            0 != (this._flags & 4) && (this._flags &= -5, this._localMatrix.compose(this.x._value, this.y._value, this.scaleX._value, this.scaleY._value, 3.141592653589793 * this.rotation._value / 180), this._localMatrix.translate(-this.anchorX._value, -this.anchorY._value));
            return this._localMatrix
        },
        centerAnchor: function() {
            this.anchorX.set__(this.getNaturalWidth() / 2);
            this.anchorY.set__(this.getNaturalHeight() / 2);
            return this
        },
        setXY: function(e, t) {
            this.x.set__(e);
            this.y.set__(t);
            return this
        },
        setAlpha: function(e) {
            this.alpha.set__(e);
            return this
        },
        setRotation: function(e) {
            this.rotation.set__(e);
            return this
        },
        setScale: function(e) {
            this.scaleX.set__(e);
            this.scaleY.set__(e);
            return this
        },
        onAdded: function() {
            0 != (this._flags & 256) && this.connectHover()
        },
        onRemoved: function() {
            null != this._hoverConnection && (this._hoverConnection.dispose(), this._hoverConnection = null)
        },
        onUpdate: function(e) {
            this.x.update(e);
            this.y.update(e);
            this.rotation.update(e);
            this.scaleX.update(e);
            this.scaleY.update(e);
            this.alpha.update(e);
            this.anchorX.update(e);
            this.anchorY.update(e)
        },
        draw: function() {},
        getParentSprite: function() {
            if (null == this.owner) return null;
            for (var e = this.owner.parent; null != e;) {
                var t = e._compMap.Sprite_0;
                if (null != t) return t;
                e = e.parent
            }
            return null
        },
        get_pointerDown: function() {
            null == this._pointerDown && (this._pointerDown = new _);
            return this._pointerDown
        },
        get_pointerUp: function() {
            null == this._pointerUp && (this._pointerUp = new _);
            return this._pointerUp
        },
        connectHover: function() {
            var e = this;
            null == this._hoverConnection && (this._hoverConnection = P._platform.getPointer().move.connect(function(t) {
                for (var n = t.hit; null != n;) {
                    if (n == e) return;
                    n = n.getParentSprite()
                }
                null != e._pointerOut && 0 != (e._flags & 256) && e._pointerOut.emit(t);
                e._flags &= -257;
                e._hoverConnection.dispose();
                e._hoverConnection = null
            }))
        },
        set_visible: function(e) {
            this._flags = Tn.set(this._flags, 1, e);
            return e
        },
        onPointerDown: function(e) {
            this.onHover(e);
            null != this._pointerDown && this._pointerDown.emit(e)
        },
        onPointerMove: function(e) {
            this.onHover(e);
            null != this._pointerMove && this._pointerMove.emit(e)
        },
        onHover: function(e) {
            if (0 == (this._flags & 256) && (this._flags |= 256, null != this._pointerIn || null != this._pointerOut)) null != this._pointerIn && this._pointerIn.emit(e), this.connectHover()
        },
        onPointerUp: function(e) {
            switch (e.source[1]) {
                case 1:
                    null != this._pointerOut && 0 != (this._flags & 256) && this._pointerOut.emit(e), this._flags &= -257, null != this._hoverConnection && (this._hoverConnection.dispose(), this._hoverConnection = null)
            }
            null != this._pointerUp && this._pointerUp.emit(e)
        },
        __class__: J,
        __properties__: e(S.prototype.__properties__, {
            set_visible: "set_visible",
            get_pointerUp: "get_pointerUp",
            get_pointerDown: "get_pointerDown"
        })
    });
    var K = function(e, t, n) {
        J.call(this);
        this.color = e;
        this.width = new D(t);
        this.height = new D(n)
    };
    r["flambe.display.FillSprite"] = K;
    K.__name__ = ["flambe", "display", "FillSprite"];
    K.__super__ = J;
    K.prototype = e(J.prototype, {
        draw: function(e) {
            e.fillRect(this.color, 0, 0, this.width._value, this.height._value)
        },
        getNaturalWidth: function() {
            return this.width._value
        },
        getNaturalHeight: function() {
            return this.height._value
        },
        setSize: function(e, t) {
            this.width.set__(e);
            this.height.set__(t);
            return this
        },
        onUpdate: function(e) {
            J.prototype.onUpdate.call(this, e);
            this.width.update(e);
            this.height.update(e)
        },
        __class__: K
    });
    var Q = function(e) {
        this._kernings = null;
        this.xOffset = this.yOffset = this.xAdvance = 0;
        this.page = null;
        this.x = this.y = this.width = this.height = 0;
        this.charCode = e
    };
    r["flambe.display.Glyph"] = Q;
    Q.__name__ = ["flambe", "display", "Glyph"];
    Q.prototype = {
        draw: function(e, t, n) {
            0 < this.width && e.drawSubTexture(this.page, t + this.xOffset, n + this.yOffset, this.x, this.y, this.width, this.height)
        },
        getKerning: function(e) {
            return null != this._kernings ? m["int"](this._kernings.get(e)) : 0
        },
        setKerning: function(e, t) {
            null == this._kernings && (this._kernings = new Dn);
            this._kernings.set(e, t)
        },
        __class__: Q
    };
    var G = function(e, t) {
        this.name = t;
        this._pack = e;
        this.reload()
    };
    r["flambe.display.Font"] = G;
    G.__name__ = ["flambe", "display", "Font"];
    G.prototype = {
        layoutText: function(e, t, n, r, i) {
            null == i && (i = 0);
            null == r && (r = 0);
            null == n && (n = 0);
            null == t && (t = Y.Left);
            return new Z(this, e, t, n, r, i)
        },
        reload: function() {
            this._glyphs = new Dn;
            this._glyphs.set(G.NEWLINE.charCode, G.NEWLINE);
            for (var e = new et(this._pack.getFile(this.name + ".fnt").toString()), t = new Dn, n = this.name.lastIndexOf("/"), n = 0 <= n ? l.substr(this.name, 0, n + 1) : "", r = e.keywords(); r.hasNext();) switch (r.next()) {
                case "info":
                    for (var i = e.pairs(); i.hasNext();) {
                        var s = i.next();
                        switch (s.key) {
                            case "size":
                                this.size = s.getInt()
                        }
                    }
                    break;
                case "common":
                    for (i = e.pairs(); i.hasNext();) switch (s = i.next(), s.key) {
                        case "lineHeight":
                            this.lineHeight = s.getInt()
                    }
                    break;
                case "page":
                    for (var i = 0, s = null, o = e.pairs(); o.hasNext();) {
                        var u = o.next();
                        switch (u.key) {
                            case "id":
                                i = u.getInt();
                                break;
                            case "file":
                                s = u.getString()
                        }
                    }
                    s = this._pack.getTexture(n + On.removeFileExtension(s));
                    t.set(i, s);
                    break;
                case "char":
                    i = null;
                    for (s = e.pairs(); s.hasNext();) switch (o = s.next(), o.key) {
                        case "id":
                            i = new Q(o.getInt());
                            break;
                        case "x":
                            i.x = o.getInt();
                            break;
                        case "y":
                            i.y = o.getInt();
                            break;
                        case "width":
                            i.width = o.getInt();
                            break;
                        case "height":
                            i.height = o.getInt();
                            break;
                        case "page":
                            o = o.getInt();
                            i.page = t.get(o);
                            break;
                        case "xoffset":
                            i.xOffset = o.getInt();
                            break;
                        case "yoffset":
                            i.yOffset = o.getInt();
                            break;
                        case "xadvance":
                            i.xAdvance = o.getInt()
                    }
                    this._glyphs.set(i.charCode, i);
                    break;
                case "kerning":
                    i = null;
                    o = s = 0;
                    for (u = e.pairs(); u.hasNext();) {
                        var a = u.next();
                        switch (a.key) {
                            case "first":
                                i = this._glyphs.get(a.getInt());
                                break;
                            case "second":
                                s = a.getInt();
                                break;
                            case "amount":
                                o = a.getInt()
                        }
                    }
                    null != i && 0 != o && i.setKerning(s, o)
            }
        },
        __class__: G
    };
    var Y = r["flambe.display.TextAlign"] = {
        __ename__: ["flambe", "display", "TextAlign"],
        __constructs__: ["Left", "Center", "Right"]
    };
    Y.Left = ["Left", 0];
    Y.Left.toString = i;
    Y.Left.__enum__ = Y;
    Y.Center = ["Center", 1];
    Y.Center.toString = i;
    Y.Center.__enum__ = Y;
    Y.Right = ["Right", 2];
    Y.Right.toString = i;
    Y.Right.__enum__ = Y;
    var Z = function(e, t, n, r, i, s) {
        this.lines = 0;
        var o = this;
        this._font = e;
        this._glyphs = [];
        this._offsets = [];
        this._lineOffset = Math.round(e.lineHeight + s);
        this.bounds = new mt;
        for (var u = [], s = t.length, a = 0; a < s;) {
            var f = a++,
                f = t.charCodeAt(f),
                f = e._glyphs.get(f);
            null != f ? this._glyphs.push(f) : null
        }
        for (var t = -1, l = 0, c = 0, e = e._glyphs.get(10), s = function() {
            o.bounds.width = dt.max(o.bounds.width, l);
            o.bounds.height += c;
            u[o.lines] = l;
            c = l = 0;
            ++o.lines
        }, a = 0; a < this._glyphs.length;) {
            f = this._glyphs[a];
            this._offsets[a] = Math.round(l);
            var h = 0 < r && l + f.width > r;
            h || f == e ? (h && (0 <= t ? (this._glyphs[t] = e, l = this._offsets[t], a = t) : this._glyphs.splice(a, 0, e)), t = -1, c = this._lineOffset, s()) : (32 == f.charCode && (t = a), l += f.xAdvance + i, c = dt.max(c, f.height + f.yOffset), a + 1 < this._glyphs.length && (l += f.getKerning(this._glyphs[a + 1].charCode)));
            ++a
        }
        s();
        i = 0;
        e = Z.getAlignOffset(n, u[0], r);
        t = 1.79769313486231e308;
        s = -1.79769313486231e308;
        f = a = 0;
        for (h = this._glyphs.length; f < h;) {
            var p = this._glyphs[f];
            10 == p.charCode && (i += this._lineOffset, ++a, e = Z.getAlignOffset(n, u[a], r));
            this._offsets[f] += e;
            var d = i + p.yOffset;
            t < d || (t = d);
            s = dt.max(s, d + p.height);
            ++f
        }
        this.bounds.x = Z.getAlignOffset(n, this.bounds.width, r);
        this.bounds.y = t;
        this.bounds.height = s - t
    };
    r["flambe.display.TextLayout"] = Z;
    Z.__name__ = ["flambe", "display", "TextLayout"];
    Z.getAlignOffset = function(e, t, n) {
        switch (e[1]) {
            case 0:
                return 0;
            case 2:
                return n - t;
            case 1:
                return Math.round((n - t) / 2)
        }
    };
    Z.prototype = {
        draw: function(e) {
            for (var t = 0, n = 0, r = this._glyphs.length; n < r;) {
                var i = this._glyphs[n];
                10 == i.charCode ? t += this._lineOffset : i.draw(e, this._offsets[n], t);
                ++n
            }
        },
        __class__: Z
    };
    var et = function(e) {
        this._configText = e;
        this._keywordPattern = new s("([A-Za-z]+)(.*)", "");
        this._pairPattern = new s('([A-Za-z]+)=("[^"]*"|[^\\s]+)', "")
    };
    r["flambe.display._Font.ConfigParser"] = et;
    et.__name__ = ["flambe", "display", "_Font", "ConfigParser"];
    et.advance = function(e, t) {
        var n = t.matchedPos();
        return l.substr(e, n.pos + n.len, e.length)
    };
    et.prototype = {
        keywords: function() {
            var e = this,
                t = this._configText;
            return {
                next: function() {
                    t = et.advance(t, e._keywordPattern);
                    e._pairText = e._keywordPattern.matched(2);
                    return e._keywordPattern.matched(1)
                },
                hasNext: function() {
                    return e._keywordPattern.match(t)
                }
            }
        },
        pairs: function() {
            var e = this,
                t = this._pairText;
            return {
                next: function() {
                    t = et.advance(t, e._pairPattern);
                    return new tt(e._pairPattern.matched(1), e._pairPattern.matched(2))
                },
                hasNext: function() {
                    return e._pairPattern.match(t)
                }
            }
        },
        __class__: et
    };
    var tt = function(e, t) {
        this.key = e;
        this._value = t
    };
    r["flambe.display._Font.ConfigPair"] = tt;
    tt.__name__ = ["flambe", "display", "_Font", "ConfigPair"];
    tt.prototype = {
        getInt: function() {
            return m.parseInt(this._value)
        },
        getString: function() {
            return 34 != this._value.charCodeAt(0) ? null : l.substr(this._value, 1, this._value.length - 2)
        },
        __class__: tt
    };
    var nt = function() {};
    r["flambe.display.Graphics"] = nt;
    nt.__name__ = ["flambe", "display", "Graphics"];
    nt.prototype = {
        __class__: nt
    };
    var rt = function(e) {
        J.call(this);
        this.texture = e
    };
    r["flambe.display.ImageSprite"] = rt;
    rt.__name__ = ["flambe", "display", "ImageSprite"];
    rt.__super__ = J;
    rt.prototype = e(J.prototype, {
        draw: function(e) {
            null != this.texture && e.drawTexture(this.texture, 0, 0)
        },
        getNaturalWidth: function() {
            return null != this.texture ? this.texture.get_width() : 0
        },
        getNaturalHeight: function() {
            return null != this.texture ? this.texture.get_height() : 0
        },
        __class__: rt
    });
    var it = r["flambe.display.Orientation"] = {
        __ename__: ["flambe", "display", "Orientation"],
        __constructs__: ["Portrait", "Landscape"]
    };
    it.Portrait = ["Portrait", 0];
    it.Portrait.toString = i;
    it.Portrait.__enum__ = it;
    it.Landscape = ["Landscape", 1];
    it.Landscape.toString = i;
    it.Landscape.__enum__ = it;
    var st = function() {};
    r["flambe.display.Texture"] = st;
    st.__name__ = ["flambe", "display", "Texture"];
    st.__interfaces__ = [R];
    st.prototype = {
        __class__: st
    };
    var ot = function() {};
    r["flambe.display.SubTexture"] = ot;
    ot.__name__ = ["flambe", "display", "SubTexture"];
    ot.__interfaces__ = [st];
    var ut = function(e, t) {
        null == t && (t = "");
        this._layout = null;
        var n = this;
        J.call(this);
        this._font = e;
        this._text = t;
        this._align = Y.Left;
        this._flags |= 64;
        var r = function() {
            n._flags |= 64
        };
        this.wrapWidth = new D(0, r);
        this.letterSpacing = new D(0, r);
        this.lineSpacing = new D(0, r)
    };
    r["flambe.display.TextSprite"] = ut;
    ut.__name__ = ["flambe", "display", "TextSprite"];
    ut.__super__ = J;
    ut.prototype = e(J.prototype, {
        draw: function(e) {
            this.updateLayout();
            this._layout.draw(e)
        },
        getNaturalWidth: function() {
            this.updateLayout();
            return 0 < this.wrapWidth._value ? this.wrapWidth._value : this._layout.bounds.width
        },
        getNaturalHeight: function() {
            this.updateLayout();
            var e = this._layout.lines * (this._font.lineHeight + this.lineSpacing._value),
                t = this._layout.bounds.height;
            return e > t ? e : t
        },
        containsLocal: function(e, t) {
            this.updateLayout();
            return this._layout.bounds.contains(e, t)
        },
        setAlign: function(e) {
            this.set_align(e);
            return this
        },
        set_text: function(e) {
            e != this._text && (this._text = e, this._flags |= 64);
            return e
        },
        set_align: function(e) {
            e != this._align && (this._align = e, this._flags |= 64);
            return e
        },
        updateLayout: function() {
            0 != (this._flags & 64) && (this._flags &= -65, this._layout = this._font.layoutText(this._text, this._align, this.wrapWidth._value, this.letterSpacing._value, this.lineSpacing._value))
        },
        onUpdate: function(e) {
            J.prototype.onUpdate.call(this, e);
            this.wrapWidth.update(e);
            this.letterSpacing.update(e);
            this.lineSpacing.update(e)
        },
        __class__: ut,
        __properties__: e(J.prototype.__properties__, {
            set_align: "set_align",
            set_text: "set_text"
        })
    });
    var at = r["flambe.input.MouseButton"] = {
        __ename__: ["flambe", "input", "MouseButton"],
        __constructs__: ["Left", "Middle", "Right", "Unknown"]
    };
    at.Left = ["Left", 0];
    at.Left.toString = i;
    at.Left.__enum__ = at;
    at.Middle = ["Middle", 1];
    at.Middle.toString = i;
    at.Middle.__enum__ = at;
    at.Right = ["Right", 2];
    at.Right.toString = i;
    at.Right.__enum__ = at;
    at.Unknown = function(e) {
        e = ["Unknown", 3, e];
        e.__enum__ = at;
        e.toString = i;
        return e
    };
    var ft = r["flambe.input.MouseCursor"] = {
        __ename__: ["flambe", "input", "MouseCursor"],
        __constructs__: ["Default", "Button", "None"]
    };
    ft.Default = ["Default", 0];
    ft.Default.toString = i;
    ft.Default.__enum__ = ft;
    ft.Button = ["Button", 1];
    ft.Button.toString = i;
    ft.Button.__enum__ = ft;
    ft.None = ["None", 2];
    ft.None.toString = i;
    ft.None.__enum__ = ft;
    var lt = function() {
        this.init(0, 0, 0, null)
    };
    r["flambe.input.MouseEvent"] = lt;
    lt.__name__ = ["flambe", "input", "MouseEvent"];
    lt.prototype = {
        init: function(e, t, n, r) {
            this.id = e;
            this.viewX = t;
            this.viewY = n;
            this.button = r
        },
        __class__: lt
    };
    var ct = r["flambe.input.EventSource"] = {
        __ename__: ["flambe", "input", "EventSource"],
        __constructs__: ["Mouse", "Touch"]
    };
    ct.Mouse = function(e) {
        e = ["Mouse", 0, e];
        e.__enum__ = ct;
        e.toString = i;
        return e
    };
    ct.Touch = function(e) {
        e = ["Touch", 1, e];
        e.__enum__ = ct;
        e.toString = i;
        return e
    };
    var ht = function() {
        this.init(0, 0, 0, null, null)
    };
    r["flambe.input.PointerEvent"] = ht;
    ht.__name__ = ["flambe", "input", "PointerEvent"];
    ht.prototype = {
        init: function(e, t, n, r, i) {
            this.id = e;
            this.viewX = t;
            this.viewY = n;
            this.hit = r;
            this.source = i;
            this._stopped = !1
        },
        __class__: ht
    };
    var pt = function(e) {
        this.id = e;
        this._source = ct.Touch(this)
    };
    r["flambe.input.TouchPoint"] = pt;
    pt.__name__ = ["flambe", "input", "TouchPoint"];
    pt.prototype = {
        init: function(e, t) {
            this.viewX = e;
            this.viewY = t
        },
        __class__: pt
    };
    var dt = function() {};
    r["flambe.math.FMath"] = dt;
    dt.__name__ = ["flambe", "math", "FMath"];
    dt.max = function(e, t) {
        return e > t ? e : t
    };
    var vt = function() {
        this.identity()
    };
    r["flambe.math.Matrix"] = vt;
    vt.__name__ = ["flambe", "math", "Matrix"];
    vt.prototype = {
        set: function(e, t, n, r, i, s) {
            this.m00 = e;
            this.m01 = n;
            this.m02 = i;
            this.m10 = t;
            this.m11 = r;
            this.m12 = s
        },
        identity: function() {
            this.set(1, 0, 0, 1, 0, 0)
        },
        compose: function(e, t, n, r, i) {
            var s = Math.sin(i),
                i = Math.cos(i);
            this.set(i * n, s * n, -s * r, i * r, e, t)
        },
        translate: function(e, t) {
            this.m02 += this.m00 * e + this.m01 * t;
            this.m12 += this.m11 * t + this.m10 * e
        },
        determinant: function() {
            return this.m00 * this.m11 - this.m01 * this.m10
        },
        inverseTransform: function(e, t, n) {
            var r = this.determinant();
            if (0 == r) return !1;
            e -= this.m02;
            t -= this.m12;
            n.x = (e * this.m11 - t * this.m01) / r;
            n.y = (t * this.m00 - e * this.m10) / r;
            return !0
        },
        __class__: vt
    };
    var mt = function(e, t, n, r) {
        null == r && (r = 0);
        null == n && (n = 0);
        null == t && (t = 0);
        null == e && (e = 0);
        this.set(e, t, n, r)
    };
    r["flambe.math.Rectangle"] = mt;
    mt.__name__ = ["flambe", "math", "Rectangle"];
    mt.prototype = {
        set: function(e, t, n, r) {
            this.x = e;
            this.y = t;
            this.width = n;
            this.height = r
        },
        contains: function(e, t) {
            e -= this.x;
            if (0 <= this.width) {
                if (0 > e || e > this.width) return !1
            } else if (0 < e || e < this.width) return !1;
            t -= this.y;
            if (0 <= this.height) {
                if (0 > t || t > this.height) return !1
            } else if (0 < t || t < this.height) return !1;
            return !0
        },
        __class__: mt
    };
    var gt = function() {
        this._disposed = !1
    };
    r["flambe.platform.BasicAsset"] = gt;
    gt.__name__ = ["flambe", "platform", "BasicAsset"];
    gt.__interfaces__ = [R];
    gt.prototype = {
        dispose: function() {
            this._disposed || (this._disposed = !0, this.onDisposed())
        },
        onDisposed: function() {
            null
        },
        __class__: gt
    };
    var yt = function(e, t) {
        var n = this;
        this.manifest = t;
        this._platform = e;
        this.promise = new kn;
        this._bytesLoaded = new Hn;
        this._pack = new bt(t, this);
        var r = c.array(t);
        if (0 == r.length) this.handleSuccess();
        else {
            for (var i = new Hn, s = 0; s < r.length;) {
                var o = r[s];
                ++s;
                var u = i.get(o.name);
                null == u && (u = [], i.set(o.name, u));
                u.push(o)
            }
            this._assetsRemaining = c.count(i);
            for (r = i.iterator(); r.hasNext();) i = [r.next()], this.pickBestEntry(i[0], function(e) {
                return function(r) {
                    if (null != r) {
                        var i = t.getFullURL(r);
                        try {
                            n.loadEntry(i, r)
                        } catch (s) {
                            n.handleError(r, "Unexpected error: " + m.string(s))
                        }
                        i = n.promise;
                        i.set_total(i._total + r.bytes)
                    } else r = e[0][0], yt.isAudio(r.format) ? n.handleLoad(r, At.getInstance()) : n.handleError(r, "Could not find a supported format to load")
                }
            }(i))
        }
    };
    r["flambe.platform.BasicAssetPackLoader"] = yt;
    yt.__name__ = ["flambe", "platform", "BasicAssetPackLoader"];
    yt.isAudio = function(e) {
        switch (e[1]) {
            case 8:
            case 9:
            case 10:
            case 11:
            case 12:
                return !0;
            default:
                return !1
        }
    };
    yt.prototype = {
        onDisposed: function() {},
        pickBestEntry: function(e, t) {
            this.getAssetFormats(function(n) {
                for (var r = 0; r < n.length;) {
                    var i = n[r];
                    ++r;
                    for (var s = 0; s < e.length;) {
                        var o = e[s];
                        ++s;
                        if (o.format == i) {
                            t(o);
                            return
                        }
                    }
                }
                t(null)
            })
        },
        loadEntry: function() {
            null
        },
        getAssetFormats: function() {
            null
        },
        handleLoad: function(e, t) {
            if (!this._pack.disposed) {
                this.handleProgress(e, e.bytes);
                var n;
                switch (e.format[1]) {
                    case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                    case 6:
                    case 7:
                        n = this._pack.textures;
                        break;
                    case 8:
                    case 9:
                    case 10:
                    case 11:
                    case 12:
                        n = this._pack.sounds;
                        break;
                    case 13:
                        n = this._pack.files
                }
                n.set(e.name, t);
                this._assetsRemaining -= 1;
                0 == this._assetsRemaining && this.handleSuccess()
            }
        },
        handleProgress: function(e, t) {
            this._bytesLoaded.set(e.name, t);
            for (var n = 0, r = this._bytesLoaded.iterator(); r.hasNext();) var i = r.next(),
                n = n + i;
            this.promise.set_progress(n)
        },
        handleSuccess: function() {
            this.promise.set_result(this._pack)
        },
        handleError: function(e, t) {
            this.promise.error.emit(On.withFields(t, ["url", e.url]))
        },
        handleTextureError: function(e) {
            this.handleError(e, "Failed to create texture. Is the GPU context unavailable?")
        },
        __class__: yt
    };
    var bt = function(e, t) {
        this.disposed = !1;
        this._manifest = e;
        this.loader = t;
        this.textures = new Hn;
        this.sounds = new Hn;
        this.files = new Hn
    };
    r["flambe.platform._BasicAssetPackLoader.BasicAssetPack"] = bt;
    bt.__name__ = ["flambe", "platform", "_BasicAssetPackLoader", "BasicAssetPack"];
    bt.__interfaces__ = [W];
    bt.prototype = {
        getTexture: function(e, t) {
            null == t && (t = !0);
            var n = this.textures.get(e);
            if (null == n && t) throw On.withFields("Missing texture", ["name", e]);
            return n
        },
        getSound: function(e, t) {
            null == t && (t = !0);
            var n = this.sounds.get(e);
            if (null == n && t) throw On.withFields("Missing sound", ["name", e]);
            return n
        },
        getFile: function(e, t) {
            null == t && (t = !0);
            var n = this.files.get(e);
            if (null == n && t) throw On.withFields("Missing file", ["name", e]);
            return n
        },
        dispose: function() {
            if (!this.disposed) {
                this.disposed = !0;
                for (var e = this.textures.iterator(); e.hasNext();) e.next().dispose();
                this.textures = null;
                for (e = this.sounds.iterator(); e.hasNext();) e.next().dispose();
                this.sounds = null;
                for (e = this.files.iterator(); e.hasNext();) e.next().dispose();
                this.files = null;
                this.loader.onDisposed()
            }
        },
        __class__: bt
    };
    var wt = function(e) {
        this._disposed = !1;
        this._content = e
    };
    r["flambe.platform.BasicFile"] = wt;
    wt.__name__ = ["flambe", "platform", "BasicFile"];
    wt.__interfaces__ = [X];
    wt.__super__ = gt;
    wt.prototype = e(gt.prototype, {
        toString: function() {
            return this._content
        },
        onDisposed: function() {
            this._content = null
        },
        __class__: wt
    });
    var Et = function() {};
    r["flambe.subsystem.MouseSystem"] = Et;
    Et.__name__ = ["flambe", "subsystem", "MouseSystem"];
    var St = function(e) {
        this._pointer = e;
        this._source = ct.Mouse(St._sharedEvent);
        this.down = new _;
        this.move = new _;
        this.up = new _;
        this.scroll = new _;
        this._y = this._x = 0;
        this._cursor = ft.Default;
        this._buttonStates = new Dn
    };
    r["flambe.platform.BasicMouse"] = St;
    St.__name__ = ["flambe", "platform", "BasicMouse"];
    St.__interfaces__ = [Et];
    St.prototype = {
        submitDown: function(e, t, n) {
            this._buttonStates.exists(n) || (this._buttonStates.set(n, !0), this.prepare(e, t, Rt.toButton(n)), this._pointer.submitDown(e, t, this._source), this.down.emit(St._sharedEvent))
        },
        submitMove: function(e, t) {
            this.prepare(e, t, null);
            this._pointer.submitMove(e, t, this._source);
            this.move.emit(St._sharedEvent)
        },
        submitUp: function(e, t, n) {
            this._buttonStates.exists(n) && (this._buttonStates.remove(n), this.prepare(e, t, Rt.toButton(n)), this._pointer.submitUp(e, t, this._source), this.up.emit(St._sharedEvent))
        },
        submitScroll: function(e, t, n) {
            this._x = e;
            this._y = t;
            if (null == this.scroll._head) return !1;
            this.scroll.emit(n);
            return !0
        },
        prepare: function(e, t, n) {
            this._x = e;
            this._y = t;
            St._sharedEvent.init(St._sharedEvent.id + 1, e, t, n)
        },
        __class__: St
    };
    var xt = function() {};
    r["flambe.subsystem.PointerSystem"] = xt;
    xt.__name__ = ["flambe", "subsystem", "PointerSystem"];
    xt.prototype = {
        __class__: xt
    };
    var Tt = function(e, t, n) {
        null == n && (n = !1);
        null == t && (t = 0);
        null == e && (e = 0);
        this.down = new _;
        this.move = new _;
        this.up = new _;
        this._x = e;
        this._y = t;
        this._isDown = n
    };
    r["flambe.platform.BasicPointer"] = Tt;
    Tt.__name__ = ["flambe", "platform", "BasicPointer"];
    Tt.__interfaces__ = [xt];
    Tt.prototype = {
        submitDown: function(e, t, n) {
            if (!this._isDown) {
                this.submitMove(e, t, n);
                this._isDown = !0;
                var r = [],
                    i = J.hitTest(P.root, e, t);
                if (null != i) {
                    var s = i.owner;
                    do {
                        var o = s._compMap.Sprite_0;
                        null != o && r.push(o);
                        s = s.parent
                    } while (null != s)
                }
                this.prepare(e, t, i, n);
                for (e = 0; e < r.length;)
                    if (t = r[e], ++e, t.onPointerDown(Tt._sharedEvent), Tt._sharedEvent._stopped) return;
                this.down.emit(Tt._sharedEvent)
            }
        },
        submitMove: function(e, t, n) {
            if (!(e == this._x && t == this._y)) {
                var r = [],
                    i = J.hitTest(P.root, e, t);
                if (null != i) {
                    var s = i.owner;
                    do {
                        var o = s._compMap.Sprite_0;
                        null != o && r.push(o);
                        s = s.parent
                    } while (null != s)
                }
                this.prepare(e, t, i, n);
                for (e = 0; e < r.length;)
                    if (t = r[e], ++e, t.onPointerMove(Tt._sharedEvent), Tt._sharedEvent._stopped) return;
                this.move.emit(Tt._sharedEvent)
            }
        },
        submitUp: function(e, t, n) {
            if (this._isDown) {
                this.submitMove(e, t, n);
                this._isDown = !1;
                var r = [],
                    i = J.hitTest(P.root, e, t);
                if (null != i) {
                    var s = i.owner;
                    do {
                        var o = s._compMap.Sprite_0;
                        null != o && r.push(o);
                        s = s.parent
                    } while (null != s)
                }
                this.prepare(e, t, i, n);
                for (e = 0; e < r.length;)
                    if (t = r[e], ++e, t.onPointerUp(Tt._sharedEvent), Tt._sharedEvent._stopped) return;
                this.up.emit(Tt._sharedEvent)
            }
        },
        prepare: function(e, t, n, r) {
            this._x = e;
            this._y = t;
            Tt._sharedEvent.init(Tt._sharedEvent.id + 1, e, t, n, r)
        },
        __class__: Tt
    };
    var Nt = function(e, t, n) {
        this._parent = null;
        this.rootX = this.rootY = 0;
        this._disposed = !1;
        this.root = e;
        this._width = t;
        this._height = n
    };
    r["flambe.platform.BasicTexture"] = Nt;
    Nt.__name__ = ["flambe", "platform", "BasicTexture"];
    Nt.__interfaces__ = [ot];
    Nt.__super__ = gt;
    Nt.prototype = e(gt.prototype, {
        onDisposed: function() {
            null == this._parent && this.root.dispose()
        },
        get_width: function() {
            return this._width
        },
        get_height: function() {
            return this._height
        },
        __class__: Nt,
        __properties__: {
            get_height: "get_height",
            get_width: "get_width"
        }
    });
    var Ct = function() {};
    r["flambe.subsystem.TouchSystem"] = Ct;
    Ct.__name__ = ["flambe", "subsystem", "TouchSystem"];
    var kt = function(e, t) {
        null == t && (t = 4);
        this._pointer = e;
        this._maxPoints = t;
        this._pointMap = new Dn;
        this._points = [];
        this.down = new _;
        this.move = new _;
        this.up = new _
    };
    r["flambe.platform.BasicTouch"] = kt;
    kt.__name__ = ["flambe", "platform", "BasicTouch"];
    kt.__interfaces__ = [Ct];
    kt.prototype = {
        submitDown: function(e, t, n) {
            if (!this._pointMap.exists(e)) {
                var r = new pt(e);
                r.init(t, n);
                this._pointMap.set(e, r);
                this._points.push(r);
                null == this._pointerTouch && (this._pointerTouch = r, this._pointer.submitDown(t, n, r._source));
                this.down.emit(r)
            }
        },
        submitMove: function(e, t, n) {
            e = this._pointMap.get(e);
            null != e && (e.init(t, n), this._pointerTouch == e && this._pointer.submitMove(t, n, e._source), this.move.emit(e))
        },
        submitUp: function(e, t, n) {
            var r = this._pointMap.get(e);
            null != r && (r.init(t, n), this._pointMap.remove(e), l.remove(this._points, r), this._pointerTouch == r && (this._pointerTouch = null, this._pointer.submitUp(t, n, r._source)), this.up.emit(r))
        },
        __class__: kt
    };
    var Lt = function() {};
    r["flambe.sound.Sound"] = Lt;
    Lt.__name__ = ["flambe", "sound", "Sound"];
    Lt.__interfaces__ = [R];
    Lt.prototype = {
        __class__: Lt
    };
    var At = function() {
        this._disposed = !1;
        this._playback = new Mt(this)
    };
    r["flambe.platform.DummySound"] = At;
    At.__name__ = ["flambe", "platform", "DummySound"];
    At.__interfaces__ = [Lt];
    At.getInstance = function() {
        null == At._instance && (At._instance = new At);
        return At._instance
    };
    At.__super__ = gt;
    At.prototype = e(gt.prototype, {
        play: function() {
            return this._playback
        },
        loop: function() {
            return this._playback
        },
        onDisposed: function() {},
        __class__: At
    });
    var Ot = function() {};
    r["flambe.sound.Playback"] = Ot;
    Ot.__name__ = ["flambe", "sound", "Playback"];
    Ot.__interfaces__ = [E];
    Ot.prototype = {
        __class__: Ot
    };
    var Mt = function(e) {
        this._sound = e;
        this.volume = new D(0);
        this._complete = new L(!0)
    };
    r["flambe.platform.DummyPlayback"] = Mt;
    Mt.__name__ = ["flambe", "platform", "DummyPlayback"];
    Mt.__interfaces__ = [Ot];
    Mt.prototype = {
        get_sound: function() {
            return this._sound
        },
        set_paused: function() {
            return !0
        },
        dispose: function() {},
        __class__: Mt,
        __properties__: {
            get_sound: "get_sound",
            set_paused: "set_paused"
        }
    };
    var _t = function() {};
    r["flambe.subsystem.StorageSystem"] = _t;
    _t.__name__ = ["flambe", "subsystem", "StorageSystem"];
    _t.prototype = {
        __class__: _t
    };
    var Dt = function() {
        this.clear()
    };
    r["flambe.platform.DummyStorage"] = Dt;
    Dt.__name__ = ["flambe", "platform", "DummyStorage"];
    Dt.__interfaces__ = [_t];
    Dt.prototype = {
        set: function(e, t) {
            this._hash.set(e, t);
            return !0
        },
        get: function(e, t) {
            return this._hash.exists(e) ? this._hash.get(e) : t
        },
        clear: function() {
            this._hash = new Hn
        },
        __class__: Dt
    };
    var Pt = function() {
        this.down = new _;
        this.move = new _;
        this.up = new _
    };
    r["flambe.platform.DummyTouch"] = Pt;
    Pt.__name__ = ["flambe", "platform", "DummyTouch"];
    Pt.__interfaces__ = [Ct];
    Pt.prototype = {
        __class__: Pt
    };
    var Ht = function() {
        this._entries = []
    };
    r["flambe.platform.EventGroup"] = Ht;
    Ht.__name__ = ["flambe", "platform", "EventGroup"];
    Ht.__interfaces__ = [E];
    Ht.prototype = {
        addListener: function(e, t, n) {
            e.addEventListener(t, n, !1);
            this._entries.push(new Bt(e, t, n))
        },
        addDisposingListener: function(e, t, n) {
            var r = this;
            this.addListener(e, t, function(e) {
                r.dispose();
                n(e)
            })
        },
        dispose: function() {
            for (var e = 0, t = this._entries; e < t.length;) {
                var n = t[e];
                ++e;
                n.dispatcher.removeEventListener(n.type, n.listener, !1)
            }
            this._entries = []
        },
        __class__: Ht
    };
    var Bt = function(e, t, n) {
        this.dispatcher = e;
        this.type = t;
        this.listener = n
    };
    r["flambe.platform._EventGroup.Entry"] = Bt;
    Bt.__name__ = ["flambe", "platform", "_EventGroup", "Entry"];
    Bt.prototype = {
        __class__: Bt
    };
    var jt = function() {};
    r["flambe.platform.InternalGraphics"] = jt;
    jt.__name__ = ["flambe", "platform", "InternalGraphics"];
    jt.__interfaces__ = [nt];
    jt.prototype = {
        __class__: jt
    };
    var Ft = function() {};
    r["flambe.subsystem.RendererSystem"] = Ft;
    Ft.__name__ = ["flambe", "subsystem", "RendererSystem"];
    Ft.prototype = {
        __class__: Ft
    };
    var It = function() {};
    r["flambe.platform.InternalRenderer"] = It;
    It.__name__ = ["flambe", "platform", "InternalRenderer"];
    It.__interfaces__ = [Ft];
    It.prototype = {
        __class__: It
    };
    var qt = function() {
        this._tickables = []
    };
    r["flambe.platform.MainLoop"] = qt;
    qt.__name__ = ["flambe", "platform", "MainLoop"];
    qt.updateEntity = function(e, t) {
        var n = e._compMap.SpeedAdjuster_6;
        if (null != n && (n._realDt = t, t *= n.scale._value, 0 >= t)) {
            n.onUpdate(t);
            return
        }
        for (n = e.firstComponent; null != n;) {
            var r = n.next;
            n.onUpdate(t);
            n = r
        }
        for (n = e.firstChild; null != n;) r = n.next, qt.updateEntity(n, t), n = r
    };
    qt.prototype = {
        update: function(e) {
            if (!(0 >= e)) {
                1 < e && (e = 1);
                for (var t = 0; t < this._tickables.length;) {
                    var n = this._tickables[t];
                    null == n || n.update(e) ? this._tickables.splice(t, 1) : ++t
                }
                P.volume.update(e);
                qt.updateEntity(P.root, e)
            }
        },
        render: function(e) {
            var t = e.graphics;
            null != t && (e.willRender(), J.render(P.root, t), e.didRender())
        },
        addTickable: function(e) {
            this._tickables.push(e)
        },
        __class__: qt
    };
    var Rt = function() {};
    r["flambe.platform.MouseCodes"] = Rt;
    Rt.__name__ = ["flambe", "platform", "MouseCodes"];
    Rt.toButton = function(e) {
        switch (e) {
            case 0:
                return at.Left;
            case 1:
                return at.Middle;
            case 2:
                return at.Right
        }
        return at.Unknown(e)
    };
    var Ut = function() {};
    r["flambe.platform.TextureRoot"] = Ut;
    Ut.__name__ = ["flambe", "platform", "TextureRoot"];
    var zt = function() {};
    r["flambe.platform.Tickable"] = zt;
    zt.__name__ = ["flambe", "platform", "Tickable"];
    zt.prototype = {
        __class__: zt
    };
    var Wt = function(e) {
        this._firstDraw = !1;
        this._canvasCtx = e.getContext("2d")
    };
    r["flambe.platform.html.CanvasGraphics"] = Wt;
    Wt.__name__ = ["flambe", "platform", "html", "CanvasGraphics"];
    Wt.__interfaces__ = [jt];
    Wt.prototype = {
        save: function() {
            this._canvasCtx.save()
        },
        transform: function(e, t, n, r, i, s) {
            this._canvasCtx.transform(e, t, n, r, i, s)
        },
        restore: function() {
            this._canvasCtx.restore()
        },
        drawTexture: function(e, t, n) {
            this.drawSubTexture(e, t, n, 0, 0, e.get_width(), e.get_height())
        },
        drawSubTexture: function(e, t, n, r, i, s, o) {
            this._firstDraw ? (this._firstDraw = !1, this._canvasCtx.globalCompositeOperation = "copy", this.drawSubTexture(e, t, n, r, i, s, o), this._canvasCtx.globalCompositeOperation = "source-over") : this._canvasCtx.drawImage(e.root.image, e.rootX + r | 0, e.rootY + i | 0, s | 0, o | 0, t | 0, n | 0, s | 0, o | 0)
        },
        fillRect: function(e, t, n, r, i) {
            if (this._firstDraw) this._firstDraw = !1, this._canvasCtx.globalCompositeOperation = "copy", this.fillRect(e, t, n, r, i), this._canvasCtx.globalCompositeOperation = "source-over";
            else {
                for (e = (16777215 & e).toString(16); 6 > e.length;) e = "0" + m.string(e);
                this._canvasCtx.fillStyle = "#" + m.string(e);
                this._canvasCtx.fillRect(t | 0, n | 0, r | 0, i | 0)
            }
        },
        multiplyAlpha: function(e) {
            this._canvasCtx.globalAlpha *= e
        },
        setBlendMode: function(e) {
            var t;
            switch (e[1]) {
                case 0:
                    t = "source-over";
                    break;
                case 1:
                    t = "lighter";
                    break;
                case 2:
                    t = "destination-in";
                    break;
                case 3:
                    t = "copy"
            }
            this._canvasCtx.globalCompositeOperation = t
        },
        applyScissor: function(e, t, n, r) {
            this._canvasCtx.beginPath();
            this._canvasCtx.rect(e | 0, t | 0, n | 0, r | 0);
            this._canvasCtx.clip()
        },
        willRender: function() {
            this._firstDraw = !0
        },
        didRender: function() {},
        __class__: Wt
    };
    var Xt = function(e) {
        this.graphics = new Wt(e);
        this._hasGPU = new L(!0)
    };
    r["flambe.platform.html.CanvasRenderer"] = Xt;
    Xt.__name__ = ["flambe", "platform", "html", "CanvasRenderer"];
    Xt.__interfaces__ = [It];
    Xt.prototype = {
        get_type: function() {
            return Sn.Canvas
        },
        createTextureFromImage: function(e) {
            e = new $t(Xt.CANVAS_TEXTURES ? tn.createCanvas(e) : e);
            return e.createTexture(e.width, e.height)
        },
        getCompressedTextureFormats: function() {
            return []
        },
        createCompressedTexture: function() {
            return null
        },
        willRender: function() {
            this.graphics.willRender()
        },
        didRender: function() {
            this.graphics.didRender()
        },
        __class__: Xt,
        __properties__: {
            get_type: "get_type"
        }
    };
    var Vt = function(e, t, n) {
        Nt.call(this, e, t, n)
    };
    r["flambe.platform.html.CanvasTexture"] = Vt;
    Vt.__name__ = ["flambe", "platform", "html", "CanvasTexture"];
    Vt.__super__ = Nt;
    Vt.prototype = e(Nt.prototype, {
        __class__: Vt
    });
    var $t = function(e) {
        this._graphics = null;
        this._disposed = !1;
        this.image = e;
        this.width = e.width;
        this.height = e.height
    };
    r["flambe.platform.html.CanvasTextureRoot"] = $t;
    $t.__name__ = ["flambe", "platform", "html", "CanvasTextureRoot"];
    $t.__interfaces__ = [Ut];
    $t.__super__ = gt;
    $t.prototype = e(gt.prototype, {
        createTexture: function(e, t) {
            return new Vt(this, e, t)
        },
        onDisposed: function() {
            this._graphics = this.image = null
        },
        __class__: $t
    });
    var Jt = function(e, t) {
        yt.call(this, e, t)
    };
    r["flambe.platform.html.HtmlAssetPackLoader"] = Jt;
    Jt.__name__ = ["flambe", "platform", "html", "HtmlAssetPackLoader"];
    Jt.detectImageFormats = function(e) {
        var t = [U.PNG, U.JPG, U.GIF],
            n = 2,
            r;
        r = window.document.createElement("img");
        r.onload = r.onerror = function() {
            1 == r.width && t.unshift(U.WEBP);
            --n;
            0 == n && e(t)
        };
        r.src = "data:image/webp;base64,UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==";
        var i;
        i = window.document.createElement("img");
        i.onload = i.onerror = function() {
            1 == i.width && t.unshift(U.JXR);
            --n;
            0 == n && e(t)
        };
        i.src = "data:image/vnd.ms-photo;base64,SUm8AQgAAAAFAAG8AQAQAAAASgAAAIC8BAABAAAAAQAAAIG8BAABAAAAAQAAAMC8BAABAAAAWgAAAMG8BAABAAAAHwAAAAAAAAAkw91vA07+S7GFPXd2jckNV01QSE9UTwAZAYBxAAAAABP/gAAEb/8AAQAAAQAAAA=="
    };
    Jt.detectAudioFormats = function() {
        var e;
        e = window.document.createElement("audio");
        if (null == e || null == n(e, e.canPlayType)) return [];
        var t = new s("\\b(iPhone|iPod|iPad|Android|Windows Phone)\\b", ""),
            r = window.navigator.userAgent;
        if (!nn.get_supported() && t.match(r)) return [];
        for (var t = [{
            format: U.M4A,
            mimeType: "audio/mp4; codecs=mp4a"
        }, {
            format: U.MP3,
            mimeType: "audio/mpeg"
        }, {
            format: U.OPUS,
            mimeType: "audio/ogg; codecs=opus"
        }, {
            format: U.OGG,
            mimeType: "audio/ogg; codecs=vorbis"
        }, {
            format: U.WAV,
            mimeType: "audio/wav"
        }], r = [], i = 0; i < t.length;) {
            var o = t[i];
            ++i;
            var u = "";
            try {
                u = e.canPlayType(o.mimeType)
            } catch (a) {}
            "" != u && r.push(o.format)
        }
        return r
    };
    Jt.supportsBlob = function() {
        if (Jt._detectBlobSupport) {
            Jt._detectBlobSupport = !1;
            if ((new s("\\bSilk\\b", "")).match(window.navigator.userAgent) || null == window.Blob) return !1;
            var e = new XMLHttpRequest;
            e.open("GET", ".", !0);
            if ("" != e.responseType) return !1;
            e.responseType = "blob";
            if ("blob" != e.responseType) return !1;
            Jt._URL = tn.loadExtension("URL").value
        }
        return null != Jt._URL && null != Jt._URL.createObjectURL
    };
    Jt.__super__ = yt;
    Jt.prototype = e(yt.prototype, {
        loadEntry: function(e, t) {
            var n = this;
            switch (t.format[1]) {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                    var r;
                    r = window.document.createElement("img");
                    var i = new Ht;
                    i.addDisposingListener(r, "load", function() {
                        Jt.supportsBlob() && Jt._URL.revokeObjectURL(r.src);
                        var e = n._platform.getRenderer().createTextureFromImage(r);
                        null != e ? n.handleLoad(t, e) : n.handleTextureError(t)
                    });
                    i.addDisposingListener(r, "error", function() {
                        n.handleError(t, "Failed to load image")
                    });
                    Jt.supportsBlob() ? this.download(e, t, "blob", function(e) {
                        r.src = Jt._URL.createObjectURL(e)
                    }) : r.src = e;
                    break;
                case 5:
                case 6:
                case 7:
                    this.download(e, t, "arraybuffer", function() {
                        var e = n._platform.getRenderer().createCompressedTexture(t.format, null);
                        null != e ? n.handleLoad(t, e) : n.handleTextureError(t)
                    });
                    break;
                case 8:
                case 9:
                case 10:
                case 11:
                case 12:
                    if (nn.get_supported()) this.download(e, t, "arraybuffer", function(e) {
                        nn.ctx.decodeAudioData(e, function(e) {
                            n.handleLoad(t, new nn(e))
                        }, function() {
                            n.handleLoad(t, At.getInstance())
                        })
                    });
                    else {
                        var s;
                        s = window.document.createElement("audio");
                        s.preload = "auto";
                        var o = ++Jt._mediaRefCount;
                        null == Jt._mediaElements && (Jt._mediaElements = new Dn);
                        Jt._mediaElements.set(o, s);
                        i = new Ht;
                        i.addDisposingListener(s, "canplaythrough", function() {
                            Jt._mediaElements.remove(o);
                            n.handleLoad(t, new Qt(s))
                        });
                        i.addDisposingListener(s, "error", function() {
                            Jt._mediaElements.remove(o);
                            var e = s.error.code;
                            3 == e || 4 == e ? n.handleLoad(t, At.getInstance()) : n.handleError(t, "Failed to load audio: " + s.error.code)
                        });
                        i.addListener(s, "progress", function() {
                            if (0 < s.buffered.length && 0 < s.duration) {
                                var e = s.buffered.end(0) / s.duration;
                                n.handleProgress(t, e * t.bytes | 0)
                            }
                        });
                        s.src = e;
                        s.load()
                    }
                    break;
                case 13:
                    this.download(e, t, "text", function(e) {
                        n.handleLoad(t, new wt(e))
                    })
            }
        },
        getAssetFormats: function(e) {
            var t = this;
            null == Jt._supportedFormats && (Jt._supportedFormats = new kn, Jt.detectImageFormats(function(e) {
                Jt._supportedFormats.set_result(t._platform.getRenderer().getCompressedTextureFormats().concat(e).concat(Jt.detectAudioFormats()).concat([U.Data]))
            }));
            Jt._supportedFormats.get(e)
        },
        download: function(e, t, n, r) {
            var i = this,
                s = null,
                o = null,
                u = 0,
                a = !1,
                f = function() {
                    a && (a = !1, window.clearInterval(u))
                },
                l = 3,
                c = function() {
                    --l;
                    return 0 <= l ? (o(), !0) : !1
                },
                o = function() {
                    f();
                    null != s && s.abort();
                    s = new XMLHttpRequest;
                    s.open("GET", e, !0);
                    s.responseType = n;
                    var o = 0;
                    s.onprogress = function(e) {
                        a || (a = !0, u = window.setInterval(function() {
                            4 != s.readyState && 5e3 < Date.now() - o && !c() && (f(), i.handleError(t, "Download stalled"))
                        }, 1e3));
                        o = Date.now();
                        i.handleProgress(t, e.loaded)
                    };
                    s.onerror = function() {
                        if (0 != s.status || !c()) f(), i.handleError(t, "HTTP error " + s.status)
                    };
                    s.onload = function() {
                        var e = s.response;
                        null == e && (e = s.responseText);
                        f();
                        r(e)
                    };
                    s.send()
                };
            o()
        },
        __class__: Jt
    });
    var Kt = function(e, t) {
        St.call(this, e);
        this._canvas = t
    };
    r["flambe.platform.html.HtmlMouse"] = Kt;
    Kt.__name__ = ["flambe", "platform", "html", "HtmlMouse"];
    Kt.__super__ = St;
    Kt.prototype = e(St.prototype, {
        __class__: Kt
    });
    var Qt = function(e) {
        this._disposed = !1;
        this.audioElement = e
    };
    r["flambe.platform.html.HtmlSound"] = Qt;
    Qt.__name__ = ["flambe", "platform", "html", "HtmlSound"];
    Qt.__interfaces__ = [Lt];
    Qt.__super__ = gt;
    Qt.prototype = e(gt.prototype, {
        play: function(e) {
            null == e && (e = 1);
            return new Gt(this, e, !1)
        },
        loop: function(e) {
            null == e && (e = 1);
            return new Gt(this, e, !0)
        },
        onDisposed: function() {
            this.audioElement = null
        },
        __class__: Qt
    });
    var Gt = function(e, t, n) {
        var r = this;
        this._sound = e;
        this._tickableAdded = !1;
        this._clonedElement = window.document.createElement("audio");
        this._clonedElement.loop = n;
        this._clonedElement.src = e.audioElement.src;
        this.volume = new D(t, function() {
            r.updateVolume()
        });
        this.updateVolume();
        this._complete = new L(!1);
        this.playAudio();
        P.hidden._value && this.set_paused(!0)
    };
    r["flambe.platform.html._HtmlSound.HtmlPlayback"] = Gt;
    Gt.__name__ = ["flambe", "platform", "html", "_HtmlSound", "HtmlPlayback"];
    Gt.__interfaces__ = [zt, Ot];
    Gt.prototype = {
        get_sound: function() {
            return this._sound
        },
        set_paused: function(e) {
            this._clonedElement.paused != e && (e ? this._clonedElement.pause() : this.playAudio());
            return e
        },
        update: function(e) {
            this.volume.update(e);
            this._complete.set__(this._clonedElement.ended);
            return this._complete._value || this._clonedElement.paused ? (this._tickableAdded = !1, this._volumeBinding.dispose(), this._hideBinding.dispose(), !0) : !1
        },
        dispose: function() {
            this.set_paused(!0);
            this._complete.set__(!0)
        },
        playAudio: function() {
            var e = this;
            this._clonedElement.play();
            this._tickableAdded || (k.instance.mainLoop.addTickable(this), this._tickableAdded = !0, this._volumeBinding = P.volume.get_changed().connect(function() {
                e.updateVolume()
            }), this._hideBinding = P.hidden.get_changed().connect(function(t) {
                t ? (e._wasPaused = e._clonedElement.paused, e.set_paused(!0)) : e.set_paused(e._wasPaused)
            }))
        },
        updateVolume: function() {
            this._clonedElement.volume = P.volume._value * this.volume._value
        },
        __class__: Gt,
        __properties__: {
            get_sound: "get_sound",
            set_paused: "set_paused"
        }
    };
    var Yt = function() {};
    r["flambe.subsystem.StageSystem"] = Yt;
    Yt.__name__ = ["flambe", "subsystem", "StageSystem"];
    Yt.prototype = {
        __class__: Yt
    };
    var Zt = function(e) {
        var t = this;
        this._canvas = e;
        this.resize = new Ln;
        this.scaleFactor = Zt.computeScaleFactor();
        1 != this.scaleFactor && (tn.setVendorStyle(this._canvas, "transform-origin", "top left"), tn.setVendorStyle(this._canvas, "transform", "scale(" + 1 / this.scaleFactor + ")"));
        tn.SHOULD_HIDE_MOBILE_BROWSER && (window.addEventListener("orientationchange", function() {
            tn.callLater(n(t, t.hideMobileBrowser), 200)
        }, !1), this.hideMobileBrowser());
        window.addEventListener("resize", n(this, this.onWindowResize), !1);
        this.onWindowResize(null);
        this.orientation = new L(null);
        null != window.orientation && (window.addEventListener("orientationchange", n(this, this.onOrientationChange), !1), this.onOrientationChange(null));
        this.fullscreen = new L(!1);
        tn.addVendorListener(window.document, "fullscreenchange", function() {
            t.updateFullscreen()
        }, !1);
        this.updateFullscreen()
    };
    r["flambe.platform.html.HtmlStage"] = Zt;
    Zt.__name__ = ["flambe", "platform", "html", "HtmlStage"];
    Zt.__interfaces__ = [Yt];
    Zt.computeScaleFactor = function() {
        var e = window.devicePixelRatio;
        null == e && (e = 1);
        var t = window.document.createElement("canvas").getContext("2d"),
            t = tn.loadExtension("backingStorePixelRatio", t).value;
        null == t && (t = 1);
        e /= t;
        t = window.screen.height;
        return 1536 < e * window.screen.width || 1536 < e * t ? 1 : e
    };
    Zt.prototype = {
        get_width: function() {
            return this._canvas.width
        },
        get_height: function() {
            return this._canvas.height
        },
        lockOrientation: function(e) {
            var t = tn.loadExtension("lockOrientation", window.screen).value;
            if (null != t) {
                var n;
                switch (e[1]) {
                    case 0:
                        n = "portrait";
                        break;
                    case 1:
                        n = "landscape"
                }
                t.apply(window.screen, [n]) || null
            }
        },
        requestFullscreen: function(e) {
            null == e && (e = !0);
            if (e) {
                var e = window.document.documentElement,
                    t = tn.loadFirstExtension(["requestFullscreen", "requestFullScreen"], e).value;
                null != t && t.apply(e, [])
            } else e = tn.loadFirstExtension(["cancelFullscreen", "cancelFullScreen"], window.document).value, null != e && v.callMethod(window.document, e, [])
        },
        onWindowResize: function() {
            var e = this._canvas.parentElement.getBoundingClientRect();
            this.resizeCanvas(e.width, e.height)
        },
        resizeCanvas: function(e, t) {
            var n = this.scaleFactor * e,
                r = this.scaleFactor * t;
            if (this._canvas.width == n && this._canvas.height == r) return !1;
            this._canvas.width = n | 0;
            this._canvas.height = r | 0;
            this.resize.emit();
            return !0
        },
        hideMobileBrowser: function() {
            var e = this,
                t = window.document.documentElement.style;
            t.height = window.innerHeight + 100 + "px";
            t.width = window.innerWidth + "px";
            t.overflow = "visible";
            tn.callLater(function() {
                tn.hideMobileBrowser();
                tn.callLater(function() {
                    t.height = window.innerHeight + "px";
                    e.onWindowResize(null)
                }, 100)
            })
        },
        onOrientationChange: function() {
            this.orientation.set__(tn.orientation(window.orientation))
        },
        updateFullscreen: function() {
            this.fullscreen.set__(!0 == tn.loadFirstExtension(["fullscreen", "fullScreen", "isFullScreen"], window.document).value)
        },
        __class__: Zt,
        __properties__: {
            get_height: "get_height",
            get_width: "get_width"
        }
    };
    var en = function(e) {
        this._storage = e
    };
    r["flambe.platform.html.HtmlStorage"] = en;
    en.__name__ = ["flambe", "platform", "html", "HtmlStorage"];
    en.__interfaces__ = [_t];
    en.prototype = {
        set: function(e, t) {
            var n;
            try {
                var r = new Mn;
                r.useCache = !0;
                r.useEnumIndex = !1;
                r.serialize(t);
                n = r.toString()
            } catch (i) {
                return !1
            }
            try {
                this._storage.setItem("flambe:" + e, n)
            } catch (s) {
                return !1
            }
            return !0
        },
        get: function(e, t) {
            var n = null;
            try {
                n = this._storage.getItem("flambe:" + e)
            } catch (r) {
                null
            }
            if (null != n) try {
                return _n.run(n)
            } catch (i) {
                null
            }
            return t
        },
        __class__: en
    };
    var tn = function() {};
    r["flambe.platform.html.HtmlUtil"] = tn;
    tn.__name__ = ["flambe", "platform", "html", "HtmlUtil"];
    tn.callLater = function(e, t) {
        null == t && (t = 0);
        window.setTimeout(e, t)
    };
    tn.hideMobileBrowser = function() {
        window.scrollTo(1, 0)
    };
    tn.loadExtension = function(e, t) {
        null == t && (t = window);
        var n = v.field(t, e);
        if (null != n) return {
            prefix: "",
            field: e,
            value: n
        };
        for (var n = e.charAt(0).toUpperCase() + l.substr(e, 1, null), r = 0, i = tn.VENDOR_PREFIXES; r < i.length;) {
            var s = i[r];
            ++r;
            var o = s + n,
                u = v.field(t, o);
            if (null != u) return {
                prefix: s,
                field: o,
                value: u
            }
        }
        return {
            prefix: null,
            field: null,
            value: null
        }
    };
    tn.loadFirstExtension = function(e, t) {
        for (var n = 0; n < e.length;) {
            var r = e[n];
            ++n;
            r = tn.loadExtension(r, t);
            if (null != r.field) return r
        }
        return {
            prefix: null,
            field: null,
            value: null
        }
    };
    tn.polyfill = function(e, t) {
        null == t && (t = window);
        var n = tn.loadExtension(e, t).value;
        if (null == n) return !1;
        t[e] = n;
        return !0
    };
    tn.setVendorStyle = function(e, t, n) {
        for (var e = e.style, r = 0, i = tn.VENDOR_PREFIXES; r < i.length;) {
            var s = i[r];
            ++r;
            e.setProperty("-" + s + "-" + t, n)
        }
        e.setProperty(t, n)
    };
    tn.addVendorListener = function(e, t, n, r) {
        for (var i = 0, s = tn.VENDOR_PREFIXES; i < s.length;) {
            var o = s[i];
            ++i;
            e.addEventListener(o + t, n, r)
        }
        e.addEventListener(t, n, r)
    };
    tn.orientation = function(e) {
        switch (e) {
            case -90:
            case 90:
                return it.Landscape;
            default:
                return it.Portrait
        }
    };
    tn.createEmptyCanvas = function(e, t) {
        var n;
        n = window.document.createElement("canvas");
        n.width = e;
        n.height = t;
        return n
    };
    tn.createCanvas = function(e) {
        var t = tn.createEmptyCanvas(e.width, e.height),
            n = t.getContext("2d");
        n.save();
        n.globalCompositeOperation = "copy";
        n.drawImage(e, 0, 0);
        n.restore();
        return t
    };
    tn.fixAndroidMath = function() {
        if (0 <= window.navigator.userAgent.indexOf("Linux; U; Android 4")) {
            var e = Math.sin,
                t = Math.cos;
            Math.sin = function(t) {
                return 0 == t ? 0 : e(t)
            };
            Math.cos = function(e) {
                return 0 == e ? 1 : t(e)
            }
        }
    };
    var nn = function(e) {
        this._disposed = !1;
        this.buffer = e
    };
    r["flambe.platform.html.WebAudioSound"] = nn;
    nn.__name__ = ["flambe", "platform", "html", "WebAudioSound"];
    nn.__interfaces__ = [Lt];
    nn.__properties__ = {
        get_supported: "get_supported"
    };
    nn.get_supported = function() {
        if (nn._detectSupport) {
            nn._detectSupport = !1;
            var e = tn.loadExtension("AudioContext").value;
            null != e && (nn.ctx = new e, nn.gain = nn.createGain(), nn.gain.connect(nn.ctx.destination), P.volume.watch(function(e) {
                nn.gain.gain.value = e
            }))
        }
        return null != nn.ctx
    };
    nn.createGain = function() {
        return null != nn.ctx.createGain ? nn.ctx.createGain() : nn.ctx.createGainNode()
    };
    nn.start = function(e, t) {
        null != e.start ? e.start(t) : e.noteOn(t)
    };
    nn.__super__ = gt;
    nn.prototype = e(gt.prototype, {
        play: function(e) {
            null == e && (e = 1);
            return new rn(this, e, !1)
        },
        loop: function(e) {
            null == e && (e = 1);
            return new rn(this, e, !0)
        },
        get_duration: function() {
            return this.buffer.duration
        },
        onDisposed: function() {
            this.buffer = null
        },
        __class__: nn,
        __properties__: {
            get_duration: "get_duration"
        }
    });
    var rn = function(e, t, n) {
        var r = this;
        this._sound = e;
        this._head = nn.gain;
        this._complete = new L(!1);
        this._sourceNode = nn.ctx.createBufferSource();
        this._sourceNode.buffer = e.buffer;
        this._sourceNode.loop = n;
        this._sourceNode.onended = function() {
            r._complete.set__(!0)
        };
        nn.start(this._sourceNode, 0);
        this.playAudio();
        this.volume = new D(t, function(e) {
            r.setVolume(e)
        });
        1 != t && this.setVolume(t);
        P.hidden._value && this.set_paused(!0)
    };
    r["flambe.platform.html._WebAudioSound.WebAudioPlayback"] = rn;
    rn.__name__ = ["flambe", "platform", "html", "_WebAudioSound", "WebAudioPlayback"];
    rn.__interfaces__ = [zt, Ot];
    rn.prototype = {
        get_sound: function() {
            return this._sound
        },
        set_paused: function(e) {
            e != 0 <= this._pausedAt && (e ? (this._sourceNode.disconnect(), this._pausedAt = this.get_position()) : this.playAudio());
            return e
        },
        get_position: function() {
            return this._complete._value ? this._sound.get_duration() : 0 <= this._pausedAt ? this._pausedAt : (nn.ctx.currentTime - this._startedAt) % this._sound.get_duration()
        },
        update: function(e) {
            this.volume.update(e);
            3 == this._sourceNode.playbackState && this._complete.set__(!0);
            return this._complete._value || 0 <= this._pausedAt ? (this._tickableAdded = !1, this._hideBinding.dispose(), !0) : !1
        },
        dispose: function() {
            this.set_paused(!0);
            this._complete.set__(!0)
        },
        setVolume: function(e) {
            null == this._gainNode && (this._gainNode = nn.createGain(), this.insertNode(this._gainNode));
            this._gainNode.gain.value = e
        },
        insertNode: function(e) {
            0 <= this._pausedAt || (this._sourceNode.disconnect(), this._sourceNode.connect(e));
            e.connect(this._head);
            this._head = e
        },
        playAudio: function() {
            var e = this;
            this._sourceNode.connect(this._head);
            this._startedAt = nn.ctx.currentTime;
            this._pausedAt = -1;
            this._tickableAdded || (k.instance.mainLoop.addTickable(this), this._tickableAdded = !0, this._hideBinding = P.hidden.get_changed().connect(function(t) {
                t ? (e._wasPaused = 0 <= e._pausedAt, e.set_paused(!0)) : e.set_paused(e._wasPaused)
            }))
        },
        __class__: rn,
        __properties__: {
            get_position: "get_position",
            get_sound: "get_sound",
            set_paused: "set_paused"
        }
    };
    var sn = function() {
        this._width = this._height = -1;
        this._transitor = null;
        this.scenes = [];
        this.occludedScenes = [];
        this._root = new T
    };
    r["flambe.scene.Director"] = sn;
    sn.__name__ = ["flambe", "scene", "Director"];
    sn.__super__ = S;
    sn.prototype = e(S.prototype, {
        get_name: function() {
            return "Director_5"
        },
        setSize: function(e, t) {
            this._width = e;
            this._height = t;
            return this
        },
        pushScene: function(e, t) {
            var n = this;
            this.completeTransition();
            var r = this.get_topScene();
            null != r ? this.playTransition(r, e, t, function() {
                n.hide(r)
            }) : (this.add(e), this.invalidateVisibility())
        },
        popScene: function(e) {
            var t = this;
            this.completeTransition();
            var n = this.get_topScene();
            if (null != n) {
                this.scenes.pop();
                var r = this.get_topScene();
                null != r ? this.playTransition(n, r, e, function() {
                    t.hideAndDispose(n)
                }) : (this.hideAndDispose(n), this.invalidateVisibility())
            }
        },
        unwindToScene: function(e, t) {
            var n = this;
            this.completeTransition();
            var r = this.get_topScene();
            if (null != r) {
                if (r != e) {
                    for (this.scenes.pop(); 0 < this.scenes.length && this.scenes[this.scenes.length - 1] != e;) this.scenes.pop().dispose();
                    this.playTransition(r, e, t, function() {
                        n.hideAndDispose(r)
                    })
                }
            } else this.pushScene(e, t)
        },
        onAdded: function() {
            this.owner.addChild(this._root)
        },
        onRemoved: function() {
            this.completeTransition();
            for (var e = 0, t = this.scenes; e < t.length;) {
                var n = t[e];
                ++e;
                n.dispose()
            }
            this.scenes = [];
            this.occludedScenes = [];
            this._root.dispose()
        },
        onUpdate: function(e) {
            null != this._transitor && this._transitor.update(e) && this.completeTransition()
        },
        get_topScene: function() {
            var e = this.scenes.length;
            return 0 < e ? this.scenes[e - 1] : null
        },
        add: function(e) {
            var t = this.get_topScene();
            null != t && this._root.removeChild(t);
            l.remove(this.scenes, e);
            this.scenes.push(e);
            this._root.addChild(e)
        },
        hide: function(e) {
            e = e._compMap.Scene_4;
            null != e && e.hidden.emit()
        },
        hideAndDispose: function(e) {
            this.hide(e);
            e.dispose()
        },
        show: function(e) {
            e = e._compMap.Scene_4;
            null != e && e.shown.emit()
        },
        invalidateVisibility: function() {
            for (var e = this.scenes.length; 0 < e;) {
                var t = this.scenes[--e]._compMap.Scene_4;
                if (null == t || t.opaque) break
            }
            this.occludedScenes = 0 < this.scenes.length ? this.scenes.slice(e, this.scenes.length - 1) : [];
            e = this.get_topScene();
            null != e && this.show(e)
        },
        completeTransition: function() {
            null != this._transitor && (this._transitor.complete(), this._transitor = null, this.invalidateVisibility())
        },
        playTransition: function(e, t, n, r) {
            this.completeTransition();
            this.add(t);
            null != n ? (this.occludedScenes.push(e), this._transitor = new on(e, t, n, r), this._transitor.init(this)) : (r(), this.invalidateVisibility())
        },
        get_width: function() {
            return 0 > this._width ? P._platform.getStage().get_width() : this._width
        },
        get_height: function() {
            return 0 > this._height ? P._platform.getStage().get_height() : this._height
        },
        __class__: sn,
        __properties__: e(S.prototype.__properties__, {
            get_height: "get_height",
            get_width: "get_width",
            get_topScene: "get_topScene"
        })
    });
    var on = function(e, t, n, r) {
        this._from = e;
        this._to = t;
        this._transition = n;
        this._onComplete = r
    };
    r["flambe.scene._Director.Transitor"] = on;
    on.__name__ = ["flambe", "scene", "_Director", "Transitor"];
    on.prototype = {
        init: function(e) {
            this._transition.init(e, this._from, this._to)
        },
        update: function(e) {
            return this._transition.update(e)
        },
        complete: function() {
            this._transition.complete();
            this._onComplete()
        },
        __class__: on
    };
    var un = function() {};
    r["flambe.scene.Transition"] = un;
    un.__name__ = ["flambe", "scene", "Transition"];
    un.prototype = {
        init: function(e, t, n) {
            this._director = e;
            this._from = t;
            this._to = n
        },
        update: function() {
            return !0
        },
        complete: function() {},
        __class__: un
    };
    var an = function(e, t) {
        this._duration = e;
        this._ease = null != t ? t : F.linear
    };
    r["flambe.scene.TweenTransition"] = an;
    an.__name__ = ["flambe", "scene", "TweenTransition"];
    an.__super__ = un;
    an.prototype = e(un.prototype, {
        init: function(e, t, n) {
            un.prototype.init.call(this, e, t, n);
            this._elapsed = 0
        },
        update: function(e) {
            this._elapsed += e;
            return this._elapsed >= this._duration
        },
        interp: function(e, t) {
            return e + (t - e) * this._ease(this._elapsed / this._duration)
        },
        __class__: an
    });
    var fn = function(e, t) {
        an.call(this, e, t)
    };
    r["flambe.scene.FadeTransition"] = fn;
    fn.__name__ = ["flambe", "scene", "FadeTransition"];
    fn.__super__ = an;
    fn.prototype = e(an.prototype, {
        init: function(e, t, n) {
            an.prototype.init.call(this, e, t, n);
            e = this._to._compMap.Sprite_0;
            null == e && this._to.add(e = new J);
            e.alpha.set__(0)
        },
        update: function(e) {
            e = an.prototype.update.call(this, e);
            this._to._compMap.Sprite_0.alpha.set__(this.interp(0, 1));
            return e
        },
        complete: function() {
            this._to._compMap.Sprite_0.alpha.set__(1)
        },
        __class__: fn
    });
    var ln = function(e) {
        null == e && (e = !0);
        this.opaque = e;
        this.shown = new Ln;
        this.hidden = new Ln
    };
    r["flambe.scene.Scene"] = ln;
    ln.__name__ = ["flambe", "scene", "Scene"];
    ln.__super__ = S;
    ln.prototype = e(S.prototype, {
        get_name: function() {
            return "Scene_4"
        },
        __class__: ln
    });
    var cn = function(e, t) {
        this._direction = 2;
        an.call(this, e, t)
    };
    r["flambe.scene.SlideTransition"] = cn;
    cn.__name__ = ["flambe", "scene", "SlideTransition"];
    cn.__super__ = an;
    cn.prototype = e(an.prototype, {
        left: function() {
            this._direction = 2;
            return this
        },
        init: function(e, t, n) {
            an.prototype.init.call(this, e, t, n);
            switch (this._direction) {
                case 0:
                    this._x = 0;
                    this._y = -this._director.get_height();
                    break;
                case 1:
                    this._x = 0;
                    this._y = this._director.get_height();
                    break;
                case 2:
                    this._x = -this._director.get_width();
                    this._y = 0;
                    break;
                case 3:
                    this._x = this._director.get_width(), this._y = 0
            }
            e = this._from._compMap.Sprite_0;
            null == e && this._from.add(e = new J);
            e.setXY(0, 0);
            e = this._to._compMap.Sprite_0;
            null == e && this._to.add(e = new J);
            e.setXY(-this._x, -this._y)
        },
        update: function(e) {
            e = an.prototype.update.call(this, e);
            this._from._compMap.Sprite_0.setXY(this.interp(0, this._x), this.interp(0, this._y));
            this._to._compMap.Sprite_0.setXY(this.interp(-this._x, 0), this.interp(-this._y, 0));
            return e
        },
        complete: function() {
            this._from._compMap.Sprite_0.setXY(0, 0);
            this._to._compMap.Sprite_0.setXY(0, 0)
        },
        __class__: cn
    });
    var hn = function() {};
    r["flambe.script.Action"] = hn;
    hn.__name__ = ["flambe", "script", "Action"];
    hn.prototype = {
        __class__: hn
    };
    var pn = function(e, t, n, r) {
        this._value = e;
        this._to = t;
        this._seconds = n;
        this._easing = r
    };
    r["flambe.script.AnimateTo"] = pn;
    pn.__name__ = ["flambe", "script", "AnimateTo"];
    pn.__interfaces__ = [hn];
    pn.prototype = {
        update: function(e) {
            null == this._tween && (this._tween = new q(this._value._value, this._to, this._seconds, this._easing), this._value.set_behavior(this._tween), this._value.update(e));
            if (this._value._behavior != this._tween) {
                var t = this._tween.elapsed - this._seconds;
                this._tween = null;
                return 0 < t ? e - t : 0
            }
            return -1
        },
        __class__: pn
    };
    var dn = function(e) {
        this._fn = e
    };
    r["flambe.script.CallFunction"] = dn;
    dn.__name__ = ["flambe", "script", "CallFunction"];
    dn.__interfaces__ = [hn];
    dn.prototype = {
        update: function() {
            this._fn();
            return 0
        },
        __class__: dn
    };
    var vn = function(e) {
        this._duration = e;
        this._elapsed = 0
    };
    r["flambe.script.Delay"] = vn;
    vn.__name__ = ["flambe", "script", "Delay"];
    vn.__interfaces__ = [hn];
    vn.prototype = {
        update: function(e) {
            this._elapsed += e;
            if (this._elapsed >= this._duration) {
                var t = this._elapsed - this._duration;
                this._elapsed = 0;
                return e - t
            }
            return -1
        },
        __class__: vn
    };
    var mn = function(e) {
        this._completedActions = [];
        this._runningActions = null != e ? e.slice() : []
    };
    r["flambe.script.Parallel"] = mn;
    mn.__name__ = ["flambe", "script", "Parallel"];
    mn.__interfaces__ = [hn];
    mn.prototype = {
        update: function(e, t) {
            for (var n = !0, r = 0, i = 0, s = this._runningActions.length; i < s;) {
                var o = i++,
                    u = this._runningActions[o];
                if (null != u) {
                    var a = u.update(e, t);
                    0 <= a ? (this._runningActions[o] = null, this._completedActions.push(u), a > r && (r = a)) : n = !1
                }
            }
            return n ? (this._runningActions = this._completedActions, this._completedActions = [], r) : -1
        },
        __class__: mn
    };
    var gn = function(e, t) {
        null == t && (t = -1);
        this._action = e;
        this._remaining = this._count = t
    };
    r["flambe.script.Repeat"] = gn;
    gn.__name__ = ["flambe", "script", "Repeat"];
    gn.__interfaces__ = [hn];
    gn.prototype = {
        update: function(e, t) {
            if (0 == this._count) return 0;
            var n = this._action.update(e, t);
            return 0 < this._count && 0 <= n && 0 == --this._remaining ? (this._remaining = this._count, n) : -1
        },
        __class__: gn
    };
    var yn = function() {
        this.stopAll()
    };
    r["flambe.script.Script"] = yn;
    yn.__name__ = ["flambe", "script", "Script"];
    yn.__super__ = S;
    yn.prototype = e(S.prototype, {
        get_name: function() {
            return "Script_3"
        },
        run: function(e) {
            e = new bn(e);
            this._handles.push(e);
            return e
        },
        stopAll: function() {
            this._handles = []
        },
        onUpdate: function(e) {
            for (var t = 0; t < this._handles.length;) {
                var n = this._handles[t];
                n.removed || 0 <= n.action.update(e, this.owner) ? this._handles.splice(t, 1) : ++t
            }
        },
        __class__: yn
    });
    var bn = function(e) {
        this.removed = !1;
        this.action = e
    };
    r["flambe.script._Script.Handle"] = bn;
    bn.__name__ = ["flambe", "script", "_Script", "Handle"];
    bn.__interfaces__ = [E];
    bn.prototype = {
        dispose: function() {
            this.removed = !0;
            this.action = null
        },
        __class__: bn
    };
    var wn = function(e) {
        this._idx = 0;
        this._runningActions = null != e ? e.slice() : []
    };
    r["flambe.script.Sequence"] = wn;
    wn.__name__ = ["flambe", "script", "Sequence"];
    wn.__interfaces__ = [hn];
    wn.prototype = {
        add: function(e) {
            this._runningActions.push(e)
        },
        update: function(e, t) {
            for (var n = 0;;) {
                var r = this._runningActions[this._idx];
                if (null != r)
                    if (r = r.update(e - n, t), 0 <= r) n += r;
                    else return -1;
                    ++this._idx;
                if (this._idx >= this._runningActions.length) {
                    this._idx = 0;
                    break
                } else if (n > e) return -1
            }
            return n
        },
        __class__: wn
    };
    var En = function(e, t, n) {
        this._strengthX = e;
        this._strengthY = t;
        this._duration = n;
        this._elapsed = 0
    };
    r["flambe.script.Shake"] = En;
    En.__name__ = ["flambe", "script", "Shake"];
    En.__interfaces__ = [hn];
    En.prototype = {
        update: function(e, t) {
            var n = t._compMap.Sprite_0;
            null == this._jitterX && (this._jitterX = new I(n.x._value, this._strengthX), this._jitterY = new I(n.y._value, this._strengthY), n.x.set_behavior(this._jitterX), n.y.set_behavior(this._jitterY));
            this._elapsed += e;
            if (this._elapsed >= this._duration) {
                var r = this._elapsed - this._duration;
                n.x._behavior == this._jitterX && n.x.set__(this._jitterX.base);
                n.y._behavior == this._jitterY && n.y.set__(this._jitterY.base);
                this._jitterY = this._jitterX = null;
                this._elapsed = 0;
                return e - r
            }
            return -1
        },
        __class__: En
    };
    var Sn = r["flambe.subsystem.RendererType"] = {
        __ename__: ["flambe", "subsystem", "RendererType"],
        __constructs__: ["Stage3D", "WebGL", "Canvas"]
    };
    Sn.Stage3D = ["Stage3D", 0];
    Sn.Stage3D.toString = i;
    Sn.Stage3D.__enum__ = Sn;
    Sn.WebGL = ["WebGL", 1];
    Sn.WebGL.toString = i;
    Sn.WebGL.__enum__ = Sn;
    Sn.Canvas = ["Canvas", 2];
    Sn.Canvas.toString = i;
    Sn.Canvas.__enum__ = Sn;
    var xn = function() {};
    r["flambe.util.Assert"] = xn;
    xn.__name__ = ["flambe", "util", "Assert"];
    xn.that = function() {};
    var Tn = function() {};
    r["flambe.util.BitSets"] = Tn;
    Tn.__name__ = ["flambe", "util", "BitSets"];
    Tn.set = function(e, t, n) {
        return n ? e | t : e & ~t
    };
    var Nn = function() {
        this.mainSection = new Hn;
        this.sections = new Hn
    };
    r["flambe.util.Config"] = Nn;
    Nn.__name__ = ["flambe", "util", "Config"];
    Nn.parse = function(e) {
        for (var t = new Nn, n = new s("^\\s*;", ""), r = new s("^\\s*\\[\\s*([^\\]]*)\\s*\\]", ""), i = new s("^\\s*([\\w\\.\\-_]+)\\s*=\\s*(.*)", ""), o = t.mainSection, u = 0, e = (new s("\r\n|\r|\n", "g")).split(e); u < e.length;) {
            var a = e[u];
            ++u;
            if (!n.match(a))
                if (r.match(a)) a = r.matched(1), t.sections.exists(a) ? o = t.sections.get(a) : (o = new Hn, t.sections.set(a, o));
                else if (i.match(a)) {
                var a = i.matched(1),
                    f = i.matched(2),
                    c = f.charCodeAt(0);
                if ((34 == c || 39 == c) && f.charCodeAt(f.length - 1) == c) f = l.substr(f, 1, f.length - 2);
                f = y.replace(y.replace(y.replace(y.replace(y.replace(y.replace(f, "\\n", "\n"), "\\r", "\r"), "\\t", "    "), "\\'", "'"), '\\"', '"'), "\\\\", "\\");
                o.set(a, f)
            }
        }
        return t
    };
    Nn.prototype = {
        __class__: Nn
    };
    var Cn = function(e) {
        this.config = e;
        this.missingTranslation = new _
    };
    r["flambe.util.MessageBundle"] = Cn;
    Cn.__name__ = ["flambe", "util", "MessageBundle"];
    Cn.parse = function(e) {
        return new Cn(Nn.parse(e))
    };
    Cn.prototype = {
        __class__: Cn
    };
    var kn = function() {
        this.success = new _;
        this.error = new _;
        this.progressChanged = new Ln;
        this.hasResult = !1;
        this._total = this._progress = 0
    };
    r["flambe.util.Promise"] = kn;
    kn.__name__ = ["flambe", "util", "Promise"];
    kn.prototype = {
        set_result: function(e) {
            if (this.hasResult) throw "Promise result already assigned";
            this._result = e;
            this.hasResult = !0;
            this.success.emit(e);
            return e
        },
        get: function(e) {
            return this.hasResult ? (e(this._result), null) : this.success.connect(e).once()
        },
        set_progress: function(e) {
            this._progress != e && (this._progress = e, this.progressChanged.emit());
            return e
        },
        set_total: function(e) {
            this._total != e && (this._total = e, this.progressChanged.emit());
            return e
        },
        __class__: kn,
        __properties__: {
            set_total: "set_total",
            set_progress: "set_progress",
            set_result: "set_result"
        }
    };
    var Ln = function(e) {
        O.call(this, e)
    };
    r["flambe.util.Signal0"] = Ln;
    Ln.__name__ = ["flambe", "util", "Signal0"];
    Ln.__super__ = O;
    Ln.prototype = e(O.prototype, {
        connect: function(e, t) {
            null == t && (t = !1);
            return this.connectImpl(e, t)
        },
        emit: function() {
            var e = this;
            this._head == O.DISPATCHING_SENTINEL ? this.defer(function() {
                e.emitImpl()
            }) : this.emitImpl()
        },
        emitImpl: function() {
            for (var e = this.willEmit(), t = e; null != t;) t._listener(), t.stayInList || t.dispose(), t = t._next;
            this.didEmit(e)
        },
        __class__: Ln
    });
    var An = function(e) {
        this.next = null;
        this.fn = e
    };
    r["flambe.util._SignalBase.Task"] = An;
    An.__name__ = ["flambe", "util", "_SignalBase", "Task"];
    An.prototype = {
        __class__: An
    };
    var On = function() {};
    r["flambe.util.Strings"] = On;
    On.__name__ = ["flambe", "util", "Strings"];
    On.getFileExtension = function(e) {
        var t = e.lastIndexOf(".");
        return 0 < t ? l.substr(e, t + 1, null) : null
    };
    On.removeFileExtension = function(e) {
        var t = e.lastIndexOf(".");
        return 0 < t ? l.substr(e, 0, t) : e
    };
    On.getUrlExtension = function(e) {
        var t = e.lastIndexOf("?");
        0 <= t && (e = l.substr(e, 0, t));
        t = e.lastIndexOf("/");
        0 <= t && (e = l.substr(e, t + 1, null));
        return On.getFileExtension(e)
    };
    On.joinPath = function(e, t) {
        0 < e.length && 47 != e.charCodeAt(e.length - 1) && (e += "/");
        return e + t
    };
    On.withFields = function(e, t) {
        var n = t.length;
        if (0 < n) {
            for (var e = 0 < e.length ? e + " [" : e + "[", r = 0; r < n;) {
                0 < r && (e += ", ");
                var i = t[r],
                    s = t[r + 1];
                if (m.is(s, Error)) {
                    var o = s.stack;
                    null != o && (s = o)
                }
                e += i + "=" + m.string(s);
                r += 2
            }
            e += "]"
        }
        return e
    };
    var Mn = function() {
        this.buf = new g;
        this.cache = [];
        this.useCache = Mn.USE_CACHE;
        this.useEnumIndex = Mn.USE_ENUM_INDEX;
        this.shash = new Hn;
        this.scount = 0
    };
    r["haxe.Serializer"] = Mn;
    Mn.__name__ = ["haxe", "Serializer"];
    Mn.prototype = {
        toString: function() {
            return this.buf.b
        },
        serializeString: function(e) {
            var t = this.shash.get(e);
            null != t ? (this.buf.b += "R", this.buf.b = null == t ? this.buf.b + "null" : this.buf.b + ("" + t)) : (this.shash.set(e, this.scount++), this.buf.b += "y", e = encodeURIComponent(e), this.buf.b = null == e.length ? this.buf.b + "null" : this.buf.b + ("" + e.length), this.buf.b += ":", this.buf.b = null == e ? this.buf.b + "null" : this.buf.b + ("" + e))
        },
        serializeRef: function(e) {
            for (var t = typeof e, n = 0, r = this.cache.length; n < r;) {
                var i = n++,
                    s = this.cache[i];
                if (typeof s == t && s == e) return this.buf.b += "r", this.buf.b = null == i ? this.buf.b + "null" : this.buf.b + ("" + i), !0
            }
            this.cache.push(e);
            return !1
        },
        serializeFields: function(e) {
            for (var t = 0, n = v.fields(e); t < n.length;) {
                var r = n[t];
                ++t;
                this.serializeString(r);
                this.serialize(v.field(e, r))
            }
            this.buf.b += "g"
        },
        serialize: function(e) {
            var t = w["typeof"](e);
            switch (t[1]) {
                case 0:
                    this.buf.b += "n";
                    break;
                case 1:
                    if (0 == e) {
                        this.buf.b += "z";
                        break
                    }
                    this.buf.b += "i";
                    this.buf.b = null == e ? this.buf.b + "null" : this.buf.b + ("" + e);
                    break;
                case 2:
                    Math.isNaN(e) ? this.buf.b += "k" : Math.isFinite(e) ? (this.buf.b += "d", this.buf.b = null == e ? this.buf.b + "null" : this.buf.b + ("" + e)) : this.buf.b = 0 > e ? this.buf.b + "m" : this.buf.b + "p";
                    break;
                case 3:
                    this.buf.b = e ? this.buf.b + "t" : this.buf.b + "f";
                    break;
                case 6:
                    t = t[2];
                    if (t == String) {
                        this.serializeString(e);
                        break
                    }
                    if (this.useCache && this.serializeRef(e)) break;
                    switch (t) {
                        case Array:
                            t = 0;
                            this.buf.b += "a";
                            for (var n = e.length, r = 0; r < n;) {
                                var i = r++;
                                null == e[i] ? t++ : (0 < t && (1 == t ? this.buf.b += "n" : (this.buf.b += "u", this.buf.b = null == t ? this.buf.b + "null" : this.buf.b + ("" + t)), t = 0), this.serialize(e[i]))
                            }
                            0 < t && (1 == t ? this.buf.b += "n" : (this.buf.b += "u", this.buf.b = null == t ? this.buf.b + "null" : this.buf.b + ("" + t)));
                            this.buf.b += "h";
                            break;
                        case h:
                            this.buf.b += "l";
                            for (e = e.iterator(); e.hasNext();) this.serialize(e.next());
                            this.buf.b += "h";
                            break;
                        case Date:
                            this.buf.b += "v";
                            this.buf.add(l.dateStr(e));
                            break;
                        case Hn:
                            this.buf.b += "b";
                            for (t = e.keys(); t.hasNext();) n = t.next(), this.serializeString(n), this.serialize(e.get(n));
                            this.buf.b += "h";
                            break;
                        case Dn:
                            this.buf.b += "q";
                            for (t = e.keys(); t.hasNext();) n = t.next(), this.buf.b += ":", this.buf.b = null == n ? this.buf.b + "null" : this.buf.b + ("" + n), this.serialize(e.get(n));
                            this.buf.b += "h";
                            break;
                        case Pn:
                            this.buf.b += "M";
                            for (t = e.keys(); t.hasNext();) n = t.next(), r = v.field(n, "__id__"), v.deleteField(n, "__id__"), this.serialize(n), n.__id__ = r, this.serialize(e.h[n.__id__]);
                            this.buf.b += "h";
                            break;
                        case Bn:
                            r = 0;
                            i = e.length - 2;
                            t = new g;
                            for (n = Mn.BASE64; r < i;) {
                                var s = e.get(r++),
                                    o = e.get(r++),
                                    u = e.get(r++);
                                t.add(n.charAt(s >> 2));
                                t.add(n.charAt((s << 4 | o >> 4) & 63));
                                t.add(n.charAt((o << 2 | u >> 6) & 63));
                                t.add(n.charAt(u & 63))
                            }
                            r == i ? (i = e.get(r++), e = e.get(r++), t.add(n.charAt(i >> 2)), t.add(n.charAt((i << 4 | e >> 4) & 63)), t.add(n.charAt(e << 2 & 63))) : r == i + 1 && (e = e.get(r++), t.add(n.charAt(e >> 2)), t.add(n.charAt(e << 4 & 63)));
                            e = t.b;
                            this.buf.b += "s";
                            this.buf.b = null == e.length ? this.buf.b + "null" : this.buf.b + ("" + e.length);
                            this.buf.b += ":";
                            this.buf.b = null == e ? this.buf.b + "null" : this.buf.b + ("" + e);
                            break;
                        default:
                            this.useCache && this.cache.pop(), null != e.hxSerialize ? (this.buf.b += "C", this.serializeString(w.getClassName(t)), this.useCache && this.cache.push(e), e.hxSerialize(this), this.buf.b += "g") : (this.buf.b += "c", this.serializeString(w.getClassName(t)), this.useCache && this.cache.push(e), this.serializeFields(e))
                    }
                    break;
                case 4:
                    if (this.useCache && this.serializeRef(e)) break;
                    this.buf.b += "o";
                    this.serializeFields(e);
                    break;
                case 7:
                    t = t[2];
                    if (this.useCache) {
                        if (this.serializeRef(e)) break;
                        this.cache.pop()
                    }
                    this.buf.b = this.useEnumIndex ? this.buf.b + "j" : this.buf.b + "w";
                    this.serializeString(w.getEnumName(t));
                    this.useEnumIndex ? (this.buf.b += ":", this.buf.b += m.string(e[1])) : this.serializeString(e[0]);
                    this.buf.b += ":";
                    t = e.length;
                    this.buf.b += m.string(t - 2);
                    for (n = 2; n < t;) r = n++, this.serialize(e[r]);
                    this.useCache && this.cache.push(e);
                    break;
                case 5:
                    throw "Cannot serialize function";
                default:
                    throw "Cannot serialize " + m.string(e)
            }
        },
        __class__: Mn
    };
    var _n = function(e) {
        this.buf = e;
        this.length = e.length;
        this.pos = 0;
        this.scache = [];
        this.cache = [];
        e = _n.DEFAULT_RESOLVER;
        null == e && (e = w, _n.DEFAULT_RESOLVER = e);
        this.setResolver(e)
    };
    r["haxe.Unserializer"] = _n;
    _n.__name__ = ["haxe", "Unserializer"];
    _n.initCodes = function() {
        for (var e = [], t = 0, n = _n.BASE64.length; t < n;) {
            var r = t++;
            e[_n.BASE64.charCodeAt(r)] = r
        }
        return e
    };
    _n.run = function(e) {
        return (new _n(e)).unserialize()
    };
    _n.prototype = {
        setResolver: function(e) {
            this.resolver = null == e ? {
                resolveClass: function() {
                    return null
                },
                resolveEnum: function() {
                    return null
                }
            } : e
        },
        get: function(e) {
            return this.buf.charCodeAt(e)
        },
        readDigits: function() {
            for (var e = 0, t = !1, n = this.pos;;) {
                var r = this.buf.charCodeAt(this.pos);
                if (r != r) break;
                if (45 == r) {
                    if (this.pos != n) break;
                    t = !0
                } else {
                    if (48 > r || 57 < r) break;
                    e = 10 * e + (r - 48)
                }
                this.pos++
            }
            t && (e *= -1);
            return e
        },
        unserializeObject: function(e) {
            for (;;) {
                if (this.pos >= this.length) throw "Invalid object";
                if (103 == this.buf.charCodeAt(this.pos)) break;
                var t = this.unserialize();
                if ("string" != typeof t) throw "Invalid object key";
                var n = this.unserialize();
                e[t] = n
            }
            this.pos++
        },
        unserializeEnum: function(e, t) {
            if (58 != this.get(this.pos++)) throw "Invalid enum format";
            var n = this.readDigits();
            if (0 == n) return w.createEnum(e, t);
            for (var r = []; 0 < n--;) r.push(this.unserialize());
            return w.createEnum(e, t, r)
        },
        unserialize: function() {
            switch (this.get(this.pos++)) {
                case 110:
                    return null;
                case 116:
                    return !0;
                case 102:
                    return !1;
                case 122:
                    return 0;
                case 105:
                    return this.readDigits();
                case 100:
                    for (var e = this.pos;;) {
                        var t = this.buf.charCodeAt(this.pos);
                        if (43 <= t && 58 > t || 101 == t || 69 == t) this.pos++;
                        else break
                    }
                    return m.parseFloat(l.substr(this.buf, e, this.pos - e));
                case 121:
                    e = this.readDigits();
                    if (58 != this.get(this.pos++) || this.length - this.pos < e) throw "Invalid string length";
                    t = l.substr(this.buf, this.pos, e);
                    this.pos += e;
                    t = decodeURIComponent(t.split("+").join(" "));
                    this.scache.push(t);
                    return t;
                case 107:
                    return Math.NaN;
                case 109:
                    return Math.NEGATIVE_INFINITY;
                case 112:
                    return Math.POSITIVE_INFINITY;
                case 97:
                    e = [];
                    for (this.cache.push(e);;) {
                        t = this.buf.charCodeAt(this.pos);
                        if (104 == t) {
                            this.pos++;
                            break
                        }
                        117 == t ? (this.pos++, t = this.readDigits(), e[e.length + t - 1] = null) : e.push(this.unserialize())
                    }
                    return e;
                case 111:
                    return e = {}, this.cache.push(e), this.unserializeObject(e), e;
                case 114:
                    e = this.readDigits();
                    if (0 > e || e >= this.cache.length) throw "Invalid reference";
                    return this.cache[e];
                case 82:
                    e = this.readDigits();
                    if (0 > e || e >= this.scache.length) throw "Invalid string reference";
                    return this.scache[e];
                case 120:
                    throw this.unserialize();
                case 99:
                    e = this.unserialize();
                    t = this.resolver.resolveClass(e);
                    if (null == t) throw "Class not found " + e;
                    e = w.createEmptyInstance(t);
                    this.cache.push(e);
                    this.unserializeObject(e);
                    return e;
                case 119:
                    e = this.unserialize();
                    t = this.resolver.resolveEnum(e);
                    if (null == t) throw "Enum not found " + e;
                    e = this.unserializeEnum(t, this.unserialize());
                    this.cache.push(e);
                    return e;
                case 106:
                    e = this.unserialize();
                    t = this.resolver.resolveEnum(e);
                    if (null == t) throw "Enum not found " + e;
                    this.pos++;
                    var n = this.readDigits(),
                        r = w.getEnumConstructs(t)[n];
                    if (null == r) throw "Unknown enum index " + e + "@" + n;
                    e = this.unserializeEnum(t, r);
                    this.cache.push(e);
                    return e;
                case 108:
                    e = new h;
                    for (this.cache.push(e); 104 != this.buf.charCodeAt(this.pos);) e.add(this.unserialize());
                    this.pos++;
                    return e;
                case 98:
                    e = new Hn;
                    for (this.cache.push(e); 104 != this.buf.charCodeAt(this.pos);) t = this.unserialize(), e.set(t, this.unserialize());
                    this.pos++;
                    return e;
                case 113:
                    e = new Dn;
                    this.cache.push(e);
                    for (t = this.get(this.pos++); 58 == t;) t = this.readDigits(), e.set(t, this.unserialize()), t = this.get(this.pos++);
                    if (104 != t) throw "Invalid IntMap format";
                    return e;
                case 77:
                    e = new Pn;
                    for (this.cache.push(e); 104 != this.buf.charCodeAt(this.pos);) t = this.unserialize(), e.set(t, this.unserialize());
                    this.pos++;
                    return e;
                case 118:
                    return e = l.substr(this.buf, this.pos, 19), e = l.strDate(e), this.cache.push(e), this.pos += 19, e;
                case 115:
                    e = this.readDigits();
                    r = this.buf;
                    if (58 != this.get(this.pos++) || this.length - this.pos < e) throw "Invalid bytes length";
                    var i = _n.CODES;
                    null == i && (i = _n.initCodes(), _n.CODES = i);
                    for (var s = this.pos, o = e & 3, u = s + (e - o), t = Bn.alloc(3 * (e >> 2) + (2 <= o ? o - 1 : 0)), n = 0; s < u;) {
                        var a = i[y.fastCodeAt(r, s++)],
                            f = i[y.fastCodeAt(r, s++)];
                        t.set(n++, a << 2 | f >> 4);
                        a = i[y.fastCodeAt(r, s++)];
                        t.set(n++, f << 4 | a >> 2);
                        f = i[y.fastCodeAt(r, s++)];
                        t.set(n++, a << 6 | f)
                    }
                    2 <= o && (f = i[y.fastCodeAt(r, s++)], u = i[y.fastCodeAt(r, s++)], t.set(n++, f << 2 | u >> 4), 3 == o && (r = i[y.fastCodeAt(r, s++)], t.set(n++, u << 4 | r >> 2)));
                    this.pos += e;
                    this.cache.push(t);
                    return t;
                case 67:
                    e = this.unserialize();
                    t = this.resolver.resolveClass(e);
                    if (null == t) throw "Class not found " + e;
                    e = w.createEmptyInstance(t);
                    this.cache.push(e);
                    e.hxUnserialize(this);
                    if (103 != this.get(this.pos++)) throw "Invalid custom data";
                    return e
            }
            this.pos--;
            throw "Invalid char " + this.buf.charAt(this.pos) + " at position " + this.pos
        },
        __class__: _n
    };
    var Dn = function() {
        this.h = {}
    };
    r["haxe.ds.IntMap"] = Dn;
    Dn.__name__ = ["haxe", "ds", "IntMap"];
    Dn.__interfaces__ = [d];
    Dn.prototype = {
        set: function(e, t) {
            this.h[e] = t
        },
        get: function(e) {
            return this.h[e]
        },
        exists: function(e) {
            return this.h.hasOwnProperty(e)
        },
        remove: function(e) {
            if (!this.h.hasOwnProperty(e)) return !1;
            delete this.h[e];
            return !0
        },
        keys: function() {
            var e = [],
                t;
            for (t in this.h) this.h.hasOwnProperty(t) && e.push(t | 0);
            return l.iter(e)
        },
        __class__: Dn
    };
    var Pn = function() {
        this.h = {};
        this.h.__keys__ = {}
    };
    r["haxe.ds.ObjectMap"] = Pn;
    Pn.__name__ = ["haxe", "ds", "ObjectMap"];
    Pn.__interfaces__ = [d];
    Pn.prototype = {
        set: function(e, t) {
            var n = e.__id__ || (e.__id__ = ++Pn.count);
            this.h[n] = t;
            this.h.__keys__[n] = e
        },
        keys: function() {
            var e = [],
                t;
            for (t in this.h.__keys__) this.h.hasOwnProperty(t) && e.push(this.h.__keys__[t]);
            return l.iter(e)
        },
        __class__: Pn
    };
    var Hn = function() {
        this.h = {}
    };
    r["haxe.ds.StringMap"] = Hn;
    Hn.__name__ = ["haxe", "ds", "StringMap"];
    Hn.__interfaces__ = [d];
    Hn.prototype = {
        set: function(e, t) {
            this.h["$" + e] = t
        },
        get: function(e) {
            return this.h["$" + e]
        },
        exists: function(e) {
            return this.h.hasOwnProperty("$" + e)
        },
        keys: function() {
            var e = [],
                t;
            for (t in this.h) this.h.hasOwnProperty(t) && e.push(t.substr(1));
            return l.iter(e)
        },
        iterator: function() {
            return {
                ref: this.h,
                it: this.keys(),
                hasNext: function() {
                    return this.it.hasNext()
                },
                next: function() {
                    return this.ref["$" + this.it.next()]
                }
            }
        },
        __class__: Hn
    };
    var Bn = function(e, t) {
        this.length = e;
        this.b = t
    };
    r["haxe.io.Bytes"] = Bn;
    Bn.__name__ = ["haxe", "io", "Bytes"];
    Bn.alloc = function(e) {
        for (var t = [], n = 0; n < e;) n++, t.push(0);
        return new Bn(e, t)
    };
    Bn.prototype = {
        get: function(e) {
            return this.b[e]
        },
        set: function(e, t) {
            this.b[e] = t & 255
        },
        __class__: Bn
    };
    var jn = function() {};
    r["haxe.io.Eof"] = jn;
    jn.__name__ = ["haxe", "io", "Eof"];
    jn.prototype = {
        toString: function() {
            return "Eof"
        },
        __class__: jn
    };
    var Fn = function() {};
    r["haxe.rtti.Meta"] = Fn;
    Fn.__name__ = ["haxe", "rtti", "Meta"];
    Fn.getType = function(e) {
        e = e.__meta__;
        return null == e || null == e.obj ? {} : e.obj
    };
    var In = function() {};
    r["js.Boot"] = In;
    In.__name__ = ["js", "Boot"];
    In.getClass = function(e) {
        return e instanceof Array && null == e.__enum__ ? Array : e.__class__
    };
    In.__string_rec = function(e, t) {
        if (null == e) return "null";
        if (5 <= t.length) return "<...>";
        var n = typeof e;
        if ("function" == n && (e.__name__ || e.__ename__)) n = "object";
        switch (n) {
            case "object":
                if (e instanceof Array) {
                    if (e.__enum__) {
                        if (2 == e.length) return e[0];
                        for (var n = e[0] + "(", t = t + "    ", r = 2, i = e.length; r < i;) var s = r++,
                            n = 2 != s ? n + ("," + In.__string_rec(e[s], t)) : n + In.__string_rec(e[s], t);
                        return n + ")"
                    }
                    n = e.length;
                    r = "[";
                    t += " ";
                    for (i = 0; i < n;) s = i++, r += (0 < s ? "," : "") + In.__string_rec(e[s], t);
                    return r + "]"
                }
                try {
                    r = e.toString
                } catch (o) {
                    return "???"
                }
                if (null != r && r != Object.toString && (n = e.toString(), "[object Object]" != n)) return n;
                n = null;
                r = "{\n";
                t += "  ";
                i = null != e.hasOwnProperty;
                for (n in e)
                    if (!i || e.hasOwnProperty(n)) "prototype" == n || "__class__" == n || "__super__" == n || "__interfaces__" == n || "__properties__" == n || (2 != r.length && (r += ", \n"), r += t + n + " : " + In.__string_rec(e[n], t));
                t = t.substring(1);
                return r + ("\n" + t + "}");
            case "function":
                return "<function>";
            case "string":
                return e;
            default:
                return "" + e
        }
    };
    In.__interfLoop = function(e, t) {
        if (null == e) return !1;
        if (e == t) return !0;
        var n = e.__interfaces__;
        if (null != n)
            for (var r = 0, i = n.length; r < i;) {
                var s = r++,
                    s = n[s];
                if (s == t || In.__interfLoop(s, t)) return !0
            }
        return In.__interfLoop(e.__super__, t)
    };
    In.__instanceof = function(e, t) {
        if (null == t) return !1;
        switch (t) {
            case Gn:
                return (e | 0) === e;
            case Zn:
                return "number" == typeof e;
            case er:
                return "boolean" == typeof e;
            case String:
                return "string" == typeof e;
            case Array:
                return e instanceof Array && null == e.__enum__;
            case Yn:
                return !0;
            default:
                if (null != e) {
                    if ("function" == typeof t && (e instanceof t || In.__interfLoop(In.getClass(e), t))) return !0
                } else return !1;
                return t == tr && null != e.__name__ || t == nr && null != e.__ename__ ? !0 : e.__enum__ == t
        }
    };
    In.__cast = function(e, t) {
        if (In.__instanceof(e, t)) return e;
        throw "Cannot cast " + m.string(e) + " to " + m.string(t)
    };
    var qn = function() {};
    r["js.Browser"] = qn;
    qn.__name__ = ["js", "Browser"];
    qn.getLocalStorage = function() {
        try {
            var e = window.localStorage;
            e.getItem("");
            return e
        } catch (t) {
            return null
        }
    };
    var Rn = function(e) {
        this.root = (new T).add(new ln(!1));
        Kn.addFillSprite(this.root, Kn.halfWidth, Kn.halfHeight, 0, Kn.width, Kn.height, .8);
        Kn.addLabel(this.root, Kn.halfWidth, Kn.halfHeight - 150, "eRMB", 1.2, 1, !0, "font2");
        e = Kn.addLabel(this.root, Kn.halfWidth + 50, Kn.halfHeight, "" + e, 1.2, 1, !0);
        Kn.addImageSprite(e, -50, 25, "score_icon");
        Kn.addButton(this.root, Kn.halfWidth - 75, Kn.halfHeight + 170, "home_btn", function() {
            $n.unmuteSoundtrack();
            Kn.goToScene((new Xn).root)
        });
        Kn.addButton(this.root, Kn.halfWidth + 75, Kn.halfHeight + 170, "replay_btn", function() {
            $n.unmuteSoundtrack();
            Kn.goToScene((new Un(0)).root)
        })
    };
    r["scenes.GameOverScene"] = Rn;
    Rn.__name__ = ["scenes", "GameOverScene"];
    Rn.prototype = {
        __class__: Rn
    };
    var Un = function() {
        this.root = (new T).add(new ln);
        var e = this;
        this.root.add(new yn);
        Kn.addImageSprite(this.root, 0, 0, "game_scene_bg", 1, 1, !1);
        var t = Kn.addImageSprite(this.root, 0, -70, "spikes_block", 1, 1, !1);
        Un.spikesBlock = t._compMap.Sprite_0;
        Kn.addImageSprite(this.root, 0, -20, "hud_bg", 1, 1, !1);
        1 == Un.cLevel && (Un.totalScore = 0, Kn.addDelay(this.root, .2, function() {
            Kn.pushScene((new Wn).root)
        }, !1));
        Kn.addDelay(this.root, .8, function() {
            Kn.addButton(e.root, 585, 58, "pause_btn", function() {
                Kn.pushScene((new Vn).root)
            });
            Kn.addButton(e.root, 390, 58, "push_btn", function() {
                e.root._compMap.GameSceneComp_7.addRow()
            });
            Un.spikesBlock.y.animateTo(101, .8, F.linear);
            e.root.add(new zn(Un.scoreTillNextLevel(Un.cLevel + 1), 0))
        }, !1)
    };
    r["scenes.GameScene"] = Un;
    Un.__name__ = ["scenes", "GameScene"];
    Un.scoreTillNextLevel = function(e) {
        return 1e3 * e + 1e3 * e + (30 * e * e - 30 * e)
    };
    Un.prototype = {
        __class__: Un
    };
    var zn = function(e, t) {
        this.levelEnd = !1;
        this.timerC = this.cLevelScore = 0;
        this.scoreTillNextLevel = e;
        this.cLevelScore = t
    };
    r["scenes.GameSceneComp"] = zn;
    zn.__name__ = ["scenes", "GameSceneComp"];
    zn.__super__ = S;
    zn.prototype = e(S.prototype, {
        get_name: function() {
            return "GameSceneComp_7"
        },
        onAdded: function() {
            this.grid = new a(this.owner, 9, 11);
            this.grid.addRandRows(8);
            this.timeTillNextRow = this.caclAddRowTimer();
            Kn.addLabel(this.owner, 48, 54, "" + Un.cLevel, 1, 1, !0, "font3");
            Kn.addImageSprite(this.owner, 90, 30, "bar1_bg", 1, 1, !1);
            this.scoreBarFill = Kn.addImageSprite(this.owner, 90, 30, "bar1_fill", 1, 1, !1)._compMap.Sprite_0;
            this.scoreBarFillRect = new mt(0, 0, 0, this.scoreBarFill.getNaturalHeight());
            this.scoreBarFill.scissor = this.scoreBarFillRect;
            this.scoreLabel = Kn.addLabel(this.owner, 210, 54, "", 1, 1, !0, "font3")._compMap.Sprite_0;
            this.scoreLabel.setAlign(Y.Center);
            this.updateScore(0);
            Kn.addImageSprite(this.owner, 442, 30, "bar2_bg", 1, 1, !1);
            this.pushUpBarFill = Kn.addImageSprite(this.owner, 442, 30, "bar2_fill", 1, 1, !1)._compMap.Sprite_0;
            this.pushUpBarFillRect = new mt(0, 0, 0, this.pushUpBarFill.getNaturalHeight());
            this.pushUpBarFill.scissor = this.pushUpBarFillRect;
            this.pushUpTimer = Kn.addDelay(this.owner, this.timeTillNextRow, n(this, this.addRow), !0);
            this.timer = Kn.addDelay(this.owner, .1, n(this, this.updateTimer), !0);
            this.checkForMatches()
        },
        caclAddRowTimer: function() {
            var e = 9 - (.5 * Un.cLevel | 0);
            2 > e && (e = 2);
            return e
        },
        checkForMatches: function() {
            this.levelEnd || (this.checkNextLevel(), 0 == this.grid.getDeepMatches().length && (this.pushUpTimer.dispose(), this.pushUpTimer = Kn.addDelay(this.owner, this.timeTillNextRow, n(this, this.addRow), !0), this.addRow()))
        },
        addRow: function() {
            this.pushUpBarFillRect.width = this.pushUpBarFill.getNaturalWidth();
            this.pushUpBarFill.scissor = this.pushUpBarFillRect;
            this.timerC = 0;
            this.levelEnd || (this.grid.pushPiecesUp() ? (this.grid.addRandRows(1), 0 == this.grid.getDeepMatches().length && this.addRow()) : this.checkGameOver())
        },
        checkNextLevel: function() {
            var e = this;
            if (this.cLevelScore >= this.scoreTillNextLevel) {
                this.levelEnd = !0;
                f.canMakeAction = !1;
                Un.spikesBlock.y.animateTo(-70, .6, F.linear);
                this.pushUpTimer._compMap.Script_3.stopAll();
                this.timer._compMap.Script_3.stopAll();
                Kn.addDelay(this.owner, 1, function() {
                    e.grid.clear2()
                }, !1);
                Un.cLevel += 1;
                var t = this.cLevelScore - this.scoreTillNextLevel;
                Un.totalScore += this.cLevelScore;
                o.saveHiScore(Un.totalScore);
                // updateShare(Un.cLevel - 1, Un.totalScore);
                // Play68.setRankingLevelScoreDesc(Un.cLevel - 1, Un.totalScore);
                $n.playSfx("level_end_sfx", 1);
                this.showLevelCompleteMsg();
                Kn.addDelay(this.owner, 1.5, function() {
                    Kn.goToScene((new Un(t)).root, (new cn(.6, F.backIn)).left())
                }, !1)
            }
        },
        checkGameOver: function() {
            this.levelEnd = !0;
            f.canMakeAction = !1;
            var e = o.HI_SCORE;
            Un.totalScore += this.cLevelScore;
            o.saveHiScore(Un.totalScore);
            this.pushUpTimer._compMap.Script_3.stopAll();
            this.timer._compMap.Script_3.stopAll();
            // updateShare(Un.cLevel, Un.totalScore);
            // Play68.setRankingLevelScoreDesc(Un.cLevel, Un.totalScore);
            Un.cLevel = 1;
            this.grid.clear();
            Kn.addDelay(this.owner, 2, function() {
                $n.muteSoundtrack();
                $n.playSfx("game_over_sfx", 1);
                Kn.pushScene((new Rn(Un.totalScore, e)).root)
            }, !1)
        },
        updateScore: function(e) {
            this.cLevelScore += e;
            this.cLevelScore > this.scoreTillNextLevel && (this.cLevelScore = this.scoreTillNextLevel);
            this.scoreLabel.set_text(this.cLevelScore + " - " + this.scoreTillNextLevel);
            this.scoreBarFillRect.width = this.cLevelScore / this.scoreTillNextLevel * this.scoreBarFill.getNaturalWidth();
            this.scoreBarFill.scissor = this.scoreBarFillRect
        },
        updateTimer: function() {
            this.timerC += .1;
            this.timerC > this.timeTillNextRow && (this.timerC = this.timeTillNextRow);
            this.pushUpBarFillRect.width = this.timerC / this.timeTillNextRow * this.pushUpBarFill.getNaturalWidth();
            this.pushUpBarFill.scissor = this.pushUpBarFillRect
        },
        showLevelCompleteMsg: function() {
            var e;
            e = Kn.addFillSprite(this.owner, Kn.halfWidth, Kn.halfHeight, 0, Kn.width, 140, 0)._compMap.Sprite_0;
            var t;
            t = Kn.addLabel(this.owner, Kn.halfWidth, Kn.halfHeight, "ZYXV", 1, 0, !0, "font2")._compMap.Sprite_0;
            e.alpha.animateTo(.8, .4, F.quadIn);
            t.alpha.animateTo(1, .4, F.quadIn)
        },
        __class__: zn
    });
    var Wn = function() {
        this.root = (new T).add(new ln(!1));
        Kn.addFillSprite(this.root, Kn.halfWidth, Kn.halfHeight, 0, Kn.width, Kn.height, .5);
        Kn.addImageSprite(this.root, Kn.halfWidth, 380, "help_info", 1, 1);
        Kn.addButton(this.root, Kn.halfWidth, Kn.height - 160, "play_btn2", function() {
            Kn.popScene(new fn(.2))
        })
    };
    r["scenes.HelpScene"] = Wn;
    Wn.__name__ = ["scenes", "HelpScene"];
    Wn.prototype = {
        __class__: Wn
    };
    var Xn = function() {
        this.root = (new T).add(new ln);
        $n.playSoundtrack("soundtrack1", .8);
        Kn.addImageSprite(this.root, Kn.halfWidth, Kn.halfHeight, "game_scene_bg");
        var e;
        e = Kn.addImageSprite(this.root, Kn.halfWidth, Kn.halfHeight - 270, "game_title", 1, 1)._compMap.Sprite_0;
        e.alpha.animateTo(1, 1, F.quadOut);
        e.y.animateTo(Kn.halfHeight - 160, 1, F.bounceOut);
        e = Kn.addLabel(this.root, Kn.halfWidth + 40, Kn.height + 100, "" + o.HI_SCORE, 1.2, 0, !0)._compMap.Sprite_0;
        Kn.addImageSprite(e.owner, -40, 15, "score_icon");
        e.alpha.animateTo(1, 1, F.quadOut);
        e.y.animateTo(Kn.height - 80, 1, F.bounceOut);
        e = Kn.addButton(this.root, Kn.halfWidth, Kn.height - 200, "play_btn2", function() {
            Kn.goToScene((new Un(0)).root)
        }, "", 1, 0)._compMap.Sprite_0;
        e.alpha.animateTo(1, 1, F.quadOut);
        e.y.animateTo(Kn.height - 280, 1, F.bounceOut);
        Kn.addButton(this.root, Kn.width - 80, 90, "sound_on_btn", function() {
            $n.muteAll()
        }, "sound_off_btn", 1, 1)
    };
    r["scenes.MainScene"] = Xn;
    Xn.__name__ = ["scenes", "MainScene"];
    Xn.prototype = {
        __class__: Xn
    };
    var Vn = function() {
        this.root = (new T).add(new ln(!1));
        Kn.addFillSprite(this.root, Kn.halfWidth, Kn.halfHeight, 0, Kn.width, Kn.height, .8);
        Kn.addLabel(this.root, Kn.halfWidth, Kn.halfHeight - 205, "fb", 1.2, 1, !0, "font2");
        Kn.addButton(this.root, Kn.halfWidth, Kn.halfHeight + 5, "play_btn2", function() {
            Kn.popScene(new fn(0))
        });
        Kn.addButton(this.root, Kn.halfWidth - 150, Kn.halfHeight + 200, "home_btn", function() {
            Un.cLevel = 1;
            Kn.goToScene((new Xn).root)
        });
        Kn.addButton(this.root, Kn.halfWidth, Kn.halfHeight + 200, "replay_btn", function() {
            Un.cLevel = 1;
            Kn.goToScene((new Un(0)).root)
        });
        Kn.addButton(this.root, Kn.halfWidth + 150, Kn.halfHeight + 200, "sound_on_btn", function() {
            $n.muteAll()
        }, "sound_off_btn").firstChild._compMap.Sprite_0.set_visible($n.isMuted)
    };
    r["scenes.PauseScene"] = Vn;
    Vn.__name__ = ["scenes", "PauseScene"];
    Vn.prototype = {
        __class__: Vn
    };
    var $n = function() {};
    r["yzi.Sfx"] = $n;
    $n.__name__ = ["yzi", "Sfx"];
    $n.playSfx = function(e, t) {
        null == t && (t = 1);
        return $n.isMuted ? null : Kn.assets.getSound($n.soundsFolder + "/" + e).play(t)
    };
    $n.playSoundtrack = function(e, t) {
        null == t && (t = 1);
        var n = Kn.assets.getSound($n.soundsFolder + "/" + e);
        null != $n.cSoundtrackPlayback ? $n.cSoundtrackPlayback.get_sound() != n && ($n.cSoundtrackVolume = t, $n.cSoundtrackPlayback = n.loop(t)) : ($n.cSoundtrackVolume = t, $n.cSoundtrackPlayback = n.loop(t));
        return $n.cSoundtrackPlayback
    };
    $n.muteSoundtrack = function() {
        null != $n.cSoundtrackPlayback && ($n.cSoundtrackPlayback.volume.animateTo(0, 1), Kn.addDelay(null, .8, function() {
            $n.cSoundtrackPlayback.set_paused(!0)
        }, !1))
    };
    $n.unmuteSoundtrack = function() {
        null != $n.cSoundtrackPlayback && !$n.isMuted && ($n.cSoundtrackPlayback.set_paused(!1), $n.cSoundtrackPlayback.volume.animateTo($n.cSoundtrackVolume, 1))
    };
    $n.muteAll = function() {
        $n.isMuted ? ($n.isMuted = !1, $n.unmuteSoundtrack(), P.volume.animateTo(1, 0)) : ($n.isMuted = !0, $n.muteSoundtrack(), P.volume.animateTo(0, 1))
    };
    var Jn = function() {};
    r["yzi.Tweener"] = Jn;
    Jn.__name__ = ["yzi", "Tweener"];
    Jn.to = function(e, t, n, r, i, s) {
        null == r && (r = 0);
        F;
        var o = new wn;
        0 > r && (r = 0);
        if (0 == t && 0 == r) Jn.apply(e, n, i);
        else {
            if (0 == t && 0 < r) {
                var u = new T;
                0 != r && o.add(new vn(r));
                o.add(new dn(function() {
                    Jn.apply(e, n, i);
                    u.dispose()
                }));
                t = new yn;
                P.root.addChild(u.add(t))
            } else {
                0 < r && o.add(new vn(r));
                for (var r = [], a = 0, f = v.fields(n); a < f.length;) {
                    var l = f[a];
                    ++a;
                    var c = v.getProperty(e, l);
                    r.push(new pn(c, v.field(n, l), t, s))
                }
                s = new mn(r);
                o.add(s);
                var h = new T;
                o.add(new vn(t));
                o.add(new dn(function() {
                    null != i && i();
                    h.dispose()
                }));
                t = new yn;
                P.root.addChild(h.add(t))
            }
            t.run(o)
        }
    };
    Jn.apply = function(e, t, n) {
        for (var r = 0, i = v.fields(t); r < i.length;) {
            var s = i[r];
            ++r;
            var o = v.getProperty(e, s);
            In.__cast(o, D).set__(v.field(t, s))
        }
        null != n && n()
    };
    var Kn = function(e, t) {
        this.init = new Ln;
        var r = this;
        Kn.width = e;
        Kn.height = t;
        Kn.halfWidth = e / 2 | 0;
        Kn.halfHeight = t / 2 | 0;
        Kn.director = (new T).add(new J).add((new sn).setSize(Kn.width, Kn.height));
        P.root.addChild(Kn.director);
        this.systemBg = Kn.initFillSpriteComp(0, 0, Kn.systemBgColor, 0, 0, 1, !1);
        P.root.add(this.systemBg);
        this.leftBorder = Kn.addFillSprite(P.root, 0, 0, Kn.systemBgColor, 0, 0, 1, !1)._compMap.Sprite_0;
        this.rightBorder = Kn.addFillSprite(P.root, 0, 0, Kn.systemBgColor, 0, 0, 1, !1)._compMap.Sprite_0;
        this.topBorder = Kn.addFillSprite(P.root, 0, 0, Kn.systemBgColor, 0, 0, 1, !1)._compMap.Sprite_0;
        this.bottomBorder = Kn.addFillSprite(P.root, 0, 0, Kn.systemBgColor, 0, 0, 1, !1)._compMap.Sprite_0;
        P.loadAssetPack(V.fromAssets("boot")).get(function(e) {
            Kn.assets = e;
            e = Kn.addFillSprite(P.root, 0, 0, 1118481, P._platform.getStage().get_width(), P._platform.getStage().get_height(), 1, !1);
            r.rotPhonePrompt = e._compMap.Sprite_0;
            e = Kn.addImageSprite(r.rotPhonePrompt.owner, 0, 0, "rot_phone")._compMap.Sprite_0;
            Kn.defaultOrientation == it.Landscape && e.setRotation(90);
            (Kn.defaultOrientation == P._platform.getStage().orientation._value || null == P._platform.getStage().orientation._value) && r.rotPhonePrompt.set_visible(!1);
            P._platform.getStage().lockOrientation(Kn.defaultOrientation);
            P._platform.getStage().requestFullscreen(!0);
            P._platform.getStage().orientation.get_changed().connect(n(r, r.onOrientationChange));
            P._platform.getStage().resize.connect(n(r, r.onResize));
            r.onResize();
            r.initPreloaderScene()
        })
    };
    r["yzi.YZI"] = Kn;
    Kn.__name__ = ["yzi", "YZI"];
    Kn.onResizeCallback = function() {};
    Kn.onOrientationChangeCallback = function() {};
    Kn.goToScene = function(e, t) {
        null == t && (t = new fn(.5, F.quadOut));
        Kn.director._compMap.Director_5.unwindToScene(e, t)
    };
    Kn.pushScene = function(e, t) {
        null == t && (t = new fn(.5, F.quadOut));
        Kn.director._compMap.Director_5.pushScene(e, t)
    };
    Kn.popScene = function(e) {
        null == e && (e = new fn(.5, F.quadOut));
        Kn.director._compMap.Director_5.popScene(e)
    };
    Kn.saveData = function(e, t) {
        return P._platform.getStorage().set(e, t)
    };
    Kn.loadData = function(e) {
        return P._platform.getStorage().get(e)
    };
    Kn.initFillSpriteComp = function(e, t, n, r, i, s, o) {
        null == o && (o = !0);
        null == s && (s = 1);
        n = new K(n, r, i);
        n.setXY(e, t);
        n.setAlpha(s);
        o && n.centerAnchor();
        return n
    };
    Kn.initImageSpriteComp = function(e, t, n, r, i, s) {
        null == s && (s = !0);
        null == i && (i = 1);
        null == r && (r = 1);
        n = new rt(Kn.assets.getTexture(n));
        n.setXY(e, t);
        n.setScale(r);
        n.setAlpha(i);
        s && n.centerAnchor();
        return n
    };
    Kn.initTextSpriteComp = function(e, t, n, r, i, s, o) {
        null == o && (o = "");
        null == s && (s = !1);
        null == i && (i = 1);
        null == r && (r = 1);
        null == n && (n = "Label");
        "" == o && (o = Kn.defaultFont);
        n = new ut(new G(Kn.assets, o), n);
        n.setXY(e, t);
        n.setScale(r);
        n.setAlpha(i);
        s && n.centerAnchor();
        return n
    };
    Kn.addFillSprite = function(e, t, n, r, i, s, o, u) {
        null == u && (u = !0);
        null == o && (o = 1);
        var a = new T;
        a.add(new x);
        a.add(Kn.initFillSpriteComp(t, n, r, i, s, o, u));
        null != e && e.addChild(a);
        return a
    };
    Kn.addImageSprite = function(e, t, n, r, i, s, o) {
        null == o && (o = !0);
        null == s && (s = 1);
        null == i && (i = 1);
        var u = new T;
        u.add(new x);
        u.add(Kn.initImageSpriteComp(t, n, r, i, s, o));
        null != e && e.addChild(u);
        return u
    };
    Kn.addLabel = function(e, t, n, r, i, s, o, u) {
        null == u && (u = "");
        null == o && (o = !1);
        null == s && (s = 1);
        null == i && (i = 1);
        null == r && (r = "Label");
        var a = new T;
        a.add(new x);
        a.add(Kn.initTextSpriteComp(t, n, r, i, s, o, u));
        null != e && e.addChild(a);
        return a
    };
    Kn.addButton = function(e, t, n, r, i, s, o, u) {
        null == u && (u = 1);
        null == o && (o = 1);
        null == s && (s = "");
        var a = Kn.addImageSprite(e, t, n, r, o, u, !0);
        a.add(new yn);
        "" != s && (Kn.addImageSprite(a, 0, 0, s, 1, 1, !1), a.firstChild._compMap.Sprite_0.set_visible(!1));
        var f = new wn;
        f.add(new dn(function() {
            a._compMap.Sprite_0.scaleX.animateTo(1.15, .2, F.backOut);
            a._compMap.Sprite_0.scaleY.animateTo(1.15, .2, F.backOut)
        }));
        f.add(new vn(.2));
        f.add(new dn(function() {
            a._compMap.Sprite_0.scaleX.animateTo(1, .1, F.quadIn);
            a._compMap.Sprite_0.scaleY.animateTo(1, .1, F.quadIn)
        }));
        a._compMap.Disposer_2.connect1(a._compMap.Sprite_0.get_pointerDown(), function() {
            a._compMap.Script_3.run(f)
        });
        a._compMap.Disposer_2.connect1(a._compMap.Sprite_0.get_pointerUp(), function() {
            "" != s && (0 == (a.firstChild._compMap.Sprite_0._flags & 1) ? a.firstChild._compMap.Sprite_0.set_visible(!0) : a.firstChild._compMap.Sprite_0.set_visible(!1));
            "" != Kn.buttonClickSfx && $n.playSfx(Kn.buttonClickSfx, .4);
            null != i && i()
        });
        return a
    };
    Kn.addDelay = function(e, t, n, r) {
        var i = new T,
            s = new wn;
        s.add(new vn(t));
        s.add(new dn(function() {
            null != n && n();
            r || i.dispose()
        }));
        t = new yn;
        i.add(new x);
        i.add(t);
        null != e && e.addChild(i);
        r ? t.run(new gn(s)) : t.run(s);
        return i
    };
    Kn.rand = function(e) {
        return m.random(e)
    };
    Kn.randSign = function() {
        var e = 1;
        0 == m.random(2) && (e = -1);
        return e
    };
    Kn.prototype = {
        onResize: function() {
            var e = P._platform.getStage().get_width(),
                t = P._platform.getStage().get_height(),
                n = Math.min(e / Kn.width, t / Kn.height);
            Kn.director._compMap.Sprite_0.setXY(.5 * e - .5 * n * Kn.width, .5 * t - .5 * n * Kn.height);
            Kn.director._compMap.Sprite_0.setScale(n);
            var r = Kn.director._compMap.Sprite_0.x._value,
                i = Kn.director._compMap.Sprite_0.y._value;
            this.systemBg.setXY(0, 0);
            this.systemBg.setSize(e, t);
            this.leftBorder.setXY(0, i);
            this.leftBorder.setSize(r, t - 2 * i);
            this.rightBorder.setXY(e - r, i);
            this.rightBorder.setSize(r, t - 2 * i);
            this.topBorder.setXY(0, 0);
            this.topBorder.setSize(e, i);
            this.bottomBorder.setXY(0, t - i);
            this.bottomBorder.setSize(e, i);
            Kn.onResizeCallback();
            this.rotPhonePrompt.setXY(0, 0);
            this.rotPhonePrompt.setSize(P._platform.getStage().get_width(), P._platform.getStage().get_height());
            this.rotPhonePrompt.owner.firstChild._compMap.Sprite_0.setXY(this.rotPhonePrompt.width._value / 2, this.rotPhonePrompt.height._value / 2);
            this.rotPhonePrompt.owner.firstChild._compMap.Sprite_0.setScale(n)
        },
        onOrientationChange: function(e) {
            Kn.onOrientationChangeCallback();
            Kn.defaultOrientation != e ? this.rotPhonePrompt.set_visible(!0) : this.rotPhonePrompt.set_visible(!1)
        },
        initPreloaderScene: function() {
            var e = this,
                t = Kn.width - 150,
                n = (new T).add(new ln),
                r = Kn.addFillSprite(n, 0, 0, 1118481, Kn.width, Kn.height, 1, !1),
                i = Kn.addFillSprite(r, Kn.halfWidth, Kn.halfHeight, 16777215, t, 50),
                s = Kn.addFillSprite(i, 4, 4, 1118481, 0, 42, 1, !1),
                o = P.loadAssetPack(V.fromAssets("main"));
            o.get(function(t) {
                Kn.assets = t;
                Kn.settings = Cn.parse(t.getFile("settings.ini").toString());
                n.removeChild(i);
                e.init.emit()
            });
            o.progressChanged.connect(function() {
                var e = o._progress / o._total;
                1 < e && (e = 1);
                s._compMap.Sprite_0.width.set__(e * (t - 8))
            });
            Kn.goToScene(n)
        },
        __class__: Kn
    };
    var Qn = 0;
    Math.NaN = Number.NaN;
    Math.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;
    Math.POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
    r.Math = Math;
    Math.isFinite = function(e) {
        return isFinite(e)
    };
    Math.isNaN = function(e) {
        return isNaN(e)
    };
    String.prototype.__class__ = r.String = String;
    String.__name__ = ["String"];
    r.Array = Array;
    Array.__name__ = ["Array"];
    Date.prototype.__class__ = r.Date = Date;
    Date.__name__ = ["Date"];
    var Gn = r.Int = {
            __name__: ["Int"]
        },
        Yn = r.Dynamic = {
            __name__: ["Dynamic"]
        },
        Zn = r.Float = Number;
    Zn.__name__ = ["Float"];
    var er = r.Bool = Boolean;
    er.__ename__ = ["Bool"];
    var tr = r.Class = {
            __name__: ["Class"]
        },
        nr = {};
    o.HI_SCORE = 0;
    a.dirs = [new u(0, -1), new u(0, 1), new u(1, 0), new u(-1, 0)];
    a.pieceWidth = 70;
    a.pieceHeight = 70;
    a.gap = 0;
    a.offsetX = 0;
    a.offsetY = 220;
    a.pieceTypes = 5;
    a.minMatchForBonus = 6;
    f.canMakeAction = !0;
    k.instance = new k;
    O.DISPATCHING_SENTINEL = new A(null, null);
    P.root = new T;
    P.uncaughtError = new _;
    P.hidden = new L(!1);
    P.volume = new D(1);
    P._platform = k.instance;
    P._calledInit = !1;
    V.__meta__ = {
        obj: {
            assets: [{
                main: [{
                    bytes: 4502,
                    md5: "1a07e1b8bd85ac57302a7f6943252f1b",
                    name: "bar1_bg.png"
                }, {
                    bytes: 3900,
                    md5: "d158ec68f183f19e1a667d33cb2a5e99",
                    name: "bar1_fill.png"
                }, {
                    bytes: 4282,
                    md5: "b2a3b7fa65a9f33964e3a1753bcbd7f2",
                    name: "bar2_bg.png"
                }, {
                    bytes: 3665,
                    md5: "db7b4625dc8c124172a30d7248914017",
                    name: "bar2_fill.png"
                }, {
                    bytes: 10470,
                    md5: "6d8e31007cf845b7a413458015586e7b",
                    name: "bl0.png"
                }, {
                    bytes: 10144,
                    md5: "dacb277a99d15cdbcc356e3d00b1af3e",
                    name: "bl1.png"
                }, {
                    bytes: 10448,
                    md5: "c49f2cdd7fd13f28990d61df73f7f1c7",
                    name: "bl2.png"
                }, {
                    bytes: 9871,
                    md5: "70689a46fd2a9a7228fbb4a174bb245a",
                    name: "bl3.png"
                }, {
                    bytes: 9981,
                    md5: "7466a42e9c2d50611cf78d22c0d55378",
                    name: "bl4.png"
                }, {
                    bytes: 9360,
                    md5: "87eb9e9ae2bf7c4bae9c5a70d3623d7c",
                    name: "bl5.png"
                }, {
                    bytes: 9330,
                    md5: "9ebc4e7a4ae6c923fb2dd5277fec55c6",
                    name: "bl6.png"
                }, {
                    bytes: 9248,
                    md5: "598433035f5fcbf72949d9b27e2f69b6",
                    name: "bl7.png"
                }, {
                    bytes: 9237,
                    md5: "23de6d2dc69da478422a56bb4d166752",
                    name: "bl8.png"
                }, {
                    bytes: 9129,
                    md5: "97bb837096b10a28cda9ab5f3adafe50",
                    name: "bl9.png"
                }, {
                    bytes: 4492,
                    md5: "1dbd656bdfcd2bdb665d2c0daf8b46e0",
                    name: "bonus_marker.png"
                }, {
                    bytes: 2797,
                    md5: "60a6a8d9c1630acfc695f5eea0664bce",
                    name: "default_font1.fnt"
                }, {
                    bytes: 8254,
                    md5: "7f35e4863f2abe5207e4625449183cf0",
                    name: "default_font1.png"
                }, {
                    bytes: 8620,
                    md5: "dcbd02ae6f63af09d6a7fe617d66c2fe",
                    name: "font2.fnt"
                }, {
                    bytes: 52839,
                    md5: "508510075cfdc25011c449c5a3dce79e",
                    name: "font2.png"
                }, {
                    bytes: 2789,
                    md5: "695a163add424d6b95932d8ecfe822e2",
                    name: "font3.fnt"
                }, {
                    bytes: 7569,
                    md5: "3715a569408118acc6456f1b26f48d07",
                    name: "font3.png"
                }, {
                    bytes: 215286,
                    md5: "ae4bf05b601d87257526ff0ade180af9",
                    name: "game_scene_bg.png"
                }, {
                    bytes: 80614,
                    md5: "95bf85cd975bf0ab4c1f184a82a05e00",
                    name: "game_title.png"
                }, {
                    bytes: 124840,
                    md5: "e57a33a0b70b5e9a7c8fdc41cac906b1",
                    name: "help_info.png"
                }, {
                    bytes: 12048,
                    md5: "f25d83ad9fa23ebd909eb1f390e1f5c4",
                    name: "home_btn.png"
                }, {
                    bytes: 3768,
                    md5: "935abfbea4723840a3e86879a7a377bd",
                    name: "hud_bg.png"
                }, {
                    bytes: 9386,
                    md5: "9c9bea8879710a27ec2ed7dc676c7aba",
                    name: "pause_btn.png"
                }, {
                    bytes: 17551,
                    md5: "6a40697b164d720c573667f9ccac9d87",
                    name: "play_btn.png"
                }, {
                    bytes: 19888,
                    md5: "581e716809709e6247b69ad9d3b0ecb5",
                    name: "play_btn2.png"
                }, {
                    bytes: 9260,
                    md5: "e87c61b2acc5abafa79bfb9529672a71",
                    name: "push_btn.png"
                }, {
                    bytes: 11724,
                    md5: "9558da2f1295b321c8b9b0bb846f6ade",
                    name: "replay_btn.png"
                }, {
                    bytes: 8170,
                    md5: "11d79da76c6e9f6d0d4d305f7d111062",
                    name: "score_icon.png"
                }, {
                    bytes: 12,
                    md5: "dc8056702323802c70172d6227ecff26",
                    name: "settings.ini"
                }, {
                    bytes: 12139,
                    md5: "8f2205d16e919e14420292efeed78868",
                    name: "sound_off_btn.png"
                }, {
                    bytes: 12222,
                    md5: "e8d46c16b669fc7ba6ecfa7cecc37778",
                    name: "sound_on_btn.png"
                }, {
                    bytes: 11319,
                    md5: "101279fccc260cb7badc168e2c1d50b3",
                    name: "sounds/bonus_sfx.mp3"
                }, {
                    bytes: 15705,
                    md5: "492f3aafc9acc2b8c3b5bad8e2f17747",
                    name: "sounds/button_click_sfx.mp3"
                }, {
                    bytes: 57710,
                    md5: "0f9d57525bd6973c3b40a133ebd1dd12",
                    name: "sounds/game_over_sfx.mp3"
                }, {
                    bytes: 74010,
                    md5: "a8a348dd23303bf14ad040ce7e9b0856",
                    name: "sounds/level_end_sfx.mp3"
                }, {
                    bytes: 8182,
                    md5: "0a371ce975a643d632f309a20a0eb90f",
                    name: "sounds/no_match_sfx.mp3"
                }, {
                    bytes: 16332,
                    md5: "37f74f6a6c5a74b34213e1880f5c1477",
                    name: "sounds/pop_sfx.mp3"
                }, {
                    bytes: 385324,
                    md5: "4ebc4263412e80d7ff60ed3ac82e01a2",
                    name: "sounds/soundtrack1.mp3"
                }, {
                    bytes: 49489,
                    md5: "662133e46b53ed6e96a34a220051dfa5",
                    name: "spikes_block.png"
                }],
                boot: [{
                    bytes: 12539,
                    md5: "8ff68b1f9e1dc38d7cb46c0defb7539e",
                    name: "rot_phone.png"
                }]
            }]
        }
    };
    V._supportsCrossOrigin = function() {
        var e;
        e = 0 <= window.navigator.userAgent.indexOf("Linux; U; Android") ? !1 : null != (new XMLHttpRequest).withCredentials;
        e || null;
        return e
    }();
    J._scratchPoint = new u;
    G.NEWLINE = new Q(10);
    
    St._sharedEvent = new lt;
    Tt._sharedEvent = new ht;
    Xt.CANVAS_TEXTURES = (new s("(iPhone|iPod|iPad)", "")).match(window.navigator.userAgent);
    Jt._mediaRefCount = 0;
    Jt._detectBlobSupport = !0;
    tn.VENDOR_PREFIXES = ["webkit", "moz", "ms", "o", "khtml"];
    tn.SHOULD_HIDE_MOBILE_BROWSER = window.top == window && (new s("Mobile(/.*)? Safari", "")).match(window.navigator.userAgent);
    nn._detectSupport = !0;
    Mn.USE_CACHE = !1;
    Mn.USE_ENUM_INDEX = !1;
    Mn.BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:";
    _n.DEFAULT_RESOLVER = w;
    _n.BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:";
    Pn.count = 0;
    Un.cLevel = 1;
    $n.soundsFolder = "sounds";
    $n.isMuted = !1;
    Kn.defaultOrientation = it.Portrait;
    Kn.defaultFont = "default_font1";
    Kn.systemBgColor = 0;
    Kn.buttonClickSfx = "";
    p.main()
})()